@Override
  public String onAdvEvent(String event, L2Npc npc, L2PcInstance player) {
    final QuestState qs = getQuestState(player, false);
    if (qs == null) {
      return null;
    }

    String htmltext = null;
    switch (event) {
      case "ACCEPT":
        {
          qs.startQuest();
          if ((player.getLevel() > 20) && (player.getLevel() < 31)) {
            playSound(player, QuestSound.ITEMSOUND_QUEST_ACCEPT);
            qs.setMemoState(2);
            qs.setCond(3);
            htmltext = "30981-04.htm";
          } else if (player.getLevel() < 21) {
            qs.setMemoState(1);
            qs.setMemoStateEx(1, 0);
            qs.setCond(2);
            htmltext = "30981-03.htm";
          } else if ((player.getLevel() > 30) && (player.getLevel() < 41)) {
            qs.setMemoState(3);
            qs.setCond(4);
            htmltext = "30981-05.htm";
          } else {
            qs.setMemoState(4);
            qs.setCond(5);
            htmltext = "30981-06.htm";
          }
          break;
        }
      case "30981-11.html":
        {
          if ((qs.getMemoState() >= 9) && (qs.getMemoState() <= 12)) {
            if (hasAtLeastOneQuestItem(player, MANACLES_OF_PENITENT, PENITENTS_MANACLES1)) {
              if (hasQuestItems(player, PENITENTS_MANACLES1)) {
                takeItems(player, PENITENTS_MANACLES1, 1);
              }

              if (hasQuestItems(player, MANACLES_OF_PENITENT)) {
                takeItems(player, MANACLES_OF_PENITENT, 1);
              }
              qs.setMemoStateEx(1, player.getLevel());
              giveItems(player, PENITENTS_MANACLES, 1);
              qs.setCond(16);
              htmltext = event;
            }
          }
          break;
        }
      case "30981-14.html":
      case "30981-17.html":
        {
          if ((qs.getMemoState() >= 9) && (qs.getMemoState() <= 12)) {
            htmltext = event;
          }
          break;
        }
      case "30981-15t.html":
        {
          final L2ItemInstance petItem = player.getInventory().getItemByItemId(PENITENTS_MANACLES);
          final int petLevel = (petItem == null) ? 0 : petItem.getEnchantLevel();
          if ((qs.getMemoState() >= 9)
              && (qs.getMemoState() <= 12)
              && (petLevel > qs.getMemoStateEx(1))) {
            final L2Summon summon = player.getSummon();
            if (summon != null) {
              htmltext = event;
            } else {
              int i1 = 0;
              if (player.getLevel() > qs.getMemoStateEx(1)) {
                i1 = petLevel - qs.getMemoStateEx(1) - (player.getLevel() - qs.getMemoStateEx(1));
              } else {
                i1 = petLevel - qs.getMemoStateEx(1);
              }

              if (i1 < 0) {
                i1 = 0;
              }

              int i0 = getRandom(i1) + 1;
              if (player.getPkKills() <= i0) {
                giveItems(player, MANACLES_OF_PENITENT, 1);
                if (petItem != null) {
                  takeItems(player, PENITENTS_MANACLES, -1);
                }
                htmltext = "30981-15.html";

                player.setPkKills(0);
                qs.exitQuest(true, true);
              } else {
                giveItems(player, MANACLES_OF_PENITENT, 1);
                if (petItem != null) {
                  takeItems(player, PENITENTS_MANACLES, -1);
                }
                htmltext = "30981-16.html";

                player.setPkKills(player.getPkKills() - i0);
                qs.setMemoStateEx(1, 0);
              }
            }
          }
          break;
        }
      case "30981-18.html":
        {
          if ((qs.getMemoState() >= 9) && (qs.getMemoState() <= 12)) {
            qs.exitQuest(true, true);
            htmltext = event;
          }
          break;
        }
    }
    return htmltext;
  }