From 11555b99cf7328c7808ba4d55df350cb71609bc4 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Wed, 19 Feb 2014 18:31:03 -0500 Subject: [PATCH] Guild names now show when examining another player --- src/protocol/swg/GuildRequestMessage.java | 34 ++++++++++++ src/protocol/swg/GuildResponseMessage.java | 61 ++++++++++++++++++++++ src/resources/common/Opcodes.java | 1 + src/services/PlayerService.java | 35 +++++++++++++ src/services/guild/GuildService.java | 15 ++++-- 5 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 src/protocol/swg/GuildRequestMessage.java create mode 100644 src/protocol/swg/GuildResponseMessage.java diff --git a/src/protocol/swg/GuildRequestMessage.java b/src/protocol/swg/GuildRequestMessage.java new file mode 100644 index 00000000..211536e4 --- /dev/null +++ b/src/protocol/swg/GuildRequestMessage.java @@ -0,0 +1,34 @@ +package protocol.swg; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.common.Console; +import resources.common.StringUtilities; + +public class GuildRequestMessage extends SWGMessage { + + private long characterId; + + public GuildRequestMessage() { + } + + @Override + public void deserialize(IoBuffer data) { + //data.getShort(); + setCharacterId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + return null; + } + + public long getCharacterId() { + return characterId; + } + + public void setCharacterId(long characterId) { + this.characterId = characterId; + } + +} diff --git a/src/protocol/swg/GuildResponseMessage.java b/src/protocol/swg/GuildResponseMessage.java new file mode 100644 index 00000000..e0c8eb42 --- /dev/null +++ b/src/protocol/swg/GuildResponseMessage.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import resources.common.Console; +import resources.common.StringUtilities; +import resources.guild.Guild; +import resources.objects.creature.CreatureObject; + +public class GuildResponseMessage extends SWGMessage { + + private long player; + private String guildName; + + public GuildResponseMessage(long player, String guild) { + this.player = player; + this.guildName = guild; + } + + @Override + public void deserialize(IoBuffer data) { + + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(18 + guildName.length()).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 4); + buffer.putInt(0x32263F20); + + buffer.putLong(player); + buffer.put(getAsciiString(guildName)); + + return buffer.flip(); + } +} diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index b9284791..72399c5e 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -59,5 +59,6 @@ public class Opcodes { public static int FactionRequestMessage = CRC.StringtoCRC("FactionRequestMessage"); public static int FactionResponseMessage = CRC.StringtoCRC("FactionResponseMessage"); public static int SetWaypointColor = CRC.StringtoCRC("SetWaypointColor"); + public static int GuildRequestMessage = CRC.StringtoCRC("GuildRequestMessage"); } diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index b5c0bc2b..791e2056 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -40,6 +40,8 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.ClientIdMsg; import protocol.swg.ClientMfdStatusUpdateMessage; import protocol.swg.ExpertiseRequestMessage; +import protocol.swg.GuildRequestMessage; +import protocol.swg.GuildResponseMessage; import protocol.swg.ServerTimeMessage; import protocol.swg.SetWaypointColor; import protocol.swg.objectControllerObjects.ChangeRoleIconChoice; @@ -51,6 +53,7 @@ import resources.common.Opcodes; import resources.common.RGB; import resources.common.SpawnPoint; import resources.datatables.PlayerFlags; +import resources.guild.Guild; import resources.objects.Buff; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; @@ -237,6 +240,38 @@ public class PlayerService implements INetworkDispatch { } + }); + swgOpcodes.put(Opcodes.GuildRequestMessage, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + GuildRequestMessage request = new GuildRequestMessage(); + request.deserialize(data); + + CreatureObject targetPlayer = (CreatureObject) core.objectService.getObject(request.getCharacterId()); + + if (targetPlayer.getGuildId() != 0) { + Guild targetGuild = core.guildService.getGuildById(targetPlayer.getGuildId()); + GuildResponseMessage response = new GuildResponseMessage(request.getCharacterId(), targetGuild.getName()); + client.getSession().write(response.serialize()); + } else { + GuildResponseMessage response = new GuildResponseMessage(request.getCharacterId(), "None"); + client.getSession().write(response.serialize()); + } + } + }); swgOpcodes.put(Opcodes.CmdSceneReady, new INetworkRemoteEvent() { diff --git a/src/services/guild/GuildService.java b/src/services/guild/GuildService.java index 902bd569..f591db3e 100644 --- a/src/services/guild/GuildService.java +++ b/src/services/guild/GuildService.java @@ -23,12 +23,11 @@ package services.guild; import java.util.Map; +import resources.common.Console; import resources.guild.Guild; import resources.objects.SWGList; import resources.objects.guild.GuildObject; - import main.NGECore; - import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -55,7 +54,17 @@ public class GuildService implements INetworkDispatch { } public Guild createGuild(String abbreviation, String name, SWGObject leader) { - int id = ((object.getGuildList().get(object.getGuildList().size()).getId()) + 1); + + if (leader == null) + return null; + + int id = 0; + if (object.getGuildList().size() < 1) { + id = 0; + } else { + id = ((object.getGuildList().get(object.getGuildList().size()).getId() + 1)); + } + Guild guild = new Guild(id, abbreviation, name, leader); object.getGuildList().add(guild);