diff --git a/scripts/commands/generic/groupMakeMasterLooter.js b/scripts/commands/generic/groupMakeMasterLooter.js new file mode 100644 index 000000000..ad38b9df6 --- /dev/null +++ b/scripts/commands/generic/groupMakeMasterLooter.js @@ -0,0 +1,7 @@ +function executeCommand(galacticManager, player, target, args) { + + var GroupEventIntent = Java.type("intents.GroupEventIntent"); + var GroupEventType = Java.type("intents.GroupEventIntent.GroupEventType"); + + new GroupEventIntent(GroupEventType.GROUP_MAKE_MASTER_LOOTER, player, target).broadcast(); +} diff --git a/src/intents/GroupEventIntent.java b/src/intents/GroupEventIntent.java index 6a1f16b27..de734222e 100644 --- a/src/intents/GroupEventIntent.java +++ b/src/intents/GroupEventIntent.java @@ -73,6 +73,7 @@ public class GroupEventIntent extends Intent { GROUP_DISBAND, GROUP_LEAVE, GROUP_MAKE_LEADER, - GROUP_KICK + GROUP_KICK, + GROUP_MAKE_MASTER_LOOTER } } \ No newline at end of file diff --git a/src/resources/objects/group/GroupObject.java b/src/resources/objects/group/GroupObject.java index 11f3f7a90..08f34f99c 100644 --- a/src/resources/objects/group/GroupObject.java +++ b/src/resources/objects/group/GroupObject.java @@ -53,6 +53,10 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO? private short level; private long lootMaster; private int lootRule; + + public static final int LOOT_FREE_FOR_ALL = 1; + public static final int LOOT_LOTTERY = 2; + public static final int LOOT_MASTER = 3; private transient PickupPointTimer pickupPointTimer; @@ -181,6 +185,8 @@ public class GroupObject extends SWGObject { // Extends INTO or TANO? this.lootRule = lootRule; sendDelta(6, 8, lootRule); } + + public boolean isFull() { return groupMembers.size() == 9; } public Map getGroupMembers() { Map members = new HashMap<>(); diff --git a/src/services/group/GroupService.java b/src/services/group/GroupService.java index abf3286c1..019756e75 100644 --- a/src/services/group/GroupService.java +++ b/src/services/group/GroupService.java @@ -113,6 +113,9 @@ public class GroupService extends Service { case GROUP_KICK: handleKick(intent.getPlayer(), intent.getTarget()); break; + case GROUP_MAKE_MASTER_LOOTER: + handleMakeMasterLooter(intent.getPlayer(), intent.getTarget()); + break; } } @@ -269,6 +272,10 @@ public class GroupService extends Service { return; } + if (group.isFull()) { + sendSystemMessage(player, "full"); + return; + } if (target.getInviterData().getId() != 0 ) { if(target.getInviterData().getId() != groupId) sendSystemMessage(player, "considering_other_group"); @@ -349,7 +356,7 @@ public class GroupService extends Service { return; } - if (group.getGroupMembers().size() == 8) { + if (group.isFull()) { sendSystemMessage(player, "join_full"); creo.updateGroupInviteData(null, 0, ""); return; @@ -381,7 +388,43 @@ public class GroupService extends Service { group.setLeader(newLeader); } - + + private void handleMakeMasterLooter(Player player, CreatureObject target) { + + CreatureObject playerCreo = player.getCreatureObject(); + if (playerCreo.getGroupId() == 0) { + + sendSystemMessage(player, "group_only"); + return; + } + + GroupObject group = getGroup(playerCreo.getGroupId()); + + if (group.getLeader() != playerCreo.getObjectId()) { + + int lootRule = group.getLootRule(); + sendNonLeaderLootMessage(player, lootRule); + } + } + + private void sendNonLeaderLootMessage(Player player, int lootRule) { + switch (lootRule) { + case 0: + sendSystemMessage(player, "leader_only"); + break; + case GroupObject.LOOT_FREE_FOR_ALL: + sendSystemMessage(player, "leader_only_free4all"); + break; + case GroupObject.LOOT_LOTTERY: + sendSystemMessage(player, "leader_only_lottery"); + break; + case GroupObject.LOOT_MASTER: + sendSystemMessage(player, "leader_only_master"); + break; + default: + break; + } + } private void handleKick(Player leader, CreatureObject kickedCreo) { GroupObject group = getGroup(kickedCreo.getGroupId());