From 8e6ac5213b11ec63ddb06fbbb627bf9fb635ad50 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 14 May 2014 17:12:46 -0400 Subject: [PATCH] Player Association Access added to datapad on creation, added guildId delta, changed getGuildList to return SWGSet --- .../intangible/data_item/guild_stone.py | 1 + scripts/radial/object/guild_access_device.py | 30 +++++++++++++++++++ scripts/radial/object/guild_registry.py | 22 ++++---------- src/resources/guild/Guild.java | 7 ++++- .../creature/CreatureMessageBuilder.java | 10 +++++++ .../objects/creature/CreatureObject.java | 4 +++ src/resources/objects/guild/GuildObject.java | 4 +-- src/services/CharacterService.java | 4 +++ src/services/GuildService.java | 30 ++++--------------- 9 files changed, 69 insertions(+), 43 deletions(-) create mode 100644 scripts/radial/object/guild_access_device.py diff --git a/scripts/object/intangible/data_item/guild_stone.py b/scripts/object/intangible/data_item/guild_stone.py index ccad8904..7cf0dd3a 100644 --- a/scripts/object/intangible/data_item/guild_stone.py +++ b/scripts/object/intangible/data_item/guild_stone.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'object/guild_access_device') return \ No newline at end of file diff --git a/scripts/radial/object/guild_access_device.py b/scripts/radial/object/guild_access_device.py new file mode 100644 index 00000000..bd019f39 --- /dev/null +++ b/scripts/radial/object/guild_access_device.py @@ -0,0 +1,30 @@ +from resources.common import RadialOptions +from services.sui.SUIService import InputBoxType +from java.util import Vector +from main import NGECore +import sys + +def createRadial(core, owner, target, radials): + + #radials.clear() + + if owner.getGuildId() != 0: + guild = core.guildService.getGuildById(owner.getGuildId) + + if guild is None: + return + + if guild.getLeader() == owner.getObjectID(): + radials.add(RadialOptions(0, RadialOptions.serverGuildGuildManagement, 3, '@guild:menu_guild_management')) + radials.add(RadialOptions(0, RadialOptions.serverGuildMemberManagement, 3, '@guild:menu_member_management')) + + #Guild Management + radials.add(RadialOptions(3, RadialOptions.serverGuildDisband, 3, '@guild:menu_disband')) + + #Member Management + radials.add(RadialOptions(4, RadialOptions.serverGuildSponsor, 3, '@guild:menu_sponsor')) + return + return + +def handleSelection(core, owner, target, option): + return \ No newline at end of file diff --git a/scripts/radial/object/guild_registry.py b/scripts/radial/object/guild_registry.py index d3fd23ae..7b383d9a 100644 --- a/scripts/radial/object/guild_registry.py +++ b/scripts/radial/object/guild_registry.py @@ -12,39 +12,29 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, RadialOptions.serverGuildCreate, 3, '@guild:menu_create')) return - else: - radials.add(RadialOptions(0, RadialOptions.serverGuildGuildManagement, 3, '@guild:menu_guild_management')) - radials.add(RadialOptions(0, RadialOptions.serverGuildMemberManagement, 3, '@guild:menu_member_management')) - - #Guild Management - - radials.add(RadialOptions(3, RadialOptions.serverGuildDisband, 3, '@guild:menu_disband')) - - #Member Management - radials.add(RadialOptions(4, RadialOptions.serverGuildSponsor, 3, '@guild:menu_sponsor')) - return - return def handleSelection(core, owner, target, option): - + suiSvc = NGECore().getInstance().suiService # Create Guild if option == 185 and target: wndGuildCreate = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, '@guild:create_name_title', '@guild:create_name_prompt', owner, owner, 0, handleGuildCreateName) - wndGuildCreate.setProperty("txtInput:MaxLength", "25"); + wndGuildCreate.setProperty("txtInput:MaxLength", "24"); + wndGuildCreate.setProperty("txtInput:NumericInteger", "false") suiSvc.openSUIWindow(wndGuildCreate) return return def handleGuildCreateName(owner, window, eventType, returnList): - + suiSvc = NGECore().getInstance().suiService if eventType == 0: guildName = str(returnList.get(0)) if guildName is not None: owner.setAttachment('guildName', guildName) wndGuildInitials = NGECore().getInstance().suiService.createInputBox(InputBoxType.INPUT_BOX_OK, '@guild:create_abbrev_title', '@guild:create_abbrev_prompt', owner, owner, 0, doGuildCreate) - wndGuildInitials.setProperty("txtInput:MaxLength", "5"); + wndGuildInitials.setProperty("txtInput:MaxLength", "4"); + wndGuildInitials.setProperty("txtInput:NumericInteger", "false") suiSvc.openSUIWindow(wndGuildInitials) return return diff --git a/src/resources/guild/Guild.java b/src/resources/guild/Guild.java index dca39876..4c1f0201 100644 --- a/src/resources/guild/Guild.java +++ b/src/resources/guild/Guild.java @@ -30,7 +30,7 @@ import org.apache.mina.core.buffer.IoBuffer; import engine.resources.objects.Delta; import engine.resources.objects.SWGObject; -public class Guild extends Delta implements Serializable { +public class Guild extends Delta implements Serializable, Comparable { private static final long serialVersionUID = 1L; private int id; @@ -129,4 +129,9 @@ public class Guild extends Delta implements Serializable { } } + @Override + public int compareTo(Guild guild) { + return ((Integer) id).compareTo(guild.getId()); + } + } diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 30a53018..8c8edbf9 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -682,6 +682,16 @@ public class CreatureMessageBuilder extends TangibleMessageBuilder { } + public IoBuffer buildGuildIdDelta(int guildId) { + IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putInt(guildId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0F, buffer, size + 4); + + return buffer; + } + public IoBuffer buildGroupInviteDelta(long inviteSenderId, String inviteSenderName, long inviteCounter) { IoBuffer buffer = bufferPool.allocate(18 + inviteSenderName.length(), false).order(ByteOrder.LITTLE_ENDIAN); diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 39a62f42..68eea2b3 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -915,6 +915,10 @@ public class CreatureObject extends TangibleObject implements Serializable { synchronized(objectMutex) { this.guildId = guildId; } + + IoBuffer guildIdDelta = messageBuilder.buildGuildIdDelta(guildId); + + notifyObservers(guildIdDelta, true); } public long getLookAtTarget() { diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index d0c0ed62..b3723937 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -95,8 +95,8 @@ public class GuildObject extends UniverseObject implements Serializable { } @SuppressWarnings("unchecked") - public SWGList getGuildList() { - return (SWGList) getBaseline(3).get("guildList"); + public SWGSet getGuildList() { + return (SWGSet) getBaseline(3).get("guildList"); } @SuppressWarnings("unchecked") diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 531895f4..591d76db 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -60,6 +60,7 @@ import protocol.swg.ClientVerifyAndLockNameResponse; import protocol.swg.CreateCharacterSuccess; import protocol.swg.HeartBeatMessage; import resources.objects.creature.CreatureObject; +import resources.objects.intangible.IntangibleObject; import resources.objects.mission.MissionObject; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; @@ -338,6 +339,9 @@ public class CharacterService implements INetworkDispatch { object._add(defaultWeapon); object.setWeaponId(defaultWeapon.getObjectID()); + IntangibleObject pda = (IntangibleObject) core.objectService.createObject("object/intangible/data_item/shared_guild_stone.iff", object.getPlanet()); + datapad.add(pda); + createStarterClothing(object, sharedRaceTemplate, clientCreateCharacter.getStarterProfession()); //core.scriptService.callScript("scripts/", "demo", "CreateStartingCharacter", core, object); diff --git a/src/services/GuildService.java b/src/services/GuildService.java index 3aabe151..fed7c2c9 100644 --- a/src/services/GuildService.java +++ b/src/services/GuildService.java @@ -24,7 +24,7 @@ package services; import java.util.Map; import resources.guild.Guild; -import resources.objects.SWGList; +import resources.objects.SWGSet; import resources.objects.guild.GuildObject; import main.NGECore; import engine.resources.objects.SWGObject; @@ -57,7 +57,7 @@ public class GuildService implements INetworkDispatch { return null; int listSize = object.getGuildList().size(); - Guild guild = new Guild((listSize == 0 ? 1 : (object.getGuildList().get(listSize).getId()) + 1), abbreviation, name, leader); + Guild guild = new Guild((listSize == 0 ? 1 : listSize + 1), abbreviation, name, leader); object.getGuildList().add(guild); @@ -68,38 +68,20 @@ public class GuildService implements INetworkDispatch { return object; } - public SWGList getGuildList() { + public SWGSet getGuildList() { return object.getGuildList(); } public Guild getGuildById(int id) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getId() == id) { - return object.getGuildList().get(i); - } - } - - return null; + return object.getGuildList().stream().filter(g -> g.getId() == id).findFirst().get(); } public Guild getGuildByAbbreviation(String abbreviation) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getAbbreviation().equals(abbreviation)) { - return object.getGuildList().get(i); - } - } - - return null; + return object.getGuildList().stream().filter(g -> g.getAbbreviation().equals(abbreviation)).findFirst().get(); } public Guild getGuildByName(String name) { - for (int i = 0; i < object.getGuildList().size(); i++) { - if (object.getGuildList().get(i).getName().equals(name)) { - return object.getGuildList().get(i); - } - } - - return null; + return object.getGuildList().stream().filter(g -> g.getName().equals(name)).findFirst().get(); } public boolean removeGuild(int id) {