From 9eefbf1fd0fa5c51b6ee89d3668c1fa6f9f8399e Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Wed, 5 Jul 2017 21:42:41 -0500 Subject: [PATCH 1/9] Added Loot Permissions --- .../radial/terminal/character_builder.groovy | 3 +- .../object/CreateStaticItemIntent.java | 9 ++- .../commands/callbacks/QaToolCmdCallback.java | 3 +- .../containers/ContainerPermissionsType.java | 1 + src/resources/containers/LootPermissions.java | 67 +++++++++++++++++++ .../objects/creature/CreatureObject.java | 19 ++++++ src/services/combat/CombatManager.java | 2 + src/services/combat/LootService.java | 9 ++- .../experience/SkillTemplateService.java | 3 +- src/services/objects/StaticItemService.java | 4 ++ src/services/objects/UniformBoxService.java | 3 +- 11 files changed, 113 insertions(+), 10 deletions(-) create mode 100644 src/resources/containers/LootPermissions.java diff --git a/scripts/radial/terminal/character_builder.groovy b/scripts/radial/terminal/character_builder.groovy index 5fbc99b6e..bba8e396a 100644 --- a/scripts/radial/terminal/character_builder.groovy +++ b/scripts/radial/terminal/character_builder.groovy @@ -2,6 +2,7 @@ import com.projectswg.common.data.location.Location import com.projectswg.common.data.location.Terrain import intents.object.CreateStaticItemIntent import intents.object.ObjectTeleportIntent +import resources.containers.ContainerPermissionsType; import resources.objects.SWGObject import resources.objects.creature.CreatureObject import resources.player.Player @@ -52,7 +53,7 @@ static def spawnItems(Player player, List items) { def creature = player.getCreatureObject() def inventory = creature.getSlottedObject("inventory") - new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), items.toArray(new String[0])).broadcast() + new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), ContainerPermissionsType.DEFAULT, items.toArray(new String[0])).broadcast() } static def handleArmor(Player player) { diff --git a/src/intents/object/CreateStaticItemIntent.java b/src/intents/object/CreateStaticItemIntent.java index cde3bcfe7..6a60f07d8 100644 --- a/src/intents/object/CreateStaticItemIntent.java +++ b/src/intents/object/CreateStaticItemIntent.java @@ -29,6 +29,7 @@ package intents.object; import com.projectswg.common.control.Intent; +import resources.containers.ContainerPermissionsType; import resources.objects.SWGObject; import services.objects.StaticItemService.ObjectCreationHandler; @@ -37,12 +38,14 @@ public final class CreateStaticItemIntent extends Intent { private final SWGObject requester; private final SWGObject container; private final ObjectCreationHandler objectCreationHandler; + private final ContainerPermissionsType permissions; private final String[] itemNames; - public CreateStaticItemIntent(SWGObject requester, SWGObject container, ObjectCreationHandler objectCreationHandler, String... itemNames) { + public CreateStaticItemIntent(SWGObject requester, SWGObject container, ObjectCreationHandler objectCreationHandler, ContainerPermissionsType permissions, String... itemNames) { this.requester = requester; this.container = container; this.objectCreationHandler = objectCreationHandler; + this.permissions = permissions; this.itemNames = itemNames; } @@ -58,6 +61,10 @@ public final class CreateStaticItemIntent extends Intent { return requester; } + public ContainerPermissionsType getPermissions(){ + return permissions; + } + public ObjectCreationHandler getObjectCreationHandler() { return objectCreationHandler; } diff --git a/src/resources/commands/callbacks/QaToolCmdCallback.java b/src/resources/commands/callbacks/QaToolCmdCallback.java index 951efffb1..d3ce2defb 100644 --- a/src/resources/commands/callbacks/QaToolCmdCallback.java +++ b/src/resources/commands/callbacks/QaToolCmdCallback.java @@ -42,6 +42,7 @@ import intents.object.MoveObjectIntent; import intents.object.ObjectTeleportIntent; import intents.player.DeleteCharacterIntent; import resources.commands.ICmdCallback; +import resources.containers.ContainerPermissionsType; import resources.network.DisconnectReason; import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; @@ -163,7 +164,7 @@ public class QaToolCmdCallback implements ICmdCallback { public boolean isIgnoreVolume() { return false; } - }, itemName).broadcast(); + }, ContainerPermissionsType.DEFAULT, itemName).broadcast(); } private void forceDelete(final ObjectManager objManager, final Player player, final SWGObject target) { diff --git a/src/resources/containers/ContainerPermissionsType.java b/src/resources/containers/ContainerPermissionsType.java index 3b1906112..7a944eed5 100644 --- a/src/resources/containers/ContainerPermissionsType.java +++ b/src/resources/containers/ContainerPermissionsType.java @@ -32,6 +32,7 @@ import resources.objects.SWGObject; public enum ContainerPermissionsType { DEFAULT (new DefaultPermissions()), INVENTORY (new InventoryPermissions()), + LOOT (new LootPermissions()), ADMIN (new AdminPermissions()); private final ContainerPermissions permissions; diff --git a/src/resources/containers/LootPermissions.java b/src/resources/containers/LootPermissions.java new file mode 100644 index 000000000..73fa5cb7f --- /dev/null +++ b/src/resources/containers/LootPermissions.java @@ -0,0 +1,67 @@ +/******************************************************************************* + * Copyright (c) 2015 /// Project SWG /// www.projectswg.com + * + * ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on + * July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. + * Our goal is to create an emulator which will provide a server for players to + * continue playing a game similar to the one they used to play. We are basing + * it on the final publish of the game prior to end-game events. + * + * This file is part of Holocore. + * + * -------------------------------------------------------------------------------- + * + * Holocore is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * Holocore is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Holocore. If not, see + ******************************************************************************/ + +package resources.containers; + +import resources.objects.SWGObject; +import resources.objects.creature.CreatureObject; + +class LootPermissions extends ContainerPermissions { + + @Override + public boolean canView(SWGObject requester, SWGObject container) { + return true; + } + + @Override + public boolean canEnter(SWGObject requester, SWGObject container) { + return true; + } + + @Override + public boolean canRemove(SWGObject requester, SWGObject container) { + return false; + } + + @Override + public boolean canMove(SWGObject requester, SWGObject container) { + //TODO: Group Permissions + if (container.getParent().getParent() instanceof CreatureObject){ + CreatureObject owner = (CreatureObject) container.getParent().getParent(); + + if (owner.getHighestDamageDealer().getOwner().equals(requester.getOwner())){ + return true; + } + } + return requester.getOwner().equals(container.getOwner()); + } + + @Override + public boolean canAdd(SWGObject requester, SWGObject container) { + return false; + } +} diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 70242f5fe..7d21d2249 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -30,8 +30,10 @@ package resources.objects.creature; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Set; import java.util.function.Predicate; import java.util.stream.Stream; @@ -87,6 +89,8 @@ public class CreatureObject extends TangibleObject { private List sentDuels = new ArrayList<>(); + private Map damageMap = new HashMap<>(); + public CreatureObject(long objectId) { super(objectId, BaselineType.CREO); initBaseAttributes(); @@ -845,6 +849,21 @@ public class CreatureObject extends TangibleObject { } return items; } + + public Map getDamageMap(){ + return damageMap; + } + + public CreatureObject getHighestDamageDealer(){ + return damageMap.keySet().stream().max((c1, c2) -> damageMap.get(c1) - damageMap.get(c2)).orElse(null); + } + + public void handleDamage(CreatureObject attacker, int damage){ + if(damageMap.containsKey(attacker)) + damageMap.put(attacker, damageMap.get(attacker) + damage); + else + damageMap.put(attacker, damage); + } public boolean isAttackable(CreatureObject otherObject) { Posture otherPosture = otherObject.getPosture(); diff --git a/src/services/combat/CombatManager.java b/src/services/combat/CombatManager.java index 1805abdd0..ceaf326ac 100644 --- a/src/services/combat/CombatManager.java +++ b/src/services/combat/CombatManager.java @@ -426,6 +426,8 @@ public class CombatManager extends Manager { action.addDefender(target, true, (byte) 0, HitLocation.HIT_LOCATION_BODY, (short) finalDamage); + target.handleDamage(source, finalDamage); + if (target.getHealth() <= finalDamage) doCreatureDeath(target, source); else diff --git a/src/services/combat/LootService.java b/src/services/combat/LootService.java index 3205a9084..2543f4ffd 100644 --- a/src/services/combat/LootService.java +++ b/src/services/combat/LootService.java @@ -47,6 +47,7 @@ import intents.radial.RadialResponseIntent; import intents.radial.RadialSelectionIntent; import network.packets.swg.zone.ClientOpenContainerMessage; import network.packets.swg.zone.PlayClientEffectObjectTransformMessage; +import resources.containers.ContainerPermissionsType; import resources.objects.SWGObject; import resources.objects.creature.CreatureDifficulty; import resources.objects.creature.CreatureObject; @@ -199,7 +200,6 @@ public final class LootService extends Service { SWGObject lootInventory = ObjectCreator.createObjectFromTemplate("object/tangible/inventory/shared_creature_inventory.iff"); lootInventory.setLocation(corpse.getLocation()); - // TODO set permissions on lootInventory corpse.addObject(lootInventory); // It's a slotted object and goes in the inventory slot new ObjectCreatedIntent(lootInventory).broadcast(); @@ -355,7 +355,7 @@ public final class LootService extends Service { } else if (randomItemName.endsWith(".iff")) { String sharedTemplate = ClientFactory.formatToSharedFile(randomItemName); SWGObject object = ObjectCreator.createObjectFromTemplate(sharedTemplate); - + object.setContainerPermissions(ContainerPermissionsType.LOOT); object.moveToContainer(lootInventory); new ObjectCreatedIntent(object).broadcast(); } else { @@ -369,14 +369,13 @@ public final class LootService extends Service { public boolean isIgnoreVolume() { return true; } - }, randomItemName).broadcast(); + },ContainerPermissionsType.LOOT, randomItemName).broadcast(); } - break; // Only one group is ever spawned } } } - + private static class NPCLoot { private final int minCash; diff --git a/src/services/experience/SkillTemplateService.java b/src/services/experience/SkillTemplateService.java index 2df4f764e..3b76d83d6 100644 --- a/src/services/experience/SkillTemplateService.java +++ b/src/services/experience/SkillTemplateService.java @@ -49,6 +49,7 @@ import network.packets.swg.zone.PlayMusicMessage; import network.packets.swg.zone.object_controller.ShowFlyText; import network.packets.swg.zone.object_controller.ShowFlyText.Scale; import resources.Race; +import resources.containers.ContainerPermissionsType; import resources.encodables.StringId; import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; @@ -196,7 +197,7 @@ public final class SkillTemplateService extends Service { // 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(); + new CreateStaticItemIntent(creatureObject, inventory, new StaticItemService.LootBoxHandler(creatureObject), ContainerPermissionsType.DEFAULT, staticItems.toArray(new String[staticItems.size()])).broadcast(); } } diff --git a/src/services/objects/StaticItemService.java b/src/services/objects/StaticItemService.java index 919d63610..b1a4953b0 100644 --- a/src/services/objects/StaticItemService.java +++ b/src/services/objects/StaticItemService.java @@ -45,6 +45,7 @@ import intents.server.ConfigChangedIntent; import network.packets.swg.zone.object_controller.ShowLootBox; import resources.combat.DamageType; import resources.config.ConfigFile; +import resources.containers.ContainerPermissionsType; import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; import resources.objects.weapon.WeaponObject; @@ -168,6 +169,7 @@ public final class StaticItemService extends Service { String[] itemNames = csii.getItemNames(); Player requesterOwner = csii.getRequester().getOwner(); ObjectCreationHandler objectCreationHandler = csii.getObjectCreationHandler(); + ContainerPermissionsType permissions = csii.getPermissions(); // If adding these items to the container would exceed the max capacity... if(!objectCreationHandler.isIgnoreVolume() && container.getVolume() + itemNames.length > container.getMaxContainerSize()) { @@ -196,6 +198,8 @@ public final class StaticItemService extends Service { case SUCCESS: Log.d("Successfully moved %s into container %s", itemName, container); createdObjects[j] = object; + object.setContainerPermissions(permissions); + break; default: break; diff --git a/src/services/objects/UniformBoxService.java b/src/services/objects/UniformBoxService.java index 1b90a1dd1..826b3cd00 100644 --- a/src/services/objects/UniformBoxService.java +++ b/src/services/objects/UniformBoxService.java @@ -41,6 +41,7 @@ import com.projectswg.common.debug.Log; import intents.object.CreateStaticItemIntent; import intents.object.DestroyObjectIntent; import intents.radial.RadialSelectionIntent; +import resources.containers.ContainerPermissionsType; import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; import resources.player.Player; @@ -113,7 +114,7 @@ public class UniformBoxService extends Service { staticItems.add(item); } - new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), staticItems.toArray(new String[staticItems.size()])).broadcast(); + new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), ContainerPermissionsType.DEFAULT, staticItems.toArray(new String[staticItems.size()])).broadcast(); } } From dcb050067c71b09ce412c8b7e82c81d7ca9005e6 Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Wed, 5 Jul 2017 22:34:29 -0500 Subject: [PATCH 2/9] Updates to loot permissions --- .../radial/terminal/character_builder.groovy | 2 +- src/resources/containers/LootPermissions.java | 4 ++-- .../objects/creature/CreatureObject.java | 23 +++++++++++-------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/scripts/radial/terminal/character_builder.groovy b/scripts/radial/terminal/character_builder.groovy index bba8e396a..289c513ef 100644 --- a/scripts/radial/terminal/character_builder.groovy +++ b/scripts/radial/terminal/character_builder.groovy @@ -53,7 +53,7 @@ static def spawnItems(Player player, List items) { def creature = player.getCreatureObject() def inventory = creature.getSlottedObject("inventory") - new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), ContainerPermissionsType.DEFAULT, items.toArray(new String[0])).broadcast() + new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), ContainerPermissionsType.DEFAULT, items.toArray(new String[items.size()]).broadcast() } static def handleArmor(Player player) { diff --git a/src/resources/containers/LootPermissions.java b/src/resources/containers/LootPermissions.java index 73fa5cb7f..2f54dcd87 100644 --- a/src/resources/containers/LootPermissions.java +++ b/src/resources/containers/LootPermissions.java @@ -50,10 +50,10 @@ class LootPermissions extends ContainerPermissions { @Override public boolean canMove(SWGObject requester, SWGObject container) { //TODO: Group Permissions - if (container.getParent().getParent() instanceof CreatureObject){ + if (container.getParent() != null && container.getParent().getParent() instanceof CreatureObject){ CreatureObject owner = (CreatureObject) container.getParent().getParent(); - if (owner.getHighestDamageDealer().getOwner().equals(requester.getOwner())){ + if (requester.getOwner() != null && owner.getHighestDamageDealer().getOwner().equals(requester.getOwner())){ return true; } } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 7d21d2249..f0ce20945 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -68,8 +68,9 @@ public class CreatureObject extends TangibleObject { private transient long lastReserveOperation = 0; - private final CreatureObjectClientServerNP creo4 = new CreatureObjectClientServerNP(); - private final CreatureObjectSharedNP creo6 = new CreatureObjectSharedNP(); + private final CreatureObjectClientServerNP creo4 = new CreatureObjectClientServerNP(); + private final CreatureObjectSharedNP creo6 = new CreatureObjectSharedNP(); + private final Map damageMap = new HashMap<>(); private Posture posture = Posture.UPRIGHT; private Race race = Race.HUMAN_MALE; @@ -89,8 +90,6 @@ public class CreatureObject extends TangibleObject { private List sentDuels = new ArrayList<>(); - private Map damageMap = new HashMap<>(); - public CreatureObject(long objectId) { super(objectId, BaselineType.CREO); initBaseAttributes(); @@ -851,18 +850,22 @@ public class CreatureObject extends TangibleObject { } public Map getDamageMap(){ - return damageMap; + return Collections.unmodifiableMap(damageMap); } public CreatureObject getHighestDamageDealer(){ - return damageMap.keySet().stream().max((c1, c2) -> damageMap.get(c1) - damageMap.get(c2)).orElse(null); + synchronized (damageMap){ + return damageMap.keySet().stream().max((c1, c2) -> damageMap.get(c1) - damageMap.get(c2)).orElse(null); + } } public void handleDamage(CreatureObject attacker, int damage){ - if(damageMap.containsKey(attacker)) - damageMap.put(attacker, damageMap.get(attacker) + damage); - else - damageMap.put(attacker, damage); + synchronized (damageMap){ + if(damageMap.containsKey(attacker)) + damageMap.put(attacker, damageMap.get(attacker) + damage); + else + damageMap.put(attacker, damage); + } } public boolean isAttackable(CreatureObject otherObject) { From 1a8340c88e4a1e1e77ff90b0e218bbf17e512d0d Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Wed, 5 Jul 2017 22:39:57 -0500 Subject: [PATCH 3/9] Null check update to loot permissions --- src/resources/containers/LootPermissions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/containers/LootPermissions.java b/src/resources/containers/LootPermissions.java index 2f54dcd87..025e5ff1c 100644 --- a/src/resources/containers/LootPermissions.java +++ b/src/resources/containers/LootPermissions.java @@ -53,7 +53,7 @@ class LootPermissions extends ContainerPermissions { if (container.getParent() != null && container.getParent().getParent() instanceof CreatureObject){ CreatureObject owner = (CreatureObject) container.getParent().getParent(); - if (requester.getOwner() != null && owner.getHighestDamageDealer().getOwner().equals(requester.getOwner())){ + if (owner != null && requester.getOwner() != null && owner.getHighestDamageDealer().getOwner().equals(requester.getOwner())){ return true; } } From 99f4c9755067c62a21293f95fbf09888558c1927 Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Wed, 5 Jul 2017 22:53:30 -0500 Subject: [PATCH 4/9] Fix missing ) issue --- scripts/radial/terminal/character_builder.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/radial/terminal/character_builder.groovy b/scripts/radial/terminal/character_builder.groovy index 289c513ef..02a54e251 100644 --- a/scripts/radial/terminal/character_builder.groovy +++ b/scripts/radial/terminal/character_builder.groovy @@ -53,7 +53,7 @@ static def spawnItems(Player player, List items) { def creature = player.getCreatureObject() def inventory = creature.getSlottedObject("inventory") - new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), ContainerPermissionsType.DEFAULT, items.toArray(new String[items.size()]).broadcast() + new CreateStaticItemIntent(creature, inventory, new StaticItemService.LootBoxHandler(creature), ContainerPermissionsType.DEFAULT, items.toArray(new String[items.size()])).broadcast() } static def handleArmor(Player player) { From 64974ca4629dae9b0b321f193b0383e4c732620a Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Thu, 6 Jul 2017 16:46:09 -0500 Subject: [PATCH 5/9] Update to loot permissions --- src/resources/containers/LootPermissions.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/resources/containers/LootPermissions.java b/src/resources/containers/LootPermissions.java index 025e5ff1c..9cb9e71ef 100644 --- a/src/resources/containers/LootPermissions.java +++ b/src/resources/containers/LootPermissions.java @@ -27,6 +27,8 @@ package resources.containers; +import com.projectswg.common.debug.Log; + import resources.objects.SWGObject; import resources.objects.creature.CreatureObject; @@ -50,18 +52,38 @@ class LootPermissions extends ContainerPermissions { @Override public boolean canMove(SWGObject requester, SWGObject container) { //TODO: Group Permissions + if (requester.getOwner() == null || requester.getParent() == null) + return true; + + if (container.getParent() == null || requester.getParent() == null) + return defaultCanMove(requester, container); + + if (!(container.getParent().getParent() instanceof CreatureObject)) + return defaultCanMove(requester, container); + + CreatureObject highestDamageDealer = ((CreatureObject) container.getParent().getParent()).getHighestDamageDealer(); + + if (highestDamageDealer != null && highestDamageDealer.getOwner() != null && highestDamageDealer.getOwner().equals(requester.getOwner())) + return true; + + return defaultCanMove(requester, container); + /* + return requester.getOwner().equals(container.getOwner()); if (container.getParent() != null && container.getParent().getParent() instanceof CreatureObject){ CreatureObject owner = (CreatureObject) container.getParent().getParent(); if (owner != null && requester.getOwner() != null && owner.getHighestDamageDealer().getOwner().equals(requester.getOwner())){ return true; } - } - return requester.getOwner().equals(container.getOwner()); + }*/ } @Override public boolean canAdd(SWGObject requester, SWGObject container) { return false; } + + public boolean defaultCanMove(SWGObject requester, SWGObject container){ + return requester.getOwner() != null && requester.getOwner().equals(container.getOwner()); + } } From e45f3ecf899af67f34e817194bb9fc0ccdf18778 Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Thu, 6 Jul 2017 18:10:17 -0500 Subject: [PATCH 6/9] Removed old code --- src/resources/containers/LootPermissions.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/resources/containers/LootPermissions.java b/src/resources/containers/LootPermissions.java index 9cb9e71ef..cb95e0de9 100644 --- a/src/resources/containers/LootPermissions.java +++ b/src/resources/containers/LootPermissions.java @@ -67,15 +67,6 @@ class LootPermissions extends ContainerPermissions { return true; return defaultCanMove(requester, container); - /* - return requester.getOwner().equals(container.getOwner()); - if (container.getParent() != null && container.getParent().getParent() instanceof CreatureObject){ - CreatureObject owner = (CreatureObject) container.getParent().getParent(); - - if (owner != null && requester.getOwner() != null && owner.getHighestDamageDealer().getOwner().equals(requester.getOwner())){ - return true; - } - }*/ } @Override From ecf28a2702a41c7fe061169c38c06f4c7ac4fd77 Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Thu, 6 Jul 2017 21:31:51 -0500 Subject: [PATCH 7/9] Fix for NPC inventory pops up instead of loot window --- src/services/combat/CombatManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/services/combat/CombatManager.java b/src/services/combat/CombatManager.java index ceaf326ac..c653822e3 100644 --- a/src/services/combat/CombatManager.java +++ b/src/services/combat/CombatManager.java @@ -548,8 +548,11 @@ public class CombatManager extends Manager { } private void killCreature(CreatureObject killer, CreatureObject corpse) { + // We don't want to kill a creature that is already dead + if (corpse.getPosture() == Posture.DEAD) + return; + corpse.setPosture(Posture.DEAD); - Log.i("%s was killed by %s", corpse, killer); new CreatureKilledIntent(killer, corpse).broadcast(); } From 810ef097116ccbc3df7124cb823b12b979af8a68 Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Thu, 6 Jul 2017 21:42:38 -0500 Subject: [PATCH 8/9] Update to loot permissions --- src/resources/containers/LootPermissions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/containers/LootPermissions.java b/src/resources/containers/LootPermissions.java index cb95e0de9..5ef8854a7 100644 --- a/src/resources/containers/LootPermissions.java +++ b/src/resources/containers/LootPermissions.java @@ -74,7 +74,7 @@ class LootPermissions extends ContainerPermissions { return false; } - public boolean defaultCanMove(SWGObject requester, SWGObject container){ + private boolean defaultCanMove(SWGObject requester, SWGObject container){ return requester.getOwner() != null && requester.getOwner().equals(container.getOwner()); } } From cd9e86bfad3220f757024ffc57486a3fcac0e175 Mon Sep 17 00:00:00 2001 From: Undercova PSWG Date: Fri, 7 Jul 2017 16:45:58 +0000 Subject: [PATCH 9/9] Set entertainer flourish XP back to normal --- src/services/commands/EntertainmentService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/commands/EntertainmentService.java b/src/services/commands/EntertainmentService.java index 12fc47830..8f9137144 100644 --- a/src/services/commands/EntertainmentService.java +++ b/src/services/commands/EntertainmentService.java @@ -454,7 +454,7 @@ public class EntertainmentService extends Service { PerformanceData performanceData = performanceMap.get(performanceName); int flourishXpMod = performanceData.getFlourishXpMod(); int performanceCounter = performer.getPerformanceCounter(); - int xpGained = (int) (performanceCounter * (flourishXpMod * 3.8)); + int xpGained = (int) (performanceCounter * flourishXpMod); if(xpGained > 0) { new ExperienceIntent(performer, "entertainer", xpGained).broadcast();