Public Repository for the Magicbane Shadowbane Emulator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

438 lines
13 KiB

// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.net.client.msg.guild;
import engine.Enum.GameObjectType;
import engine.gameManager.NPCManager;
import engine.gameManager.PlayerManager;
import engine.net.AbstractConnection;
import engine.net.ByteBufferReader;
import engine.net.ByteBufferWriter;
import engine.net.client.Protocol;
import engine.net.client.msg.ClientNetMsg;
import engine.objects.*;
import org.joda.time.DateTime;
public class GuildInfoMsg extends ClientNetMsg {
private int msgType;
private int objectUUID;
private int objectType;
private Guild guild;
private AbstractGameObject ago;
/**
* This is the general purpose constructor.
*/
public GuildInfoMsg() {
super(Protocol.UPDATEGUILD);
this.msgType = 4;
this.objectType = 0;
this.objectUUID = 0;
}
public GuildInfoMsg(AbstractGameObject ago, Guild guild, int unknown01) {
super(Protocol.UPDATEGUILD);
this.msgType = unknown01;
this.objectType = ago.getObjectType().ordinal();
this.objectUUID = ago.getObjectUUID();
this.ago = ago;
this.guild = guild;
}
/**
* This constructor is used by NetMsgFactory. It attempts to deserialize the
* ByteBuffer into a message. If a BufferUnderflow occurs (based on reading
* past the limit) then this constructor Throws that Exception to the
* caller.
*/
public GuildInfoMsg(AbstractConnection origin, ByteBufferReader reader) {
super(Protocol.UPDATEGUILD, origin, reader);
}
/**
* Serializes the subclass specific items to the supplied ByteBufferWriter.
*/
@Override
protected void _serialize(ByteBufferWriter writer) {
writer.putInt(this.msgType);
if (this.msgType == 2) {
new GuildInfoMessageType2(this.ago, guild)._serialize(writer);
} else if (this.msgType == 5) {
new GuildInfoMessageType5(this.ago, guild)._serialize(writer);
} else if (this.msgType == 4) {
new GuildInfoMessageType4(this.ago, guild)._serialize(writer);
} else {
writer.putLong(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.put((byte) 0);
}
}
/**
* Deserializes the subclass specific items from the supplied ByteBufferReader.
*/
@Override
protected void _deserialize(ByteBufferReader reader) {
this.msgType = reader.getInt();
this.objectType = reader.getInt();
this.objectUUID = reader.getInt();
if (this.msgType == 1)
reader.getInt();
reader.getInt(); // PAdding
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.get();
//default guild tag deserializations.
if (this.msgType == 5) {
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
reader.getInt();
}
}
/**
* @return the unknown01
*/
public int getMsgType() {
return msgType;
}
public void setMsgType(int msgType) {
this.msgType = msgType;
}
/**
* @return the objectUUID
*/
public int getObjectID() {
return objectUUID;
}
public int getObjectType() {
return objectType;
}
public void setObjectType(int objectType) {
this.objectType = objectType;
}
}
abstract class GuildInfoMessageType {
protected int objectType;
protected int objectID;
protected Guild g;
protected AbstractGameObject ago;
public GuildInfoMessageType(AbstractGameObject ago, Guild g) {
this.objectType = ago.getObjectType().ordinal();
this.objectID = ago.getObjectUUID();
this.ago = ago;
this.g = g;
}
abstract void _serialize(ByteBufferWriter writer);
}
class GuildInfoMessageType2 extends GuildInfoMessageType {
public GuildInfoMessageType2(AbstractGameObject ago, Guild g) {
super(ago, g);
}
@Override
void _serialize(ByteBufferWriter writer) {
writer.putInt(this.objectType);
writer.putInt(this.objectID);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(1);
Guild nation = null;
if (this.g != null) {
writer.putInt(GameObjectType.Guild.ordinal());
writer.putInt(g.getObjectUUID());
writer.putString(g.getName());
if (this.objectType == GameObjectType.PlayerCharacter.ordinal()) {
PlayerCharacter pc = PlayerManager.getFromCache(this.objectID);
if (pc != null) {
writer.putInt(GuildStatusController.getRank(pc.getGuildStatus()));
}
} else {
writer.putInt(5);
}
GuildTag._serializeForDisplay(g.getGuildTag(), writer);
nation = this.g.getNation();
} else {
writer.putLong(0L);
writer.putString("");
GuildTag._serializeForDisplay(GuildTag.ERRANT, writer);
}
writer.putInt(1);
if (nation != null) {
writer.putInt(GameObjectType.Guild.ordinal());
writer.putInt(nation.getObjectUUID());
City city = g.getOwnedCity();
if (city != null) {
writer.putString(city.getCityName());
writer.putInt(city.getObjectType().ordinal());
writer.putInt(city.getObjectUUID());
} else {
writer.putString(""); //city name
writer.putLong(0L); //should be city ID
}
GuildTag._serializeForDisplay(nation.getGuildTag(), writer);
} else {
writer.putLong(0L);
writer.putString("");
writer.putLong(0L);
GuildTag._serializeForDisplay(GuildTag.ERRANT, writer);
}
writer.putInt(0);
writer.putInt(0);
writer.put((byte) 0);
}
}
class GuildInfoMessageType4 extends GuildInfoMessageType {
public GuildInfoMessageType4(AbstractGameObject ago, Guild g) {
super(ago, g);
}
@Override
void _serialize(ByteBufferWriter writer) {
String cityName = "";
writer.putInt(this.objectType);
writer.putInt(this.objectID);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
PlayerCharacter pc = PlayerManager.getFromCache(this.objectID);
if (this.g == null || pc == null) {
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.put((byte) 0);
return;
}
writer.putInt(1);
Guild nation = this.g.getNation();
writer.putInt(0);
writer.putInt(0);
writer.putString(g.getName());
writer.putInt(0);
GuildTag._serializeForDisplay(g.getGuildTag(), writer);
writer.putInt(1);
writer.putInt(0);
writer.putInt(0);
City city = g.getOwnedCity();
if (city != null)
cityName = city.getCityName();
writer.putString(nation.getName());
writer.putInt(0);
writer.putInt(0);
GuildTag._serializeForDisplay(nation.getGuildTag(), writer);
writer.putInt(1);
writer.putString(g.getName());
writer.putString(g.getMotto());
writer.putString(nation.getName());
writer.putInt(GuildStatusController.getRank(pc.getGuildStatus()));
writer.putInt(GuildStatusController.getTitle(pc.getGuildStatus()));
writer.putInt(g.getCharter());
writer.putString(cityName); //Shows City Name FUCK
AbstractCharacter guildLeader;
String guildLeaderName = "";
if (g.isNPCGuild()) {
guildLeader = NPCManager.getFromCache(g.getGuildLeaderUUID());
if (guildLeader != null)
guildLeaderName = guildLeader.getName();
} else {
guildLeader = PlayerManager.getFromCache(g.getGuildLeaderUUID());
if (guildLeader != null)
guildLeaderName = ((PlayerCharacter) guildLeader).getCombinedName();
}
writer.putString(guildLeaderName);
writer.putString(pc.getName());
writer.putDateTime(DateTime.now());
writer.put((byte) 1);
writer.put((byte) 1);
writer.put((byte) 1);
writer.put((byte) 0);
writer.putInt(0);
// writer.put((byte)0);
// writer.putString(cityName);
// writer.putInt(10);
// writer.putInt(6);
// writer.putInt(10);
// writer.putString(cityName);
// writer.putString(pc.getFirstName());
// writer.putString("Nation Leader");
// writer.putDateTime(DateTime.now());
// writer.put((byte)1);
// writer.put((byte)1);
// writer.putInt(1);
// writer.putInt(this.objectType);
// writer.putInt(this.objectID);
// writer.putInt(0);
// writer.putInt(0);
}
}
class GuildInfoMessageType5 extends GuildInfoMessageType {
public GuildInfoMessageType5(AbstractGameObject ago, Guild g) {
super(ago, g);
}
@Override
void _serialize(ByteBufferWriter writer) {
PlayerCharacter pc = null;
if (ago.getObjectType().equals(GameObjectType.PlayerCharacter)) {
pc = (PlayerCharacter) ago;
}
if (pc != null && g != null && g.getObjectUUID() != 0) {
Guild n = g.getNation();
if (n == null) {
n = Guild.getErrantNation();
}
writer.putInt(ago.getObjectType().ordinal());
writer.putInt(ago.getObjectUUID());
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(1);
writer.putInt(0);
writer.putInt(0);
writer.putString(g.getName()); //No Effect?
writer.putInt(0); //Pad
GuildTag._serializeForDisplay(g.getGuildTag(), writer); //Also a waste of space...
writer.putInt(1);
writer.putInt(0);
writer.putInt(0);
writer.putString(n.getName()); //No Effect?
writer.putInt(0);
writer.putInt(0);
GuildTag._serializeForDisplay(n.getGuildTag(), writer);
writer.putInt(1);
writer.putString(g.getName()); //Guild Name
writer.putString(g.getMotto()); //TODO Motto
writer.putString(n.getName()); //Nation Name
writer.putInt(GuildStatusController.getRank(pc.getGuildStatus())); //Rank
writer.putInt(GuildStatusController.getTitle(pc.getGuildStatus())); //Title
writer.putInt(g.getCharter());
if (g.getNation().equals(Guild.getErrantNation()))
writer.putString("Errant");
else
writer.putString("City");
writer.putString("Guild Leader");
writer.putString(""); //Nation Leader - I believe
DateTime now = DateTime.now();
writer.putDateTime(now);
writer.put((byte) 1);
writer.put((byte) 1);
writer.put((byte) 0);
writer.put((byte) 0);
GuildTag._serializeForDisplay(g.getGuildTag(), writer);
GuildTag._serializeForDisplay(g.getNation().getGuildTag(), writer);
writer.putInt(0);
} else {
writer.putLong(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.putInt(0);
writer.put((byte) 0);
GuildTag._serializeForDisplay(GuildTag.ERRANT, writer);
GuildTag._serializeForDisplay(GuildTag.ERRANT, writer);
writer.putInt(0);
}
}
}