Esempio n. 1
0
 public ServerObjectInfo(L2Npc activeChar, L2Character actor) {
   _activeChar = activeChar;
   _idTemplate = _activeChar.getTemplate().getDisplayId();
   _isAttackable = _activeChar.isAutoAttackable(actor);
   _collisionHeight = _activeChar.getCollisionHeight();
   _collisionRadius = _activeChar.getCollisionRadius();
   _x = _activeChar.getX();
   _y = _activeChar.getY();
   _z = _activeChar.getZ();
   _heading = _activeChar.getHeading();
   _name =
       _activeChar.getTemplate().isUsingServerSideName()
           ? _activeChar.getTemplate().getName()
           : "";
 }
Esempio n. 2
0
  private static String getDropListButtons(L2Npc npc) {
    final StringBuilder sb = new StringBuilder();
    final Map<DropListScope, List<IDropItem>> dropLists = npc.getTemplate().getDropLists();
    if ((dropLists != null)
        && !dropLists.isEmpty()
        && (dropLists.containsKey(DropListScope.DEATH)
            || dropLists.containsKey(DropListScope.CORPSE))) {
      sb.append("<table width=275 cellpadding=0 cellspacing=0><tr>");
      if (dropLists.containsKey(DropListScope.DEATH)) {
        sb.append(
            "<td align=center><button value=\"Show Drop\" width=100 height=25 action=\"bypass NpcViewMod dropList DEATH "
                + npc.getObjectId()
                + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
      }

      if (dropLists.containsKey(DropListScope.CORPSE)) {
        sb.append(
            "<td align=center><button value=\"Show Spoil\" width=100 height=25 action=\"bypass NpcViewMod dropList CORPSE "
                + npc.getObjectId()
                + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
      }
      sb.append("</tr></table>");
    }
    return sb.toString();
  }
  @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 "32975-03.htm":
        {
          qs.startQuest();
          qs.setCond(2); // show arrow hack
          qs.setCond(1);
          player.sendPacket(
              new TutorialShowHtml(
                  npc.getObjectId(),
                  "..\\L2Text\\QT_027_Quest_01.htm",
                  TutorialShowHtml.LARGE_WINDOW));
          htmltext = event;
          break;
        }
      case "32975-02.htm":
        {
          htmltext = event;
          break;
        }
      case "32974-02.html":
        {
          giveAdena(player, 50, true);
          addExpAndSp(player, 40, 5);
          qs.exitQuest(false, true);
          Broadcast.toKnownPlayers(
              npc,
              new NpcSay(
                  npc.getObjectId(),
                  ChatType.NPC_GENERAL,
                  npc.getTemplate().getDisplayId(),
                  NpcStringId.HM_DON_T_JUST_GO_I_STILL_HAVE_TONS_TO_TEACH_YOU));
          htmltext = event;
          break;
        }
    }
    return htmltext;
  }
Esempio n. 4
0
  private static void sendNpcDropList(
      L2PcInstance activeChar, L2Npc npc, DropListScope dropListScope, int page) {
    final List<IDropItem> dropList = npc.getTemplate().getDropList(dropListScope);
    if ((dropList == null) || dropList.isEmpty()) {
      return;
    }

    int pages = dropList.size() / DROP_LIST_ITEMS_PER_PAGE;
    if ((DROP_LIST_ITEMS_PER_PAGE * pages) < dropList.size()) {
      pages++;
    }

    final StringBuilder pagesSb = new StringBuilder();
    if (pages > 1) {
      pagesSb.append("<table><tr>");
      for (int i = 0; i < pages; i++) {
        pagesSb.append(
            "<td align=center><button value=\""
                + (i + 1)
                + "\" width=20 height=20 action=\"bypass NpcViewMod dropList "
                + dropListScope
                + " "
                + npc.getObjectId()
                + " "
                + i
                + "\" back=\"L2UI_CT1.Button_DF_Calculator_Down\" fore=\"L2UI_CT1.Button_DF_Calculator\"></td>");
      }
      pagesSb.append("</tr></table>");
    }

    if (page >= pages) {
      page = pages - 1;
    }

    final int start = page > 0 ? page * DROP_LIST_ITEMS_PER_PAGE : 0;

    int end = (page * DROP_LIST_ITEMS_PER_PAGE) + DROP_LIST_ITEMS_PER_PAGE;
    if (end > dropList.size()) {
      end = dropList.size();
    }

    final DecimalFormat amountFormat = new DecimalFormat("#,###");
    final DecimalFormat chanceFormat = new DecimalFormat("0.00##");

    int leftHeight = 0;
    int rightHeight = 0;
    final StringBuilder leftSb = new StringBuilder();
    final StringBuilder rightSb = new StringBuilder();
    for (int i = start; i < end; i++) {
      final StringBuilder sb = new StringBuilder();

      int height = 64;
      final IDropItem dropItem = dropList.get(i);
      if (dropItem instanceof GeneralDropItem) {
        addGeneralDropItem(
            activeChar, npc, amountFormat, chanceFormat, sb, (GeneralDropItem) dropItem);
      } else if (dropItem instanceof GroupedGeneralDropItem) {
        final GroupedGeneralDropItem generalGroupedDropItem = (GroupedGeneralDropItem) dropItem;
        if (generalGroupedDropItem.getItems().size() == 1) {
          final GeneralDropItem generalDropItem = generalGroupedDropItem.getItems().get(0);
          addGeneralDropItem(
              activeChar,
              npc,
              amountFormat,
              chanceFormat,
              sb,
              new GeneralDropItem(
                  generalDropItem.getItemId(),
                  generalDropItem.getMin(),
                  generalDropItem.getMax(),
                  (generalDropItem.getChance(npc, activeChar) * generalGroupedDropItem.getChance())
                      / 100,
                  generalDropItem.getAmountStrategy(),
                  generalDropItem.getChanceStrategy(),
                  generalGroupedDropItem.getPreciseStrategy(),
                  generalGroupedDropItem.getKillerChanceModifierStrategy(),
                  generalDropItem.getDropCalculationStrategy()));
        } else {
          final GroupedGeneralDropItem normalized =
              generalGroupedDropItem.normalizeMe(npc, activeChar);
          sb.append(
              "<table width=332 cellpadding=2 cellspacing=0 background=\"L2UI_CT1.Windows.Windows_DF_TooltipBG\">");
          sb.append(
              "<tr><td width=32 valign=top><img src=\"L2UI_CT1.ICON_DF_premiumItem\" width=32 height=32></td>");
          sb.append(
              "<td fixwidth=300 align=center><font name=\"ScreenMessageSmall\" color=\"CD9000\">One from group</font>");
          sb.append(
              "</td></tr><tr><td width=32></td><td width=300><table width=295 cellpadding=0 cellspacing=0><tr>");
          sb.append(
              "<td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
          sb.append("<td width=247 align=center>");
          sb.append(chanceFormat.format(Math.min(normalized.getChance(), 100)));
          sb.append("%</td></tr></table><br>");

          for (GeneralDropItem generalDropItem : normalized.getItems()) {
            final L2Item item = ItemTable.getInstance().getTemplate(generalDropItem.getItemId());
            sb.append(
                "<table width=291 cellpadding=2 cellspacing=0 background=\"L2UI_CT1.Windows.Windows_DF_TooltipBG\">");
            sb.append("<tr><td width=32 valign=top>");
            String icon = item.getIcon();
            if (icon == null) {
              icon = "icon.etc_question_mark_i00";
            }
            sb.append("<img src=\"" + icon + "\" width=32 height=32>");
            sb.append("</td><td fixwidth=259 align=center><font name=\"hs9\" color=\"CD9000\">");
            sb.append(item.getName());
            sb.append(
                "</font></td></tr><tr><td width=32></td><td width=259><table width=253 cellpadding=0 cellspacing=0>");
            sb.append(
                "<tr><td width=48 align=right valign=top><font color=\"LEVEL\">Amount:</font></td><td width=205 align=center>");
            final MinMax minMax =
                getPreciseMinMax(
                    normalized.getChance(),
                    generalDropItem.getMin(npc, activeChar),
                    generalDropItem.getMax(npc, activeChar),
                    generalDropItem.isPreciseCalculated());
            final long min = minMax.min;
            final long max = minMax.max;
            if (min == max) {
              sb.append(amountFormat.format(min));
            } else {
              sb.append(amountFormat.format(min));
              sb.append(" - ");
              sb.append(amountFormat.format(max));
            }

            sb.append(
                "</td></tr><tr><td width=48 align=right valign=top><font color=\"LEVEL\">Chance:</font></td>");
            sb.append("<td width=205 align=center>");
            sb.append(
                chanceFormat.format(Math.min(generalDropItem.getChance(npc, activeChar), 100)));
            sb.append(
                "%</td></tr></table></td></tr><tr><td width=32></td><td width=259>&nbsp;</td></tr></table>");

            height += 64;
          }

          sb.append("</td></tr><tr><td width=32></td><td width=300>&nbsp;</td></tr></table>");
        }
      }

      if (leftHeight >= (rightHeight + height)) {
        rightSb.append(sb);
        rightHeight += height;
      } else {
        leftSb.append(sb);
        leftHeight += height;
      }
    }

    final StringBuilder bodySb = new StringBuilder();
    bodySb.append("<table><tr>");
    bodySb.append("<td>");
    bodySb.append(leftSb.toString());
    bodySb.append("</td><td>");
    bodySb.append(rightSb.toString());
    bodySb.append("</td>");
    bodySb.append("</tr></table>");

    String html =
        HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "html/mods/NpcView/DropList.htm");
    if (html == null) {
      _log.warning(
          NpcViewMod.class.getSimpleName()
              + ": The html file html/mods/NpcView/DropList.htm could not be found.");
      return;
    }
    html = html.replaceAll("%name%", npc.getName());
    html = html.replaceAll("%dropListButtons%", getDropListButtons(npc));
    html = html.replaceAll("%pages%", pagesSb.toString());
    html = html.replaceAll("%items%", bodySb.toString());
    Util.sendCBHtml(activeChar, html);
  }