Beispiel #1
0
  /** Очистить территорию от левых игроков. */
  protected final void clearTerritory() {

    if (eventTerritory == null) {
      return;
    }

    WorldZoneTable worldZoneTable = WorldZoneTable.getInstance();
    Array<TObject> objects = eventTerritory.getObjects();

    TObject[] objs = objects.array();

    objects.writeLock();
    try {

      for (int i = 0, length = objects.size(); i < length; i++) {

        TObject object = objs[i];

        if (!object.isPlayer()) {
          continue;
        }

        Player player = object.getPlayer();

        if (!players.containsKey(player.getObjectId())) {
          player.teleToLocation(worldZoneTable.getRespawn(player));
          i--;
          length--;
        }
      }

    } finally {
      objects.writeUnlock();
    }
  }
Beispiel #2
0
  @Override
  public boolean unregisterPlayer(Player player) {
    lock();
    try {

      if (!isStarted()) {
        player.sendMessage("Ивент не запущен.");
        return false;
      }

      if (getState() != EventState.REGISTER) {
        player.sendMessage("Время регистрации вышло.");
        return false;
      }

      Array<Player> prepare = getPrepare();

      if (!prepare.contains(player)) {
        player.sendMessage("Вы не зарегестрированы.");
        return false;
      }

      prepare.fastRemove(player);

      player.setEvent(false);
      player.sendMessage("Вы отрегестрированы.");
      return false;

    } finally {
      unlock();
    }
  }
  @Override
  public void addAggro(Character aggressor, long aggro, boolean damage) {
    // если это не урон от игрока
    if (!damage && aggressor.isPlayer()) {
      // получаем игрока
      Player player = aggressor.getPlayer();

      // в зависимости от класса игрока
      switch (player.getPlayerClass()) {
        case WARRIOR:
        case LANCER:
          aggro = 1;
          break;
        case MYSTIC:
        case PRIEST:
          aggro *= 3;
          break;
        default:
          break;
      }
    }

    // обрабатываем добавление аггро
    super.addAggro(aggressor, aggro, damage);
  }
Beispiel #4
0
  @Override
  public boolean checkTarget(Character target) {
    // полукчаем игрока из цели
    Player player = target.getPlayer();

    // если это игрок на ивенте ,то можно бить
    return player != null && player.isEvent();
  }
Beispiel #5
0
  @Override
  public void causingDamage(Skill skill, AttackInfo info, Character attacker) {
    // полукчаем игрока из атакующего
    Player player = attacker.getPlayer();

    if (!player.isEvent()) return;

    super.causingDamage(skill, info, attacker);
  }
  @Override
  public void causingDamage(Skill skill, AttackInfo info, Character attacker) {
    // пробуем получить игрока
    Player player = attacker.getPlayer();

    // если это игрок и он не на ивенте, выходим
    if (player != null && !player.isEvent()) return;

    super.causingDamage(skill, info, attacker);
  }
  @Override
  public Packet processing(Packet packet) {
    String nick = packet.nextString();
    String text = packet.nextString();

    Player player = World.getPlayer(nick);

    if (player == null) return null;

    player.sendMessage(text);

    return null;
  }
Beispiel #8
0
  @Override
  public void onDelete(TObject object) {

    if (!object.isPlayer()) {
      return;
    }

    Player player = object.getPlayer();

    if (!player.isEvent()) {
      return;
    }

    onDelete(player);
  }
Beispiel #9
0
  @Override
  public void onDie(Character killer, Character killed) {

    if (!isCheckDieState() || !killed.isPlayer()) {
      return;
    }

    Player player = killed.getPlayer();

    if (!player.isEvent() || !players.containsKey(killed.getObjectId())) {
      return;
    }

    onDie(player, killer);
  }
  @Override
  public boolean test(Npc npc, Player player) {
    // если игрока нет, выходим
    if (player == null) {
      log.warning(this, "not found player");
      return false;
    }

    // получаем список квестов
    QuestList questList = player.getQuestList();

    // если его нет, возвращаем плохо
    if (questList == null) {
      log.warning(this, "not found quest list");
      return false;
    }

    // получаеми состояние квеста
    QuestState state = questList.getQuestState(quest);

    // если его нет, возвращаем плохо
    if (state == null) return false;

    // получаем значение переменой
    Wrap wrap = state.getVar(name);

    // если его нет
    if (wrap == null)
      // сравниваем значение с 0
      return value == 0;

    // иначе просто сравниваем значение
    return wrap.getInt() == value;
  }
  @Override
  public int getChanceFor(Player player) {
    // получаем формулы
    Formulas formulas = Formulas.getInstance();

    // рассчитываем шанс сбора
    return formulas.getChanceCollect(getTemplate().getReq(), player.getEnergyLevel());
  }
Beispiel #12
0
  public static QuestStarted getInstance(
      QuestState quest, int npcType, int npcId, float x, float y, float z) {
    QuestStarted packet = (QuestStarted) instance.newInstance();

    packet.buffer = packet.prepare;

    Player player = quest.getPlayer();

    packet.writeShort(1); // 01 00
    packet.writeShort(14); // 0E 00
    packet.writeInt(12); // 0C 00 00 00
    packet.writeShort(0); // 00 00
    packet.writeInt(14); // 0E 00 00 00
    packet.writeShort(1); // 01 00
    packet.writeShort(57); // 39 00
    packet.writeShort(1); // 01 00
    packet.writeShort(85); // 55 00
    packet.writeInt(quest.getQuestId()); // 29 05 00 00 //NPC ID
    packet.writeInt(quest.getObjectId()); // C4 E0 89 00 //Обжект ид
    packet.writeInt(quest.getState()); // 01 00 00 00 //номер квеста уданного нпц
    packet.writeInt(
        1); // 01 00 00 00 00 00 00 00 // если 0, то квест красным висит, 1 обычный показ
    packet.writeInt(0);
    packet.writeInt(quest.getPanelStateId()); // 00 00 00 00 quest.getPanelStateId()
    packet.writeInt(0x00010100); // 00 01 01 00
    packet.writeShort(0); // 00 00
    packet.writeByte(0); // 00
    packet.writeInt(57); // 39 00 00 00 //след сектор
    packet.writeFloat(x); // 0B D1 A9 47 //видимо где след этап квеста X
    packet.writeFloat(y); // 1F 3D A6 C7 //видимо где след этап квеста Y
    packet.writeFloat(z); // 88 11 90 C5 //видимо где след этап квеста Z
    packet.writeInt(npcType); // D5 00 00 00 //213
    packet.writeInt(npcId); // EB 03 00 00 //1003 видимо ид след НПЦ
    packet.writeInt(player != null ? player.getZoneId() : 13); // 0D 00 00 00 //13
    packet.writeLong(85); // 55 00 00 00 00 00 00 00  //85

    return packet;
  }
  @Override
  public void causingDamage(Skill skill, AttackInfo info, Character attacker) {
    // определяем атакующего игрока
    Player player = null;

    if (attacker.isSummon()) {
      Character owner = attacker.getOwner();

      if (owner != null && owner.isPlayer()) player = owner.getPlayer();
    } else if (attacker.isPlayer()) player = attacker.getPlayer();

    // если игрока нет, урон не засчитываем
    if (player == null) return;

    // получаем гильдию игрока
    Guild guild = player.getGuild();

    // если гильдии нет либо она не из этой битвы, не засчитываем урон
    if (guild == null || !getRegion().isRegister(guild)) return;

    // обрабатываем урон
    super.causingDamage(skill, info, attacker);
  }
  @Override
  public void increaseReq(Player player) {
    if (player.getEnergyLevel() >= Config.WORLD_MAX_COLLECT_LEVEL) return;

    // увеличиваем уровень сбора
    player.setEnergyLevel(player.getEnergyLevel() + 1);

    // отправляю сообщение
    player.sendPacket(
        ResourseIncreaseLevel.getInstance(getTemplate().getType(), player.getEnergyLevel()), true);

    // обновляю статы
    player.updateInfo();
  }
Beispiel #15
0
 @Override
 public void removeMe(Player player, int type) {
   player.sendPacket(CharObjectDelete.getInstance(this), true);
 }
Beispiel #16
0
 @Override
 public void addMe(Player player) {
   player.sendPacket(TrapInfo.getInstance(this), true);
 }
Beispiel #17
0
  @Override
  public void execution(String command, Player player, String values) {
    switch (command) {
      case "event_reg":
        {
          if (values == null) {
            return;
          }

          EventManager eventManager = EventManager.getInstance();
          eventManager.registerPlayer(values, player);
          break;
        }
      case "restore_characters":
        {
          PlayerManager playerManager = PlayerManager.getInstance();
          playerManager.restoreCharacters(player);

          break;
        }
      case "help":
        player.sendMessage(help);
        break;
      case "time":
        {
          synchronized (date) {
            date.setTime(System.currentTimeMillis());
            player.sendMessage(timeFormat.format(date));
          }

          break;
        }
      case "end_pay":
        {
          Account account = player.getAccount();

          long time = account.getEndPay();

          if (System.currentTimeMillis() > time)
            player.sendMessage("У вас не проплаченный аккаунт.");
          else {
            synchronized (date) {
              date.setTime(time);
              player.sendMessage("Дата завершения проплаты: " + timeFormat.format(date));
            }
          }

          break;
        }
      case "restore_skills":
        {
          Table<IntKey, Skill> current = player.getSkills();

          DataBaseManager dbManager = DataBaseManager.getInstance();

          for (Skill skill : current) {
            if (skill.getClassId() == -15) continue;

            player.removeSkill(skill, false);

            dbManager.deleteSkill(player, skill);

            skill.fold();
          }

          current.clear();

          player.getTemplate().giveSkills(player);
          player.sendPacket(SkillListInfo.getInstance(player), true);
          break;
        }
      case "kill_me":
        {
          if (player.isBattleStanced()) {
            player.sendMessage("Нельзя использовать в бою.");
            return;
          }

          synchronized (player) {
            player.setCurrentHp(0);
            player.doDie(player);
          }

          break;
        }
      case "version":
        player.sendMessage("Текущая версия сервера: " + Config.SERVER_VERSION);
        break;
      case "online":
        {
          OnlineManager onlineManager = OnlineManager.getInstance();

          player.sendMessage("Текущий онлаин: " + onlineManager.getCurrentOnline());

          break;
        }
      case "player_info":
        {
          if (player.getName().equals(values)) return;

          Player target = World.getAroundByName(Player.class, player, values);

          if (target == null) target = World.getPlayer(values);

          if (target == null) {
            player.sendMessage(MessageType.THAT_CHARACTER_ISNT_ONLINE);
            return;
          }

          StringBuilder builder =
              new StringBuilder("\n--------\nPlayer: \"").append(target.getName()).append("\":\n");

          builder.append("attack:").append(target.getAttack(null, null)).append(";\n");
          builder.append("defense:").append(target.getDefense(null, null)).append(";\n");
          builder.append("impact:").append(target.getImpact(null, null)).append(";\n");
          builder.append("balance:").append(target.getBalance(null, null)).append(";\n");
          builder.append("max hp:").append(target.getMaxHp()).append(".\n");
          builder.append("--------");

          player.sendMessage(builder.toString());

          break;
        }
    }
  }
Beispiel #18
0
  @Override
  public boolean registerPlayer(Player player) {
    lock();
    try {

      if (!isStarted()) {
        player.sendMessage("Ивент не запущен.");
        return false;
      }

      if (getState() != EventState.REGISTER) {
        player.sendMessage("Время регистрации вышло.");
        return false;
      }

      if (player.getLevel() > getMaxLevel() || player.getLevel() < getMinLevel()) {
        player.sendMessage("Вы не подходите по уровню.");
        return false;
      }

      Array<Player> prepare = getPrepare();

      if (prepare.contains(player)) {
        player.sendMessage("Вы уже зарегестрированы.");
        return false;
      }

      if (player.isDead()) {
        player.sendMessage("Вы мертвы.");
        return false;
      }

      if (player.hasDuel()) {
        player.sendMessage("Вы находитесь в дуэли.");
        return false;
      }

      prepare.add(player);

      player.setEvent(true);
      player.sendMessage("Вы зарегестрированы.");
      return true;

    } finally {
      unlock();
    }
  }