Package org.moparscape.msc.gs.builders.ls

Source Code of org.moparscape.msc.gs.builders.ls.MiscPacketBuilder

package org.moparscape.msc.gs.builders.ls;

import java.util.ArrayList;
import java.util.List;

import org.apache.mina.common.IoSession;
import org.moparscape.msc.gs.Instance;
import org.moparscape.msc.gs.Server;
import org.moparscape.msc.gs.config.Config;
import org.moparscape.msc.gs.connection.LSPacket;
import org.moparscape.msc.gs.connection.Packet;
import org.moparscape.msc.gs.core.GameEngine;
import org.moparscape.msc.gs.core.LoginConnector;
import org.moparscape.msc.gs.model.Player;
import org.moparscape.msc.gs.model.Point;
import org.moparscape.msc.gs.model.World;
import org.moparscape.msc.gs.phandler.PacketHandler;
import org.moparscape.msc.gs.phandler.ls.PlayerLogin;
import org.moparscape.msc.gs.tools.DataConversions;
import org.moparscape.msc.gs.util.EntityList;
import org.moparscape.msc.gs.util.Hash;
import org.moparscape.msc.gs.util.Logger;

public class MiscPacketBuilder {
  /**
   * Connector instance
   */
  private final LoginConnector connector;
  /**
   * List of packets waiting to be sent to the user
   */
  private List<LSPacket> packets = new ArrayList<LSPacket>();
  /**
   * World instance
   */
  private World world = Instance.getWorld();

  public MiscPacketBuilder(LoginConnector connector) {
    this.connector = connector;
  }

  public void addFriend(long user, long friend) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(11);
    s.addLong(user);
    s.addLong(friend);
    packets.add(s.toPacket());
  }

  public void addIgnore(long user, long friend) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(13);
    s.addLong(user);
    s.addLong(friend);
    packets.add(s.toPacket());
  }

  public void banPlayer(final Player mod, final long user, final boolean ban) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(ban ? 4 : 5);
    s.addLong(user);
    final long modhash = DataConversions.usernameToHash(mod.getUsername());
    s.addLong(modhash);
    s.setHandler(connector, new PacketHandler() {
      public void handlePacket(Packet p, IoSession session)
          throws Exception {
        if (p.readByte() == 1) {
          Logger.mod(mod.getUsername() + " "
              + (ban ? "banned" : "unbanned") + " "
              + DataConversions.hashToUsername(user));
        }
        mod.getActionSender().sendMessage(p.readString());
      }
    });
    packets.add(s.toPacket());
  }

  /**
   * Clears old packets that have already been sent
   */
  public void clearPackets() {
    packets.clear();
  }

  /**
   * Gets a List of new packets since the last update
   */
  public List<LSPacket> getPackets() {
    return packets;
  }

  public void logAction(String message, int type) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(32);
    s.addByte((byte) type);
    s.addBytes(message.getBytes());
    packets.add(s.toPacket());
  }

  public void logKill(long user, long killed, boolean stake) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(3);
    s.addLong(user);
    s.addLong(killed);
    s.addByte((byte) (stake ? 2 : 1));
    packets.add(s.toPacket());
  }

  public void playerLogin(Player player) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(31);
    s.setHandler(connector, new PlayerLogin(player));
    s.addLong(player.getUsernameHash());
    s.addLong(DataConversions.IPToLong(player.getCurrentIP()));
    s.addInt(player.getPassword().length);
    s.addBytes(player.getPassword());
    s.addBytes(player.getClassName().getBytes());
    packets.add(s.toPacket());
  }

  public void playerLogout(long user) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(30);
    s.addLong(user);
    packets.add(s.toPacket());
  }

  /**
   * Tells the login server we are registered and lists players connected
   * (should be 0 at startup)
   */
  public void registerWorld() {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(1);
    s.setHandler(connector, new PacketHandler() {
      public void handlePacket(Packet p, IoSession session)
          throws Exception {
        connector.setRegistered(p.readByte() == 1);
      }
    });
    s.addShort(Config.WORLD_ID);
    if (!Server.devMode) {
      byte[] b = new Hash(Config.LS_PASS.getBytes()).value();
      s.addInt(b.length);
      s.addBytes(b);
    } else {
      s.addInt(0);
    }
    EntityList<Player> players = world.getPlayers();
    s.addShort(players.size());
    for (Player player : players) {
      s.addLong(player.getUsernameHash());
      s.addLong(DataConversions.IPToLong(player.getCurrentIP()));
    }
    packets.add(s.toPacket());
  }

  public void removeFriend(long user, long friend) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(12);
    s.addLong(user);
    s.addLong(friend);
    packets.add(s.toPacket());
  }

  public void removeIgnore(long user, long friend) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(14);
    s.addLong(user);
    s.addLong(friend);
    packets.add(s.toPacket());
  }

  public void requestPlayerInfo(final Player mod, final long user) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(8);
    s.addLong(user);
    s.setHandler(connector, new PacketHandler() {
      public void handlePacket(Packet p, IoSession session)
          throws Exception {
        if (p.readByte() == 1) {
          Logger.mod(mod.getUsername() + " requested information on "
              + DataConversions.hashToUsername(user));

          int world = p.readShort();
          Point location = Point.location(p.readShort(),
              p.readShort());
          long loginDate = p.readLong();
          int lastMoved = (int) ((GameEngine.getTime() - p.readLong()) / 1000);
          boolean chatBlock = p.readByte() == 1;
          int fatigue = p.readShort();
          String state = p.readString();

          mod.getActionSender().sendAlert(
              "@whi@" + DataConversions.hashToUsername(user)
                  + " is currently on world @or1@" + world
                  + "@whi@ at @or1@" + location.toString()
                  + "@whi@ (@or1@"
                  + location.getDescription()
                  + "@whi@). State is @or1@" + state
                  + "@whi@. Logged in @or1@"
                  + DataConversions.timeSince(loginDate)
                  + "@whi@ ago. Last moved @or1@" + lastMoved
                  + " secs @whi@ ago. Chat block is @or1@"
                  + (chatBlock ? "on" : "off")
                  + "@whi@. Fatigue is at @or1@" + fatigue
                  + "@whi@.", false);
        } else {
          mod.getActionSender()
              .sendMessage(
                  "Invalid player, maybe they aren't currently online?");
        }
      }
    });
    packets.add(s.toPacket());
  }

  public void saveProfiles() {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(9);
    s.setHandler(connector, new PacketHandler() {
      public void handlePacket(Packet p, IoSession session)
          throws Exception {
        if (p.readByte() != 1) {
          Logger.error("Error saving all profiles!");
        }
      }
    });
    packets.add(s.toPacket());
  }

  public void sendPM(long user, long friend, boolean avoidBlock,
      byte[] message) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(10);
    s.addLong(user);
    s.addLong(friend);
    s.addByte((byte) (avoidBlock ? 1 : 0));
    s.addBytes(message);
    packets.add(s.toPacket());
  }

  public void tradeLog(final long from, final long to, final int item,
      final long amount, final int x, final int y, final int type) {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(33);
    s.addLong(from);
    s.addLong(to);
    s.addInt(item);
    s.addLong(amount);
    s.addInt(x);
    s.addInt(y);
    s.addInt(type);
    s.addLong((GameEngine.getTimestamp() / 1000));
    packets.add(s.toPacket());
  }

  public void unregisterWorld() {
    LSPacketBuilder s = new LSPacketBuilder();
    s.setID(2);
    s.setHandler(connector, new PacketHandler() {
      public void handlePacket(Packet p, IoSession session)
          throws Exception {
        session.close().join();
        Instance.getServer().unbind();
        Instance.getServer().getEngine().kill();
      }
    });
    packets.add(s.toPacket());
  }
}
TOP

Related Classes of org.moparscape.msc.gs.builders.ls.MiscPacketBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.