Package org.pokenet.server.backend.entity

Examples of org.pokenet.server.backend.entity.PlayerChar


   */
  public void run() {
    while(m_isRunning) {
      synchronized(m_logoutQueue) {
        if(m_logoutQueue.peek() != null) {
          PlayerChar p = m_logoutQueue.poll();
          synchronized(p) {
            if(p != null) {
              if(!attemptLogout(p)) {
                m_logoutQueue.add(p);
              } else {
                p.dispose();
                System.out.println("INFO: " + p.getName() + " logged out.");
                p = null;
              }
            }
          }
        }
View Full Code Here


          /*
           * They are already logged in on this server.
           * Attach the session to the existing player if they exist, if not, just log them in
           */
          if(TcpProtocolHandler.containsPlayer(username)) {
            PlayerChar p = TcpProtocolHandler.getPlayer(username);
            p.getTcpSession().setAttribute("player", null);
            p.setLastLoginTime(time);
            p.getTcpSession().close(true);
            p.setTcpSession(session);
            p.setLanguage(Language.values()[Integer.parseInt(String.valueOf(l))]);
            m_database.query("UPDATE pn_members SET lastLoginServer='" + MySqlManager.parseSQL(GameServer.getServerName()) + "', lastLoginTime='" + time + "' WHERE username='" + MySqlManager.parseSQL(username) + "'");
            m_database.query("UPDATE pn_members SET lastLoginIP='" + getIp(session) + "' WHERE username='" + MySqlManager.parseSQL(username) + "'");
            m_database.query("UPDATE pn_members SET lastLanguageUsed='" + l + "' WHERE username='" + MySqlManager.parseSQL(username) + "'");
            session.setAttribute("player", p);
            this.initialiseClient(p, session);
View Full Code Here

    //They are not logged in elsewhere, set the current login to the current server
    long time = System.currentTimeMillis();
    /*
     * Attempt to log the player in
     */
    PlayerChar p = getPlayerObject(result);
    p.setLastLoginTime(time);
    p.setTcpSession(session);
    p.setLanguage(Language.values()[Integer.parseInt(String.valueOf(language))]);
    /*
     * Update the database with login information
     */
    m_database.query("UPDATE pn_members SET lastLoginServer='" + MySqlManager.parseSQL(GameServer.getServerName()) + "', lastLoginTime='" + time + "' WHERE username='" + MySqlManager.parseSQL(username) + "'");
    m_database.query("UPDATE pn_members SET lastLoginIP='" + getIp(session) + "' WHERE username='" + MySqlManager.parseSQL(username) + "'");
View Full Code Here

   * @param data
   * @return
   */
  private PlayerChar getPlayerObject(ResultSet result) {
    try {
      PlayerChar p = new PlayerChar();
      Pokemon [] party = new Pokemon[6];
      PokemonBox[] boxes = new PokemonBox[9];
     
      p.setName(result.getString("username"));
      p.setVisible(true);
      //Set co-ordinates
      p.setX(result.getInt("x"));
      p.setY(result.getInt("y"));
      p.setMapX(result.getInt("mapX"));
      p.setMapY(result.getInt("mapY"));
      p.setId(result.getInt("id"));
      p.setAdminLevel(result.getInt("adminLevel"));
      p.setMuted(result.getBoolean("muted"));
      p.setLastHeal(result.getInt("healX"), result.getInt("healY"), result.getInt("healMapX"), result.getInt("healMapY"));
      p.setSurfing(Boolean.parseBoolean(result.getString("isSurfing")));
      //Set money and skills
      p.setSprite(result.getInt("sprite"));
      p.setMoney(result.getInt("money"));
      p.setHerbalismExp(result.getInt("skHerb"));
      p.setCraftingExp(result.getInt("skCraft"));
      p.setFishingExp(result.getInt("skFish"));
      p.setTrainingExp(result.getInt("skTrain"));
      p.setCoordinatingExp(result.getInt("skCoord"));
      p.setBreedingExp(result.getInt("skBreed"));
      //Retrieve refences to all Pokemon
      int partyId = result.getInt("party");
      ResultSet partyData = m_database.query("SELECT * FROM pn_party WHERE id='" + partyId + "'");
      partyData.first();
     
      ResultSet pokemons = m_database.query("SELECT * FROM pn_pokemon WHERE currentTrainerName='" + p.getName() + "'");
      int boxNumber = 0;
      int boxPosition = 0;
      /* Loop through all Pokemon belonging to this player and add them to their party/box */
      while(pokemons.next()) {
        boolean isParty = false;
        int partyIndex = -1;
        /* Checks if Pokemon is in party */
        for(int i = 0; i < 6; i++) {
          if(partyData.getInt("pokemon" + i) == pokemons.getInt("id")) {
            isParty = true;
            partyIndex = i;
            break;
          }
        }
        /* If the pokemon is in party, add it to party */
        if(isParty) {
          party[partyIndex] = getPokemonObject(pokemons);
        } else {
          /* Else, add it to box if space is available */
          if(boxNumber < 9) {
            /* Avoid null pointers */
            if(boxes[boxNumber] == null)
              boxes[boxNumber] = new PokemonBox();
            if(boxes[boxNumber].getPokemon() == null)
              boxes[boxNumber].setPokemon(new Pokemon[30]);
            /* If there's space in this box, add it to the box */
            if(boxPosition < 30) {
              boxes[boxNumber].setPokemon(boxPosition, getPokemonObject(pokemons));
            } else {
              /* Else open up a new box and add it to box */
              boxPosition = 0;
              boxNumber++;
              if(boxNumber < 9) {
                boxes[boxNumber].setPokemon(new Pokemon[30]);
                boxes[boxNumber].setPokemon(boxPosition, getPokemonObject(pokemons));
              }
            }
            boxPosition++;
          }
        }
      }
      p.setParty(party);
      p.setBoxes(boxes);
     
      //Attach bag
      p.setBag(getBagObject(m_database.query("SELECT * FROM pn_bag WHERE member='" + result.getInt("id") + "'"),p.getId()));

      //Attach badges
      p.generateBadges(result.getString("badges"));
      return p;
    } catch (Exception e) {
      e.printStackTrace();
      return null;
    }
View Full Code Here

  public void sessionClosed(IoSession session) throws Exception {
    /*
     * Attempt to save the player's data
     */
    try {
      PlayerChar p = (PlayerChar) session.getAttribute("player");
      if(p != null) {
        if(p.isBattling()) {
          /* If in PvP battle, the player loses */
          if(p.getBattleField() instanceof PvPBattleField) {
            ((PvPBattleField) p.getBattleField()).disconnect(p.getBattleId());
          }
          p.setBattleField(null);
          p.setBattling(false);
          p.lostBattle();
        }
        /* If trading, end the trade */
        if(p.isTrading()) {
          p.getTrade().endTrade();
        }
        m_logoutManager.queuePlayer(p);
        GameServer.getServiceManager().getMovementService().removePlayer(p.getName());
        m_players.remove(p);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
View Full Code Here

    m_loginManager.stop();
    /*
     * Queue all players to be saved
     */
    Iterator<PlayerChar> it = m_players.values().iterator();
    PlayerChar p;
    while(it.hasNext()) {
      p = it.next();
      m_logoutManager.queuePlayer(p);
    }
    /*
 
View Full Code Here

  throws Exception {
    /*
     * Attempt to disconnect and logout the player (save their data)
     */
    try {
      PlayerChar p = (PlayerChar) session.getAttribute("player");
      if(p != null) {
        if (p.isBattling())
          p.lostBattle();
        m_logoutManager.queuePlayer(p);
        GameServer.getServiceManager().getMovementService().removePlayer(p.getName());
        m_players.remove(p);
      }
      if(!(t instanceof IOException) || session.isConnected() || !session.isClosing())
        session.close(true);
    } catch (Exception e) {
View Full Code Here

      }
    } else {
      /*
       * Player is logged in, allow interaction with their player object
       */
      PlayerChar p = (PlayerChar) session.getAttribute("player");
      p.lastPacket = System.currentTimeMillis();
      switch(message.charAt(0)) {
      case 'U':
        //Move up
        p.queueMovement(Direction.Up);
        break;
      case 'D':
        //Move down
        p.queueMovement(Direction.Down);
        break;
      case 'L':
        //Move left
        p.queueMovement(Direction.Left);
        break;
      case 'R':
        //Move right
        p.queueMovement(Direction.Right);
        break;
      case 'P':
        //Pokemon interaction
        int pokemonIndex = 0;
        String move;
        switch(message.charAt(1)) {
        case 'm':
          //Player is allowing move to be learned
          pokemonIndex = Integer.parseInt(String.valueOf(message.charAt(2)));
          int moveIndex = Integer.parseInt(String.valueOf(message.charAt(3)));
          move = message.substring(4);
          if(move != null && !move.equalsIgnoreCase("") &&
              p.getParty()[pokemonIndex] != null) {
            if(p.getParty()[pokemonIndex].getMovesLearning().contains(move)) {
              p.getParty()[pokemonIndex].learnMove(moveIndex, move);
              p.updateClientPP(pokemonIndex, moveIndex);
            }
          }
          break;
        case 'M':
          //Player is not allowing the move to be learned
          pokemonIndex = Integer.parseInt(String.valueOf(message.charAt(2)));
          move = message.substring(3);
          if(p.getParty()[pokemonIndex] != null) {
            if(p.getParty()[pokemonIndex].getMovesLearning().contains(move)) {
              p.getParty()[pokemonIndex].getMovesLearning().remove(move);
            }
          }
          break;
        case 'e':
          //Evolution response
          pokemonIndex = Integer.parseInt(String.valueOf(message.charAt(3)));
          if(p.getParty()[pokemonIndex] != null) {
            switch(message.charAt(2)) {
            case '0':
              //Cancel evolution
              p.getParty()[pokemonIndex].evolutionResponse(false, p);
              break;
            case '1':
              //Allow evolution
              p.getParty()[pokemonIndex].evolutionResponse(true, p);
              break;
            }
          }
          break;
        }
        break;
      case 's':
        //Party swapping
        p.swapPokemon(Integer.parseInt(message.substring(1, message.indexOf(','))),
            Integer.parseInt(message.substring(message.indexOf(',') + 1)));
        break;
      case 'S':
        //Shop interaction
        if(p.isShopping()) {
          int item = -1;
          switch(message.charAt(1)) {
          case 'b':
            //Buy items. Sent as SbITEMID,QUANTITY
            item = Integer.parseInt(message.substring(2, message.indexOf(',')));
            //int q = Integer.parseInt(message.substring(message.indexOf(',') + 1));
            p.buyItem(item, 1);
            break;
          case 's':
            //Sell items. Sent as SsITEMID,QUANTITY
            item = Integer.parseInt(message.substring(2, message.indexOf(',')));
            //int q = Integer.parseInt(message.substring(message.indexOf(',') + 1));
            p.sellItem(item, 1);
            break;
          case 'f':
            //Finished shopping
            p.setShopping(false);
            break;
          }
        } else if(p.isSpriting()) {
          //Sprite changing
          int sprite = Integer.parseInt(message.substring(1));
          /* Ensure the user buys a visible sprite */
          if(sprite > 0 && !GameServer.getServiceManager().
              getSpriteList().getUnbuyableSprites().contains(sprite)) {
            if(p.getMoney() >= 500) {
              p.setMoney(p.getMoney() - 500);
              p.updateClientMoney();
              p.setSprite(sprite);
              p.setSpriting(false);
            }
          }
        }
        break;
      case 'r':
        String player = message.substring(2);
        //A request was sent
        switch(message.charAt(1)) {
        case 'b':
          //Battle Request rbUSERNAME
          if(m_players.containsKey(player)) {
            TcpProtocolHandler.writeMessage(m_players.get(player).getTcpSession(),
                new RequestMessage(RequestType.BATTLE, p.getName()));
            p.addRequest(player, RequestType.BATTLE);
          }
          break;
        case 't':
          //Trade Request rtUSERNAME
          if(m_players.containsKey(player)) {
            TcpProtocolHandler.writeMessage(m_players.get(player).getTcpSession(),
                new RequestMessage(RequestType.TRADE, p.getName()));
            p.addRequest(player, RequestType.TRADE);
          }
          break;
        case 'a':
          //Request accepted raUSERNAME
          if(m_players.containsKey(player)) {
            m_players.get(player).requestAccepted(p.getName());
          }
          break;
        case 'c':
          //Request declined rcUSERNAME
          if(m_players.containsKey(player)) {
            m_players.get(player).removeRequest(p.getName());
          }
          break;
        }
        break;
      case 'B':
        //Box interaction
        if(p.isBoxing()) {
          switch(message.charAt(1)) {
          case 'r':
            //Requesting info for box number - e.g. Br0
            int boxNum = Integer.parseInt(String.valueOf(message.charAt(2)));
            if(boxNum >= 0 && boxNum < 9)
              p.sendBoxInfo(boxNum);
            break;
          case 'R':
            //Releasing a pokemon from storage - sent as BRBOXNUM,BOXSLOT
            details = message.substring(2).split(",");
            p.releasePokemon(Integer.parseInt(details[0]), Integer.parseInt(details[1]));
            break;
          case 's':
            //Swap pokemon between box and party - sent as BsBOXNUM,BOXSLOT,PARTYSLOT, e.g.Bs0,1,0
            details = message.substring(2).split(",");
            p.swapFromBox(Integer.parseInt(details[0]),
                Integer.parseInt(details[1]), Integer.parseInt(details[2]));
            break;
          case 'f':
            //Finished with box interfaction
            p.setBoxing(false);
            break;
          }
        }
        break;
      case 'M':
        //Moderation
        if(message.charAt(1) == 'c') {
          p.getTcpSession().write("Cl" + m_players.size() + " players online");
        } else if(p.getAdminLevel() > 0) {
          try {
            switch(message.charAt(1)) {
            case 'a':
              //Server announcement
              for (String s : m_players.keySet()){
                m_players.get(s).getTcpSession().write("q" + message.substring(2));
              }
              break;           
            case 'l':
              //Send an alert
              if(p.getAdminLevel()>1)
                for (String s : m_players.keySet()){
                  m_players.get(s).getTcpSession().write("!" + message.substring(2));
                }
              break;
            case 'b':
              //Ban player
              if(m_players.containsKey(message.substring(2))) {
                PlayerChar o = m_players.get(message.substring(2));
                MySqlManager m = new MySqlManager();
                if(m.connect(GameServer.getDatabaseHost(),
                    GameServer.getDatabaseUsername(),
                    GameServer.getDatabasePassword())) {
                  m.selectDatabase(GameServer.getDatabaseName());
                  m.query("INSERT INTO pn_bans (ip) VALUE ('" +
                      o.getIpAddress()
                      + "')");
                  m.close();
                }
              }
              break;
            case 'B':
              //Unban ip
              MySqlManager m = new MySqlManager();
              if(m.connect(GameServer.getDatabaseHost(),
                  GameServer.getDatabaseUsername(),
                  GameServer.getDatabasePassword())) {
                m.selectDatabase(GameServer.getDatabaseName());
                m.query("DELETE FROM pn_bans WHERE ip='" +
                    message.substring(2)
                    + "'");
                m.close();
              }
              break;
            case 'W':
              //Warp to player
              if(m_players.containsKey(message.substring(2))) {
                PlayerChar o = m_players.get(message.substring(2));
                p.setX(o.getX());
                p.setY(o.getY());
                p.setMap(o.getMap(), null);
              }
              break;
            case 'm':
              //Mute player
              if(m_players.containsKey(message.substring(2))) {
                PlayerChar o = m_players.get(message.substring(2));
                o.setMuted(true);
                o.getTcpSession().write("!You have been muted.");
              }
              break;
            case 'u':
              //Unmute player
              if(m_players.containsKey(message.substring(2))) {
                PlayerChar o = m_players.get(message.substring(2));
                o.setMuted(false);
                o.getTcpSession().write("!You have been unmuted.");
              }
              break;
            case 'k':
              if(m_players.containsKey(message.substring(2))) {
                PlayerChar o = m_players.get(message.substring(2));
                o.getTcpSession().write("!You have been kicked from the server.");
                o.getTcpSession().close(true);
              }
              break;
            case 'w':
              //Change weather on current map
              switch(message.charAt(2)) {
View Full Code Here

   * Warps a character
   * @param c
   */
  public void warp(Char c) {
    if(c instanceof PlayerChar) {
      PlayerChar p = (PlayerChar) c;
      if(p.getBadgeCount() >= m_reqBadges) {
        p.setX(m_warpX);
        p.setY(m_warpY);
        p.setMap(GameServer.getServiceManager().getMovementService().
            getMapMatrix().getMapByGamePosition(m_warpMapX, m_warpMapY), null);
      }
    }
  }
View Full Code Here

          if(m_surf != null && m_surf.getTileAt(newX, newY) == '1') {
            if(c.isSurfing()) {
              return true;
            } else {
              if(c instanceof PlayerChar) {
                PlayerChar p = (PlayerChar) c;
                if(p.canSurf()) {
                  p.setSurfing(true);
                  return true;
                } else {
                  return false;
                }
              }
            }
          } else {
            if(c.isSurfing())
              c.setSurfing(false);
            if(!isWarped(newX, newY, c))
              return true;
          }
        }
      } else {
        ServerMap newMap = m_mapMatrix.getMapByGamePosition(m_x, m_y - 1);
        if (newMap != null) {
          m_mapMatrix.moveBetweenMaps(c, this, newMap);
        }
      }
      break;
    case Down:
      newX = playerX / 32;
      newY = ((playerY + 8) + 32) / 32;
      if (playerY + 40 < m_heigth * 32) {
        if (!isBlocked(newX, newY, Direction.Down)) {
          if(m_surf != null && m_surf.getTileAt(newX, newY) == '1') {
            if(c.isSurfing()) {
              return true;
            } else {
              if(c instanceof PlayerChar) {
                PlayerChar p = (PlayerChar) c;
                if(p.canSurf()) {
                  p.setSurfing(true);
                  return true;
                } else {
                  return false;
                }
              }
            }
          } else {
            if(c.isSurfing())
              c.setSurfing(false);
            if(!isWarped(newX, newY, c))
              return true;
          }
        }
      } else {
        ServerMap newMap = m_mapMatrix.getMapByGamePosition(m_x, m_y + 1);
        if (newMap != null) {
          m_mapMatrix.moveBetweenMaps(c, this, newMap);
        }
      }
      break;
    case Left:
      newX = (playerX - 32) / 32;
      newY = (playerY + 8) / 32;
      if (playerX >= 32) {
        if (!isBlocked(newX, newY, Direction.Left)) {
          if(m_surf != null && m_surf.getTileAt(newX, newY) == '1') {
            if(c.isSurfing()) {
              return true;
            } else {
              if(c instanceof PlayerChar) {
                PlayerChar p = (PlayerChar) c;
                if(p.canSurf()) {
                  p.setSurfing(true);
                  return true;
                } else {
                  return false;
                }
              }
            }
          } else {
            if(c.isSurfing())
              c.setSurfing(false);
            if(!isWarped(newX, newY, c))
              return true;
          }
        }
      } else {
        ServerMap newMap = m_mapMatrix.getMapByGamePosition(m_x - 1, m_y);
        if (newMap != null) {
          m_mapMatrix.moveBetweenMaps(c, this, newMap);
        }
      }
      break;
    case Right:
      newX = (playerX + 32) / 32;
      newY = (playerY + 8) / 32;
      if (playerX + 32 < m_width * 32) {
        if (!isBlocked(newX, newY, Direction.Right)) {
          if(m_surf != null && m_surf.getTileAt(newX, newY) == '1') {
            if(c.isSurfing()) {
              return true;
            } else {
              if(c instanceof PlayerChar) {
                PlayerChar p = (PlayerChar) c;
                if(p.canSurf()) {
                  p.setSurfing(true);
                  return true;
                } else {
                  return false;
                }
              }
View Full Code Here

TOP

Related Classes of org.pokenet.server.backend.entity.PlayerChar

Copyright © 2018 www.massapicom. 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.