Ejemplo n.º 1
0
 public double computeWeekTendency(Feed feed) {
   long numItems = itemService.getNumItemsOfFeed(feed);
   if (numItems == 0) {
     return 0;
   }
   Item item = itemService.findFirstItemOfFeed(feed);
   return computeWeekTendency(item.getPublishedDate(), numItems);
 }
Ejemplo n.º 2
0
  // req: 12.4
  public void delete(Category category) {
    Assert.notNull(category);

    Collection<Item> items;

    items = itemService.findAllNotDeletedByCategory(category);

    Assert.isTrue(
        items.isEmpty(), "Only the categories without items (deleted or not) could be deleted");

    categoryRepository.delete(category);
  }
Ejemplo n.º 3
0
 @Override
 public int countItems(Context context, Community community) throws SQLException {
   int total = 0;
   // add collection counts
   List<Collection> cols = community.getCollections();
   for (Collection col : cols) {
     total += itemService.countItems(context, col);
   }
   // add sub-community counts
   List<Community> comms = community.getSubcommunities();
   for (int j = 0; j < comms.size(); j++) {
     total += countItems(context, comms.get(j));
   }
   return total;
 }
Ejemplo n.º 4
0
  /**
   * Loads account data and returns.
   *
   * @param accountId
   * @param accountName
   * @return
   */
  private static Account loadAccount(int accountId) {
    Account account = new Account(accountId);

    PlayerDAO playerDAO = DAOManager.getDAO(PlayerDAO.class);
    PlayerAppearanceDAO appereanceDAO = DAOManager.getDAO(PlayerAppearanceDAO.class);

    List<Integer> playerOids = playerDAO.getPlayerOidsOnAccount(accountId);

    for (int playerOid : playerOids) {
      PlayerCommonData playerCommonData = playerDAO.loadPlayerCommonData(playerOid);
      PlayerAppearance appereance = appereanceDAO.load(playerOid);

      LegionMember legionMember =
          DAOManager.getDAO(LegionMemberDAO.class).loadLegionMember(playerOid);

      /** Load only equipment and its stones to display on character selection screen */
      List<Item> equipment = DAOManager.getDAO(InventoryDAO.class).loadEquipment(playerOid);

      PlayerAccountData acData =
          new PlayerAccountData(playerCommonData, appereance, equipment, legionMember);
      playerDAO.setCreationDeletionTime(acData);

      account.addPlayerAccountData(acData);

      /** load account warehouse only once */
      if (account.getAccountWarehouse() == null) {
        // TODO memory lake.....
        Player player = new Player(new PlayerController(), playerCommonData, appereance, account);
        Storage accWarehouse =
            DAOManager.getDAO(InventoryDAO.class)
                .loadStorage(player, StorageType.ACCOUNT_WAREHOUSE);
        ItemService.loadItemStones(accWarehouse.getStorageItems());
        account.setAccountWarehouse(accWarehouse);
      }
    }

    /** For new accounts - create empty account warehouse */
    if (account.getAccountWarehouse() == null)
      account.setAccountWarehouse(new Storage(StorageType.ACCOUNT_WAREHOUSE));

    return account;
  }
Ejemplo n.º 5
0
  @RequestMapping(value = "/api/client/{client}/summarystate", method = RequestMethod.GET)
  public @ResponseBody SummaryState getSummaryState(@PathVariable String client) throws Exception {
    Client cl = clientService.get(client);

    SummaryState summaryState = new SummaryState();

    List<SalesItem> items = itemService.getItemsForClient(cl.getId());
    summaryState.itemHash = HashUtil.getHash(items);

    List<SalesCategory> cats = categoryService.getAllCategoriesForClient(cl.getId());
    summaryState.categoryHash = HashUtil.getHash(cats);

    List<SalesCategoryGroup> grps = categoryService.getGroupForClient(cl.getId());
    summaryState.categoryGroupHash = HashUtil.getHash(grps);

    List<SalesItemOption> opts = optionService.getOptionsForClient(cl.getId());
    summaryState.optionsHash = HashUtil.getHash(opts);

    List<SalesItemOptions> optGrp = optionService.getOptionGroupsForClient(cl.getId());
    summaryState.optionGroupHash = HashUtil.getHash(optGrp);

    List<User> users = userService.findAllUsersForClient(cl.getId());
    summaryState.userHash = HashUtil.getHash(users);

    try {

      log.debug("items", new ObjectMapper().writeValueAsString(items));
      log.debug("cats", new ObjectMapper().writeValueAsString(cats));
      log.debug("grps", new ObjectMapper().writeValueAsString(grps));
      log.debug("opts", new ObjectMapper().writeValueAsString(opts));
      log.debug("optGrp", new ObjectMapper().writeValueAsString(optGrp));
      log.debug("user", new ObjectMapper().writeValueAsString(users));

    } catch (Exception e) {
      log.debug("Error getting state", e);
    }

    return summaryState;
  }
Ejemplo n.º 6
0
  public static void breakWeapons(Player player, int weaponToBreakUniqueId) {
    Item weaponToBreak = player.getInventory().getItemByObjId(weaponToBreakUniqueId);
    if (weaponToBreak == null)
      weaponToBreak = player.getEquipment().getEquippedItemByObjId(weaponToBreakUniqueId);

    if (weaponToBreak == null || !(player.getTarget() instanceof Npc)) return;

    if (!weaponToBreak.hasFusionedItem()) {
      PacketSendUtility.sendPacket(
          player, SM_SYSTEM_MESSAGE.STR_DECOMPOUND_ERROR_NOT_AVAILABLE(weaponToBreak.getNameID()));
      return;
    }

    weaponToBreak.setFusionedItem(0);
    ItemService.removeAllFusionStone(player, weaponToBreak);
    DAOManager.getDAO(InventoryDAO.class).store(weaponToBreak, player.getObjectId());

    PacketSendUtility.sendPacket(player, new SM_UPDATE_ITEM(weaponToBreak));

    PacketSendUtility.sendPacket(
        player,
        SM_SYSTEM_MESSAGE.STR_COMPOUNDED_ITEM_DECOMPOUND_SUCCESS(weaponToBreak.getNameID()));
  }
Ejemplo n.º 7
0
  /**
   * 录入或更新商品信息和库存信息, 同时录入日志信息
   *
   * @param json 商品和库存信息json串
   * @param enNm 操作人员
   * @param operateIp 操作人员ip
   * @return
   */
  public List<Long> itemSave(JsonNode json, String enNm, String operateIp) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date now = new Date();
    Long nowTimes = now.getTime();
    String nowStr = sdf.format(now);
    List<Long> list = new ArrayList<>();
    Item item = new Item();
    // 日志信息
    DataLog dataLog = new DataLog();
    dataLog.setOperateUser(enNm);
    dataLog.setOperateIp(operateIp);
    // 统计信息
    ItemStatis itemStatis = new ItemStatis();
    // items表录入数据
    if (json.has("item")) {
      JsonNode jsonItem = json.findValue("item");
      item = Json.fromJson(jsonItem, Item.class);
      // 更新商品信息
      if (jsonItem.has("id")) {
        Item originItem = itemService.getItem(item.getId());
        item.setOrDestroy(originItem.getOrDestroy());
        itemService.itemUpdate(item);
        // 数据录入data_log表
        Long itemId = item.getId();
        dataLog.setOperateType("修改商品");
        dataLog.setLogContent("修改商品" + itemId);
        List<Inventory> originInv = inventoryService.getInventoriesByItemId(itemId);
        List<VaryPrice> originVP = new ArrayList<>();
        for (Inventory inventory : originInv) {
          VaryPrice varyPrice = new VaryPrice();
          varyPrice.setInvId(inventory.getId());
          List<VaryPrice> varyPriceList = varyPriceService.getVaryPriceBy(varyPrice);
          for (VaryPrice vp : varyPriceList) {
            originVP.add(vp);
          }
        }
        dataLog.setOriginData(
            "{\"item\":"
                + Json.toJson(originItem).toString()
                + ",\"inventories\":"
                + Json.toJson(originInv).toString()
                + ",\"varyPrices\":"
                + Json.toJson(originVP).toString()
                + "}");
        dataLog.setNewData(json.toString());
        dataLogService.insertDataLog(dataLog);
      }
      // 录入商品信息
      else {
        itemService.itemInsert(item);
        // 数据录入data_log表
        dataLog.setOperateType("新增商品");
        dataLog.setLogContent("新增商品" + item.getId());
        dataLog.setOriginData("{}");
        dataLog.setNewData(json.toString());
        dataLogService.insertDataLog(dataLog);
      }
    }
    // 往inventories表插入数据
    if (json.has("inventories")) {
      for (final JsonNode jsonNode : json.findValue("inventories")) {
        Inventory inventory = new Inventory();
        Inventory originInv = new Inventory();
        if (jsonNode.has("inventory")) {
          JsonNode jsonInv = jsonNode.findValue("inventory");
          inventory = Json.fromJson(jsonInv, Inventory.class);
          inventory.setItemId(item.getId());
          //                    inventory.setPostalTaxRate("0");
          inventory.setItemDiscount(
              inventory
                  .getItemPrice()
                  .divide(inventory.getItemSrcPrice(), 2, BigDecimal.ROUND_HALF_UP)
                  .multiply(new BigDecimal(10)));
          String startAt = inventory.getStartAt(); // 现上架时间
          String endAt = inventory.getEndAt(); // 现下架时间
          Long startTimes = null; // 现上架时间毫秒数
          Long endTimes = null; // 现下架时间毫秒数
          try {
            startTimes = sdf.parse(startAt).getTime();
            endTimes = sdf.parse(endAt).getTime();
          } catch (ParseException e) {
            //                        e.printStackTrace();
            Logger.error(Throwables.getStackTraceAsString(e));
          }
          // 更新库存信息
          if (jsonInv.has("id")) {
            String state = inventory.getState(); // 现sku状态
            Integer orUpdate = 0; // orUpdate状态为标识是否执行更新语句
            originInv = inventoryService.getInventory(inventory.getId());
            String originStartAt = originInv.getStartAt(); // 原上架时间
            String originEndAt = originInv.getEndAt(); // 原下架时间
            Long originStartTimes = null; // 原上架时间毫秒数
            Long originEndTimes = null; // 原下架架时间毫秒数
            try {
              originStartTimes = sdf.parse(originStartAt).getTime();
              originEndTimes = sdf.parse(originEndAt).getTime();
            } catch (ParseException e) {
              //                            e.printStackTrace();
              Logger.error(Throwables.getStackTraceAsString(e));
            }
            String originState = originInv.getState(); // 原sku状态
            inventory.setSoldAmount(originInv.getSoldAmount());
            inventory.setOrDestroy(originInv.getOrDestroy());
            inventory.setInvTitle(item.getItemTitle());
            inventory.setShareCount(originInv.getShareCount());
            inventory.setCollectCount(originInv.getCollectCount());
            inventory.setBrowseCount(originInv.getBrowseCount());
            Integer restAmount = inventory.getRestAmount(); // 现剩余库存
            Integer orginResAm = originInv.getRestAmount(); // 原剩余库存
            // 如果剩余库存量增加, 增加量累加到库存总量amount
            if (restAmount > orginResAm) {
              inventory.setAmount(originInv.getAmount() + (restAmount - orginResAm));
            } else {
              inventory.setAmount(originInv.getAmount());
            }
            // 修改SKU
            // 如果修改时间,或时间状态都不修改,状态以时间为准
            if (!originStartTimes.equals(startTimes)
                || !originEndTimes.equals(endTimes)
                || (originStartTimes.equals(startTimes)
                    && originEndTimes.equals(endTimes)
                    && originState.equals(state))) {
              if (startTimes > nowTimes) { // 上架时间比现在时间大为预售状态
                inventory.setState("P");
              }
              if (startTimes < nowTimes && nowTimes < endTimes) { // 现在时间介于上架和下架时间之间为正常状态
                inventory.setState("Y");
              }
              if (endTimes < nowTimes) { // 下架时间比当前时间小为下架状态
                inventory.setState("D");
              }
            }
            // 如果时间不改 修改状态
            else if (originStartTimes.equals(startTimes)
                && originEndTimes.equals(endTimes)
                && !originState.equals(state)) {
              // P-->Y(上架时间改为现在)
              if ("P".equals(originState) && "Y".equals(state)) {
                inventory.setStartAt(nowStr);
                startTimes = nowTimes;
              }
              // P-->D或Y-->D(下架时间改为现在)
              if (("P".equals(originState) || "Y".equals(originState)) && "D".equals(state)) {
                inventory.setEndAt(nowStr);
                endTimes = nowTimes;
              }
            }
            // 状态由预售到预售, 修改上架时间  ==> 修改上架schedule
            if ("P".equals(originState)
                && "P".equals(state)
                && !originStartTimes.equals(startTimes)) {
              Logger.info(inventory.getId() + " auto on shelves start...");
              newScheduler.scheduleOnce(
                  Duration.create(startTimes - nowTimes, TimeUnit.MILLISECONDS),
                  inventoryAutoShelvesActor,
                  inventory.getId());
            }
            // 状态由预售到正常, 修改上架时间  ==> 修改下架schedule
            if ("P".equals(originState)
                && "Y".equals(state)
                && !originStartTimes.equals(startTimes)) {
              orUpdate = 1;
              inventoryService.updateInventory(inventory);
              Logger.info(inventory.getId() + " auto off shelves start...");
              newScheduler.scheduleOnce(
                  Duration.create(endTimes - nowTimes, TimeUnit.MILLISECONDS),
                  inventoryAutoShelvesActor,
                  inventory.getId());
            }
            // 状态由预售/正常 到下架, 修改下架时间 ==> 停止schedule
            if (("P".equals(originState) || "Y".equals(originState))
                && "D".equals(state)
                && !originEndTimes.equals(endTimes)) {
              orUpdate = 1;
              inventoryService.updateInventory(inventory);
              newScheduler.scheduleOnce(
                  Duration.create(1000, TimeUnit.MILLISECONDS),
                  inventoryAutoShelvesActor,
                  inventory.getId()); // 停止scheduler
            }
            // 状态由正常/下架 到预售, 修改上架时间 ==> 修改上架schedule
            if (("Y".equals(originState) || "D".equals(originState))
                && "P".equals(state)
                && !originStartTimes.equals(startTimes)) {
              orUpdate = 1;
              inventoryService.updateInventory(inventory);
              Logger.info(inventory.getId() + " auto on shelves start...");
              newScheduler.scheduleOnce(
                  Duration.create(startTimes - nowTimes, TimeUnit.MILLISECONDS),
                  inventoryAutoShelvesActor,
                  inventory.getId());
            }
            // 状态由正常到正常, 修改下架时间 ==> 修改下架schedule
            if ("Y".equals(originState) && "Y".equals(state) && !originEndTimes.equals(endTimes)) {
              Logger.info(inventory.getId() + " auto off shelves start...");
              newScheduler.scheduleOnce(
                  Duration.create(endTimes - nowTimes, TimeUnit.MILLISECONDS),
                  inventoryAutoShelvesActor,
                  inventory.getId());
            }
            // 状态由下架到正常, 修改下架时间  ==> 修改下架schedule
            if ("D".equals(originState) && "Y".equals(state) && !originEndTimes.equals(endTimes)) {
              orUpdate = 1;
              inventoryService.updateInventory(inventory);
              Logger.info(inventory.getId() + " auto off shelves start...");
              newScheduler.scheduleOnce(
                  Duration.create(endTimes - nowTimes, TimeUnit.MILLISECONDS),
                  inventoryAutoShelvesActor,
                  inventory.getId());
            }
            if (orUpdate.equals(0)) {
              // 以上没有执行修改语句时,此时修改数据
              inventoryService.updateInventory(inventory);
            }

            if ("Y".equals(originState)) {
              // 修改pin_sku表中状态或时间
              List<PinSku> pinSkuList = pingouService.getPinSkuByInvId(inventory.getId());
              for (PinSku pinSku : pinSkuList) {
                Date pinStartAt = new Date();
                Date pinEndAt = new Date();
                Long pinStartTimes = 0L;
                Long pinEndTimes = 0L;
                try {
                  pinStartAt = sdf.parse(pinSku.getStartAt());
                  pinEndAt = sdf.parse(pinSku.getEndAt());
                  pinStartTimes = pinStartAt.getTime();
                  pinEndTimes = pinEndAt.getTime();
                } catch (ParseException e) {
                  //                                e.printStackTrace();
                  Logger.error(Throwables.getStackTraceAsString(e));
                }
                // sku由正常到预售,修改sku上架时间  或 sku由正常到正常,修改下架时间且现下架时间<pin_sku上架时间 ==> pin_sku
                // 直接下架,修改状态,上下架时间为当前时间,停止schedule
                if (("P".equals(state) && !originStartTimes.equals(startTimes))
                    || ("Y".equals(state)
                        && !originEndAt.equals(endAt)
                        && endTimes < pinStartTimes)) {
                  pinSku.setStatus("D");
                  pinSku.setStartAt(sdf.format(now));
                  pinSku.setEndAt(sdf.format(now));
                  newScheduler.scheduleOnce(
                      Duration.create(1000, TimeUnit.MILLISECONDS),
                      pingouOffShelfActor,
                      pinSku.getPinId());
                  pingouService.updatePinSku(pinSku);
                }
                // sku由正常到正常,修改下架时间 且 pin_sku上架时间<现下架时间<pin_sku下架时间
                if ("Y".equals(state)
                    && !originEndAt.equals(endAt)
                    && pinStartTimes < endTimes
                    && endTimes < pinEndTimes) {
                  // pin_sku原为预售,只修改pin_sku下架时间
                  if ("P".equals(pinSku.getStatus())) {
                    pinSku.setEndAt(endAt);
                    pingouService.updatePinSku(pinSku);
                  }
                  // pin_sku原为正常,修改下架时间,修改pin_sku下架schedule
                  if ("Y".equals(pinSku.getStatus())) {
                    pinSku.setEndAt(endAt);
                    newScheduler.scheduleOnce(
                        Duration.create(endTimes - nowTimes, TimeUnit.MILLISECONDS),
                        pingouOffShelfActor,
                        pinSku.getPinId());
                    pingouService.updatePinSku(pinSku);
                  }
                }
                // 由正常到下架,下架时间为当前时间,停止schedule
                if ("D".equals(state) && !"D".equals(pinSku.getStatus())) {
                  pinSku.setStatus("D");
                  pinSku.setEndAt(sdf.format(now));
                  newScheduler.scheduleOnce(
                      Duration.create(1000, TimeUnit.MILLISECONDS),
                      pingouOffShelfActor,
                      pinSku.getPinId());
                  pingouService.updatePinSku(pinSku);
                }
              }
              if (!originInv.getState().equals(inventory.getState())) {
                // 修改subject_price表中状态(获取SubjectPrice,更新状态)
                List<SubjectPrice> subjectPriceList =
                    subjectPriceService.getSbjPriceByInvId(inventory.getId());
                subjectPriceList
                    .stream()
                    .filter(subjectPrice -> "Y".equals(subjectPrice.getState()))
                    .forEach(
                        subjectPrice -> {
                          subjectPrice.setState("D");
                          subjectPriceService.sbjPriceUpd(subjectPrice);
                        });
              }
            }

          }
          // 录入库存信息
          else {
            if (startTimes > nowTimes) { // 上架时间比现在时间大为预售状态
              inventory.setState("P");
            }
            if (startTimes < nowTimes && nowTimes < endTimes) { // 现在时间介于上架和下架时间之间为正常状态
              inventory.setState("Y");
            }
            if (endTimes < nowTimes) { // 下架时间比当前时间小为下架状态
              inventory.setState("D");
            }
            inventory.setAmount(inventory.getRestAmount());
            inventory.setInvTitle(item.getItemTitle());
            //                        Logger.error("sku信息:::::::"+inventory.toString());
            inventoryService.insertInventory(inventory);
            String createDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
            itemStatis.setCreateDate(createDate);
            itemStatis.setSkuId(inventory.getId());
            itemStatis.setColor(inventory.getItemColor());
            itemStatis.setSize(inventory.getItemSize());
            itemStatisService.insertItemStatis(itemStatis);
          }

          // -- 创建Actor --//
          // 修改时,修改时间且下架时间大于现在时间 或 新增sku时 启动Actor
          if (null == inventory.getId()) {
            if (startTimes > nowTimes) {
              // 上架时间大于现在时间 启动上架schedule
              Logger.info(inventory.getId() + " auto on shelves start...");
              newScheduler.scheduleOnce(
                  Duration.create(startTimes - nowTimes, TimeUnit.MILLISECONDS),
                  inventoryAutoShelvesActor,
                  inventory.getId());
            }
            if (startTimes < nowTimes && endTimes > nowTimes) {
              // 上架时间小于现在时间小于下架时间 启动下架scheduler
              Logger.info(inventory.getId() + " auto off shelves start...");
              newScheduler.scheduleOnce(
                  Duration.create(endTimes - nowTimes, TimeUnit.MILLISECONDS),
                  inventoryAutoShelvesActor,
                  inventory.getId());
            }
          }

          list.add(inventory.getId());
        }
        // 往vary_price表插入数据
        if (jsonNode.has("varyPrices")) {
          for (final JsonNode varyPriceNode : jsonNode.findValue("varyPrices")) {
            VaryPrice varyPrice = Json.fromJson(varyPriceNode, VaryPrice.class);
            varyPrice.setInvId(inventory.getId());
            // 更新多样化价格信息
            if (varyPriceNode.has("id")) {
              // SKU状态改变,多样化价格状态相应变化
              if ("P".equals(inventory.getState()) && "Y".equals(varyPrice.getStatus())) {
                varyPrice.setStatus("P");
              }
              if ("Y".equals(inventory.getState()) && "P".equals(varyPrice.getStatus())) {
                varyPrice.setStatus("Y");
              }
              if ("D".equals(inventory.getState())
                  && ("P".equals(varyPrice.getStatus()) || "Y".equals(varyPrice.getStatus()))) {
                varyPrice.setStatus("D");
              }
              //                            if ((originInv.getState().equals("P") ||
              // originInv.getState().equals("Y")) && inventory.getState().equals("D"))  {
              //                                varyPrice.setStatus(inventory.getState());
              //                            }
              VaryPrice originVp = varyPriceService.getVaryPriceById(varyPrice.getId());
              varyPrice.setSoldAmount(originVp.getSoldAmount());
              varyPriceService.updateVaryPrice(varyPrice);
            } else {
              varyPrice.setStatus(inventory.getState());
              varyPriceService.insertVaryPrice(varyPrice);
            }
          }
        }
      }
    }
    return list;
  }
Ejemplo n.º 8
0
  public static void fusionWeapons(Player player, int firstItemUniqueId, int secondItemUniqueId) {
    Item firstItem = player.getInventory().getItemByObjId(firstItemUniqueId);
    if (firstItem == null)
      firstItem = player.getEquipment().getEquippedItemByObjId(firstItemUniqueId);

    Item secondItem = player.getInventory().getItemByObjId(secondItemUniqueId);
    if (secondItem == null)
      secondItem = player.getEquipment().getEquippedItemByObjId(secondItemUniqueId);

    /*
     * Need to have items in bag, and target the fusion NPC
     */
    if (firstItem == null || secondItem == null || !(player.getTarget() instanceof Npc)) return;
    if (!MathUtil.isIn3dRange(player.getTarget(), player, 10)) return;
    /*
     * Both have to be 2h weapons
     */
    if (!firstItem.getItemTemplate().isWeapon() || !secondItem.getItemTemplate().isWeapon()) {
      Logger.getLogger(ArmsfusionService.class)
          .info("[AUDIT]Player: " + player.getName() + " trying to fusion non-weapon. Hacking!");
      return;
    }
    if (firstItem.getItemTemplate().getWeaponType() == null
        || secondItem.getItemTemplate().getWeaponType() == null) return;
    else {
      switch (firstItem.getItemTemplate().getWeaponType()) {
        case DAGGER_1H:
        case MACE_1H:
        case SWORD_1H:
        case TOOLHOE_1H:
          Logger.getLogger(ArmsfusionService.class)
              .info("[AUDIT]Player: " + player.getName() + " trying to fusion 1h weapon. Hacking!");
          return;
      }
      switch (secondItem.getItemTemplate().getWeaponType()) {
        case DAGGER_1H:
        case MACE_1H:
        case SWORD_1H:
        case TOOLHOE_1H:
          Logger.getLogger(ArmsfusionService.class)
              .info("[AUDIT]Player: " + player.getName() + " trying to fusion 1h weapon. Hacking!");
          return;
      }
    }

    // check if both items are fusionable
    if (!firstItem.getItemTemplate().isCanFuse() || !secondItem.getItemTemplate().isCanFuse())
      return;

    double rarity = rarityRate(firstItem.getItemTemplate().getItemQuality());
    double priceRate = player.getPrices().getGlobalPrices(player.getCommonData().getRace()) * .01;
    double taxRate = player.getPrices().getTaxes(player.getCommonData().getRace()) * .01;
    int priceMod = player.getPrices().getGlobalPricesModifier() * 2;
    int level = firstItem.getItemTemplate().getLevel();
    int price = (int) (priceMod * priceRate * taxRate * rarity * level * level);
    log.debug(
        "Rarity: "
            + rarity
            + " Price Rate: "
            + priceRate
            + " Tax Rate: "
            + taxRate
            + " Price Mod: "
            + priceMod
            + " Weapon Level: "
            + level);
    log.debug("Price: " + price);

    if (player.getInventory().getKinahItem().getItemCount() < price) {
      PacketSendUtility.sendPacket(
          player,
          SM_SYSTEM_MESSAGE.STR_COMPOUND_ERROR_NOT_ENOUGH_MONEY(
              firstItem.getNameID(), secondItem.getNameID()));
      return;
    }

    /*
     * Fusioned weapons must have same type
     */
    if (firstItem.getItemTemplate().getWeaponType()
        != secondItem.getItemTemplate().getWeaponType()) {
      PacketSendUtility.sendPacket(player, SM_SYSTEM_MESSAGE.STR_COMPOUND_ERROR_DIFFERENT_TYPE);
      return;
    }

    /*
     * Second weapon must have inferior or equal lvl. in relation to first weapon
     */
    if (secondItem.getItemTemplate().getLevel() > firstItem.getItemTemplate().getLevel()) {
      PacketSendUtility.sendPacket(
          player, SM_SYSTEM_MESSAGE.STR_COMPOUND_ERROR_MAIN_REQUIRE_HIGHER_LEVEL);
      return;
    }

    boolean decreaseResult = player.getInventory().decreaseKinah(price);
    if (!decreaseResult) return;

    boolean removeResult = player.getInventory().removeFromBagByObjectId(secondItemUniqueId, 1);
    if (!removeResult) return;

    firstItem.setFusionedItem(secondItem.getItemTemplate().getTemplateId());

    ItemService.removeAllFusionStone(player, firstItem);

    if (secondItem.hasOptionalSocket()) {
      firstItem.setOptionalFusionSocket(secondItem.getOptionalSocket());
    } else {
      firstItem.setOptionalFusionSocket(0);
    }

    Set<ManaStone> manastones = secondItem.getItemStones();
    for (ManaStone stone : manastones) ItemService.addFusionStone(firstItem, stone.getItemId());

    if (firstItem.getPersistentState() != PersistentState.NEW
        && firstItem.getPersistentState() != PersistentState.UPDATE_REQUIRED)
      firstItem.setPersistentState(PersistentState.UPDATE_REQUIRED);

    DAOManager.getDAO(InventoryDAO.class).store(firstItem, player.getObjectId());

    PacketSendUtility.sendPacket(player, new SM_DELETE_ITEM(secondItemUniqueId));

    PacketSendUtility.sendPacket(player, new SM_UPDATE_ITEM(firstItem));

    PacketSendUtility.sendPacket(
        player,
        SM_SYSTEM_MESSAGE.STR_COMPOUND_SUCCESS(firstItem.getNameID(), secondItem.getNameID()));
  }
Ejemplo n.º 9
0
  public void registerItem(Player player, int itemUniqueId, long price, int itemCount) {
    Map<Integer, BrokerItem> brokerItems = getRaceBrokerItems(player.getCommonData().getRace());

    List<BrokerItem> registeredItems = new ArrayList<BrokerItem>();
    int playerId = player.getObjectId();

    for (BrokerItem item : brokerItems.values()) {
      if (item != null
          && item.getItem() != null
          && !item.isSold()
          && !item.isSettled()
          && playerId == item.getSellerId()) registeredItems.add(item);
    }

    if (registeredItems.size() >= 15) {
      PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(1300653));
      return;
    }

    Item itemToRegister = player.getInventory().getItemByObjId(itemUniqueId);
    Race playerRace = player.getCommonData().getRace();

    if (itemToRegister == null) return;

    if (!itemToRegister.getItemTemplate().isTradeable()) {
      PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(1300652));
      return;
    }

    if (itemToRegister.isSoulBound()) return;

    BrokerRace brRace;

    if (playerRace == Race.ASMODIANS) brRace = BrokerRace.ASMODIAN;
    else if (playerRace == Race.ELYOS) brRace = BrokerRace.ELYOS;
    else return;

    double priceRate = player.getPrices().getGlobalPrices(player.getCommonData().getRace()) * .01;
    double taxRate = player.getPrices().getTaxes(player.getCommonData().getRace()) * .01;
    double priceMod = player.getPrices().getGlobalPricesModifier() * .01;
    double priceFactor = 0.02 * priceRate * taxRate * priceMod;
    long registrationCommition =
        (long) (price * priceFactor * (registeredItems.size() >= 10 ? 2 : 1));

    if (registrationCommition < 10) registrationCommition = 10;

    if (player.getInventory().getKinahItem().getItemCount() < registrationCommition) {
      PacketSendUtility.sendPacket(player, new SM_SYSTEM_MESSAGE(1300647));
      return;
    }

    if (itemCount < itemToRegister.getItemCount() && itemCount > 0) {
      Item newItem =
          ItemService.newItem(
              itemToRegister.getItemTemplate().getTemplateId(),
              itemCount,
              itemToRegister.getCrafterName(),
              playerId,
              itemToRegister.getTempItemTimeLeft(),
              itemToRegister.getTempTradeTimeLeft());
      player.getInventory().decreaseItemCount(itemToRegister, itemCount);
      PacketSendUtility.sendPacket(player, new SM_UPDATE_ITEM(itemToRegister));
      itemToRegister = newItem;
    } else {
      boolean removeResult = player.getInventory().removeFromBag(itemToRegister, false);
      if (!removeResult) return;
      PacketSendUtility.sendPacket(player, new SM_DELETE_ITEM(itemToRegister.getObjectId()));
    }

    boolean decreaseResult = player.getInventory().decreaseKinah(registrationCommition);
    if (!decreaseResult) return;

    itemToRegister.setItemLocation(126);

    BrokerItem newBrokerItem =
        new BrokerItem(
            player, itemToRegister, price, player.getName(), player.getObjectId(), brRace);

    switch (brRace) {
      case ASMODIAN:
        asmodianBrokerItems.put(newBrokerItem.getItemUniqueId(), newBrokerItem);
        break;

      case ELYOS:
        elyosBrokerItems.put(newBrokerItem.getItemUniqueId(), newBrokerItem);
        break;
    }

    BrokerOpSaveTask bost =
        new BrokerOpSaveTask(
            newBrokerItem,
            itemToRegister,
            player.getInventory().getKinahItem(),
            player.getObjectId());
    saveManager.add(bost);

    BrokerItem[] brokerItem = new BrokerItem[1];
    brokerItem[0] = newBrokerItem;
    PacketSendUtility.sendPacket(
        player, new SM_BROKER_ITEMS(brokerItem, registeredItems.size() + 1, 3));
  }
Ejemplo n.º 10
0
  public static boolean questFinish(QuestCookie env, int reward) {
    Player player = env.getPlayer();
    synchronized (player) {
      int id = env.getQuestId();

      QuestState qs = player.getQuestStateList().getQuestState(id);
      if (qs == null || qs.getStatus() != QuestStatus.REWARD) return false;

      QuestTemplate template = questsData.getQuestById(id);
      Storage inventory = player.getInventory();

      BonusTemplate bonusTemplate = bonusData.getBonusInfoByQuestId(id);
      List<SimpleCheckItemBonus> appliedBonuses = null;

      if (bonusTemplate != null) {
        int failedChecks = 0;
        QuestTemplate questTemplate = questsData.getQuestById(env.getQuestId());
        // if collectItems not null, the bonus for SimpleCheckItemBonus classes
        // was already applied, then skip them.
        boolean useCheckItems = questTemplate.getCollectItems() == null;

        List<AbstractInventoryBonus> bi = bonusTemplate.getItemBonuses();

        for (int i = 0; i < bi.size(); i++) {
          AbstractInventoryBonus bonus = bi.get(i);
          HandlerResult result = QuestEngine.getInstance().onBonusApply(env, i, bonus);
          if (result == HandlerResult.FAILED)
            continue; // bonus can not be applied (reason: not that bonus or failed)

          if (bonus instanceof SimpleCheckItemBonus) {
            if (!useCheckItems) continue;

            SimpleCheckItemBonus scb = (SimpleCheckItemBonus) bonus;
            if (!scb.canApply(player, env.getQuestId())) {
              // inventory full or other reasons
              failedChecks++;
              break;
            }

            if (appliedBonuses == null) appliedBonuses = new ArrayList<SimpleCheckItemBonus>();
            appliedBonuses.add(scb);
          } else {
            bonus.apply(player, null);
          }
        }
        if (failedChecks > 0) return false;
        else if (appliedBonuses != null) {
          for (SimpleCheckItemBonus scb : appliedBonuses) {
            player.getInventory().removeFromBagByItemId(scb.getCheckedItemId(), scb.getCount());
            scb.apply(player, null);
          }
        }
      }

      Rewards rewards = null;
      if (reward < template.getRewards().size()) rewards = template.getRewards().get(reward);
      else rewards = new Rewards();

      Rewards extRewards = null;
      if (template.getExtRewards() != null
          && qs.getCompleteCount() == template.getMaxRepeatCount() - 1)
        extRewards = template.getExtRewards().get(0);

      List<QuestItems> questItems = new ArrayList<QuestItems>();
      questItems.addAll(rewards.getRewardItem());
      if (extRewards != null) questItems.addAll(extRewards.getRewardItem());

      int dialogId = env.getDialogId();
      if (dialogId != 17 && dialogId != 0) {
        if (template.isUseClassReward() == 1) {
          QuestItems classRewardItem = null;
          PlayerClass playerClass = player.getCommonData().getPlayerClass();
          switch (playerClass) {
            case ASSASSIN:
              classRewardItem = template.getAssassinSelectableReward().get(dialogId - 8);
              break;
            case CHANTER:
              classRewardItem = template.getChanterSelectableReward().get(dialogId - 8);
              break;
            case CLERIC:
              classRewardItem = template.getPriestSelectableReward().get(dialogId - 8);
              break;
            case GLADIATOR:
              classRewardItem = template.getFighterSelectableReward().get(dialogId - 8);
              break;
            case RANGER:
              classRewardItem = template.getRangerSelectableReward().get(dialogId - 8);
              break;
            case SORCERER:
              classRewardItem = template.getWizardSelectableReward().get(dialogId - 8);
              break;
            case SPIRIT_MASTER:
              classRewardItem = template.getElementalistSelectableReward().get(dialogId - 8);
              break;
            case TEMPLAR:
              classRewardItem = template.getKnightSelectableReward().get(dialogId - 8);
              break;
          }
          if (classRewardItem != null) questItems.add(classRewardItem);
        } else {
          QuestItems selectebleRewardItem = null;
          if (rewards != null && !rewards.getSelectableRewardItem().isEmpty()) {
            selectebleRewardItem = rewards.getSelectableRewardItem().get(dialogId - 8);
            if (selectebleRewardItem != null) questItems.add(selectebleRewardItem);
          }
          if (extRewards != null && !extRewards.getSelectableRewardItem().isEmpty()) {
            selectebleRewardItem = extRewards.getSelectableRewardItem().get(dialogId - 8);
            if (selectebleRewardItem != null) questItems.add(selectebleRewardItem);
          }
        }
      }
      if (ItemService.addItems(player, questItems)) {
        if (rewards.getGold() != null) {
          inventory.increaseKinah((player.getRates().getQuestKinahRate() * rewards.getGold()));
        }
        if (rewards.getExp() != null && !player.isNoExperienceGain()) {
          int rewardExp = (player.getRates().getQuestXpRate() * rewards.getExp());
          if (rewardExp > Integer.MAX_VALUE || rewardExp < 0) rewardExp = Integer.MAX_VALUE;
          player.getCommonData().addExp(rewardExp);
        }

        if (rewards.getTitle() != null) {
          player.getTitleList().addTitle(rewards.getTitle());
        }

        if (rewards.getRewardAbyssPoint() != null) {
          player.getCommonData().addAp(rewards.getRewardAbyssPoint());
        }

        if (rewards.getExtendInventory() != null) {
          if (rewards.getExtendInventory() == 1) CubeExpandService.expand(player);
          else if (rewards.getExtendInventory() == 2) WarehouseService.expand(player);
        }

        if (rewards.getExtendStigma() != null) {
          PlayerCommonData pcd = player.getCommonData();
          pcd.setAdvencedStigmaSlotSize(pcd.getAdvencedStigmaSlotSize() + 1);
          PacketSendUtility.sendPacket(
              player, new SM_CUBE_UPDATE(player, 6, pcd.getAdvencedStigmaSlotSize()));
        }

        if (extRewards != null) {
          if (extRewards.getGold() != null) {
            inventory.increaseKinah((player.getRates().getQuestKinahRate() * extRewards.getGold()));
          }
          if (extRewards.getExp() != null) {
            int rewardExp = (player.getRates().getQuestXpRate() * extRewards.getExp());
            player.getCommonData().addExp(rewardExp);
          }

          if (extRewards.getTitle() != null) {
            player.getTitleList().addTitle(extRewards.getTitle());
          }
        }

        // remove all worker list item if finished.
        QuestWorkItems qwi = questsData.getQuestById(id).getQuestWorkItems();

        if (qwi != null) {
          long count = 0;
          for (QuestItems qi : qwi.getQuestWorkItem()) {
            if (qi != null) {
              count = player.getInventory().getItemCountByItemId(qi.getItemId());
              if (count > 0)
                if (!player.getInventory().removeFromBagByItemId(qi.getItemId(), count))
                  return false;
            }
          }
        }

        QuestEngine.getInstance().onQuestFinish(env);
        qs.setStatus(QuestStatus.COMPLETE);
        // save the rewardNo which is used to check quest start conditions
        qs.setQuestVarById(0, reward + 1);
        qs.setCompliteCount(qs.getCompleteCount() + 1);
        qs.setQuestVarById(0, reward + 1);
        PacketSendUtility.sendPacket(
            player, new SM_QUEST_ACCEPTED(2, id, qs.getStatus(), qs.getQuestVars().getQuestVars()));
        player.getController().updateNearbyQuests();
        QuestEngine.getInstance().onLvlUp(env);
        GuildService.getInstance().deleteDaily(player, id);
        return true;
      }
      return true;
    }
  }
Ejemplo n.º 11
0
  @PostConstruct
  public void init() throws IOException {

    if (settingsService.find() == null) {

      // initialize database

      Group groupJava101 =
          constructGroup(
              "Java Basics Tutorial",
              "Java basics tutorial for beginners. From installation of JDK to programming console applications in Eclipse IDE.",
              "Java basics tutorial for beginners. From installation of JDK to programming console applications in Eclipse IDE.");
      groupService.save(groupJava101);

      GroupIcon groupIcon = new GroupIcon();
      groupIcon.setGroup(groupJava101);
      groupIcon.setIcon(IOUtils.toByteArray(getClass().getResourceAsStream("/java-basics.png")));
      groupIconService.save(groupIcon);

      groupJava101.setGroupIcon(groupIcon);
      groupService.save(groupJava101);

      itemService.save(
          constructItem(
              "Difference between Java JRE and JDK",
              "<p>http://www.google.com?test=a&test=b <pre class='prettyprint'>int a = 10;</pre> JRE is a shortname for Java Runtime Edition. In short it's a bunch of applications and Java libraries that are required to run Java applications. This is what you need to run a Java application.</p>"
                  + "<p>You can download it on java.com, which is a site for people, that aren't programmers (aka normal people).</p>"
                  + "<p>But in order to create a Java application, you need more. You need JDK, which is a shortname for Java Development Kit. You can download it on oracle.com website. Just google jdk and you should be able to find it.</p><br><br>",
              "Difference between Java JRE and JDK plus how to install JDK (Java Development Kit).",
              "Hyk3BtCZOEY",
              groupJava101));
      itemService.save(
          constructItem("Second", "Second content", "Second cont.", "youtubelink2", groupJava101));

      staticContentService.save(
          constructStaticContent(
              "",
              Location.HOMEPAGE,
              "This free online video tutorial in English on YouTube was started in late 2011 and it's ever growing collection of Java video tutorials. It's always a work in progress. I focus on tips and tricks with Eclipse and other sweet stuff you won't find in traditional books. Most tutorials are tips and tricks with an exception of Spring web application tutorial, which is focused on how to make a modern web application from scratch. I hope you will enjoy my work."));

      staticContentService.save(
          constructStaticContent(
              "",
              Location.LEFT,
              "				<script async=\"async\" src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n"
                  + "				<!-- javavids-vlevo -->\n"
                  + "				<ins class=\"adsbygoogle\"\n"
                  + "				     style=\"display:inline-block;width:160px;height:600px\"\n"
                  + "				     data-ad-client=\"ca-pub-7085637172523095\"\n"
                  + "				     data-ad-slot=\"1753062007\"></ins>\n"
                  + "				<script>\n"
                  + "				(adsbygoogle = window.adsbygoogle || []).push({});\n"
                  + "				</script>\n"));

      staticContentService.save(
          constructStaticContent(
              "Share / Subscribe",
              Location.RIGHT,
              "		<!-- rss button -->\n"
                  + "		<a href='http://feeds.feedburner.com/javavids' alt='JavaVids RSS feed'><img src='/resources/images/rss.png' border='0' alt='rss' title='rss' style='float:left;padding-right:10px'></a>\n"
                  + "		<!-- twitter button -->\n"
                  + "<a href='https://twitter.com/jirkapinkas' class='twitter-follow-button' data-show-count='false' data-size='large' data-show-screen-name='false'>Follow @jirkapinkas</a>\n"
                  + "<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>\n"
                  + "		<!-- youtube subscribe button -->\n"
                  + "		<script src='https://apis.google.com/js/platform.js'></script>\n"
                  + "		<div class='g-ytsubscribe' data-channel='seicocz' data-layout='default' data-count='default'></div>\n"
                  + "		<!-- Google plus button -->\n"
                  + "		<g:plusone></g:plusone>\n"));

      staticContentService.save(
          constructStaticContent(
              "",
              Location.RIGHT,
              "				<script async=\"async\" src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n"
                  + "				<!-- javavids-vpravo -->\n"
                  + "				<ins class=\"adsbygoogle\"\n"
                  + "				     style=\"display:inline-block;width:336px;height:280px\"\n"
                  + "				     data-ad-client=\"ca-pub-7085637172523095\"\n"
                  + "				     data-ad-slot=\"6322862405\"></ins>\n"
                  + "				<script>\n"
                  + "				(adsbygoogle = window.adsbygoogle || []).push({});\n"
                  + "				</script>\n"));

      staticContentService.save(
          constructStaticContent(
              "Search",
              Location.RIGHT,
              "<script>\n"
                  + "  (function() {\n"
                  + "    var cx = '014150908584257243850:ucmk-06fvfo';\n"
                  + "    var gcse = document.createElement('script');\n"
                  + "    gcse.type = 'text/javascript';\n"
                  + "    gcse.async = true;\n"
                  + "    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +\n"
                  + "        '//www.google.com/cse/cse.js?cx=' + cx;\n"
                  + "    var s = document.getElementsByTagName('script')[0];\n"
                  + "    s.parentNode.insertBefore(gcse, s);\n"
                  + "  })();\n"
                  + "</script>\n"
                  + "<gcse:search></gcse:search>\n"));

      staticContentService.save(
          constructStaticContent(
              "Free online Java web application examples",
              Location.RIGHT,
              "Want to develop whole web applications which use database, security and more? See my github account, where are lot's of example projects: <br /> <a href='https://github.com/jirkapinkas?tab=repositories' target='_blank'> <img src='/resources/images/github.png' border='0' alt='github' /></a>"));

      staticContentService.save(
          constructStaticContent(
              "",
              Location.FOOTER,
              "<div align='center'>&copy; <a href='http://plus.google.com/100661368478614117231' rel='author' target='_blank'>Jirka Pinkas</a>. All Rights Reserved. <a href='/login.xhtml'>Admin login</a></div>"
                  + "<div align='center'>My other projects: <a href='http://www.topjavablogs.com' target='_blank'>Top Java Blogs</a>, <a href='http://www.sqlvids.com' target='_blank'>SQL video tutorials</a>, <a href='http://www.java-skoleni.cz' target='_blank'>Java školení (in Czech language)</a>, <a href='http://www.sql-skoleni.cz' target='_blank'>SQL školení (in Czech language)</a></div>"));

      staticContentService.save(
          constructStaticContent(
              "",
              Location.BANNER,
              // google analytics
              "		<script>\n"
                  + "		  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n"
                  + "		  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n"
                  + "		  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n"
                  + "		  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n"
                  + "		  ga('create', 'UA-4384433-11', 'auto');\n"
                  + "		  ga('send', 'pageview');\n"
                  + "		</script>\n"
                  +

                  // top google adsense banner

                  "<script async=\"async\" src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script> \n"
                  + "<!-- javavids-banner-responsive --> \n"
                  + "<ins class=\"adsbygoogle\" \n"
                  + "     style=\"display:block\" \n"
                  + "     data-ad-client=\"ca-pub-7085637172523095\" \n"
                  + "     data-ad-slot=\"7621866008\" \n"
                  + "     data-ad-format=\"auto\"></ins> \n"
                  + "<script> \n"
                  + "(adsbygoogle = window.adsbygoogle || []).push({}); \n"
                  + "</script> \n"));

      Settings settings = new Settings();
      settings.setAdminName("admin");
      settings.setAdminPassword(new BCryptPasswordEncoder().encode("admin"));
      settings.setEditStaticContent(false);
      settings.setWebsiteDescription(
          "This free online video tutorial in English on YouTube is a collection of Java video tutorials.");
      settings.setWebsiteUrl("http://www.javavids.com");
      settings.setWebsiteName("JavaVids: java videos");
      settingsService.save(settings);

      // force content loading in staticContentController and settingsController,
      // because the bean could have been created before this bean and it
      // loads data initialized with InitDbService.
      staticContentController.loadAll();
      settingsController.loadSettings();
    }
  }