Project/LOATODO

[LOATODO] 로스트아크 오픈 API - 소나벨 vs 하누마탄 비교

마볼링 2022. 12. 28. 19:43

1. 서론

찬란한 명예의 돌파석 가격이 감소하면서
경이로운 명예의 돌파석 가격과 비슷해짐에 따라
소나벨과 하누마탄의 수익이 어느정도 비슷할 꺼같아서 비교를 해보았다.

각각 2수당 얻는 재료의 평균은 유튜브 영상을 참고하였다.

 

 

2. 개발

2 - 1. DTO

소나벨, 하누마탄 데이터를 각각 저장할 DTO를 만들었다.

@Data
public class SuppressionDto {
   private String nameData1;
   private Double countData1;
   private Double priceData1;
   private Double totalData1;

   private String nameData2;
   private Double countData2;
   private Double priceData2;
   private Double totalData2;

   private String nameData3;
   private Double countData3;
   private Double priceData3;
   private Double totalData3;

   private Double totalPrice;


   public Double getPriceData1() {
      return Math.round(priceData1)*100.0/100.0;
   }

   public Double getTotalData1() {
      return Math.round(totalData1)*100.0/100.0;
   }

   public Double getPriceData2() {
      return Math.round(priceData2)*100.0/100.0;
   }

   public Double getTotalData2() {
      return Math.round(totalData2)*100.0/100.0;
   }


   public Double getPriceData3() {
      return Math.round(priceData3)*100.0/100.0;
   }

   public Double getTotalData3() {
      return Math.round(totalData3)*100.0/100.0;
   }

   public Double getTotalPrice() {
      return Math.round(totalPrice)*100.0/100.0;
   }
}

 

가격을 출력할 때 소수점 첫째자리까지 출력되도록 get메소드를 수정하였다.

2 - 2. 가디언 토벌 비교를 위한 RestApi

@Controller
@RequiredArgsConstructor
@Slf4j
public class SuppressionController {

   private final MarketApiService marketApiService;
   private final SuppressionService suppressionService;

   @GetMapping("/api/suppression")
   public String CallSuppression(Model model) {
      JSONArray data = marketApiService.CallMarketCategories(50000);
      SuppressionDto sonavel = suppressionService.GetSonavel(data);
      SuppressionDto hanumatan = suppressionService.Gethanumatan(data);
      double distance = sonavel.getTotalData1()+sonavel.getTotalData3()-hanumatan.getTotalData1()-hanumatan.getTotalData3();
      model.addAttribute("sonavel", sonavel);
      model.addAttribute("hanumatan", hanumatan);
      model.addAttribute("distance", distance);
      return "suppression";
   }
}

 

앞서 만든 거래소 데이터 불러오기를 이용해 제련재료 데이터를 가져오고
소나벨과 하누마탄 데이터에 저장한다.

또한 (나는) 재료를 판매를 할 때 파괴강석과 돌파석 위주로 판매하므로
차이를 비교할 때 수호강석은 제외하였다 (distance 변수)

 

2 - 3. 각각의 데이터 생성

소나벨 - 정제된 파괴강석, 정제된 수호강석, 찬란한 명예의 돌파석

public SuppressionDto GetSonavel(JSONArray data) {
   SuppressionDto dto = new SuppressionDto();
   for(int i =0; i<data.size(); i++) {
      JSONObject temp = (JSONObject) data.get(i);
      if(temp.get("Name").toString().equals("정제된 파괴강석")) {
         double count = 3.34;
         double RecentPrice = Double.parseDouble(temp.get("RecentPrice").toString());
         dto.setNameData1("정제된 파괴강석");
         dto.setCountData1(count*10);
         dto.setPriceData1(RecentPrice);
         dto.setTotalData1(count*RecentPrice);
      }
      if(temp.get("Name").toString().equals("정제된 수호강석")) {
         double count = 10.0;
         double RecentPrice = Double.parseDouble(temp.get("RecentPrice").toString());
         dto.setNameData2("정제된 수호강석");
         dto.setCountData2(count*10);
         dto.setPriceData2(RecentPrice);
         dto.setTotalData2(count*RecentPrice);
      }
      if(temp.get("Name").toString().equals("찬란한 명예의 돌파석")) {
         double count = 4.0;
         double RecentPrice = Double.parseDouble(temp.get("RecentPrice").toString());
         dto.setNameData3("찬란한 명예의 돌파석");
         dto.setCountData3(count);
         dto.setPriceData3(RecentPrice);
         dto.setTotalData3(count*RecentPrice);
      }
   }
   dto.setTotalPrice(dto.getTotalData1()+dto.getTotalData2()+dto.getTotalData3());
   return dto;
}

 

하누마탄 - 파괴강석, 수호강석, 경이로운 명예의 돌파석

public SuppressionDto Gethanumatan(JSONArray data) {
   SuppressionDto dto = new SuppressionDto();
   for(int i =0; i<data.size(); i++) {
      JSONObject temp = (JSONObject) data.get(i);
      if(temp.get("Name").toString().equals("파괴강석")) {
         double count = 5.15;
         double RecentPrice = Double.parseDouble(temp.get("RecentPrice").toString());
         dto.setNameData1("파괴강석");
         dto.setCountData1(count*10);
         dto.setPriceData1(RecentPrice);
         dto.setTotalData1(count*RecentPrice);
      }
      if(temp.get("Name").toString().equals("수호강석")) {
         double count = 15.25;
         double RecentPrice = Double.parseDouble(temp.get("RecentPrice").toString());
         dto.setNameData2("수호강석");
         dto.setCountData2(count*10);
         dto.setPriceData2(RecentPrice);
         dto.setTotalData2(count*RecentPrice);
      }
      if(temp.get("Name").toString().equals("경이로운 명예의 돌파석")) {
         double count = 7.0;
         double RecentPrice = Double.parseDouble(temp.get("RecentPrice").toString());
         dto.setNameData3("경이로운 명예의 돌파석");
         dto.setCountData3(count);
         dto.setPriceData3(RecentPrice);
         dto.setTotalData3(count*RecentPrice);
      }
   }
   dto.setTotalPrice(dto.getTotalData1()+dto.getTotalData2()+dto.getTotalData3());
   return dto;
}

 

2 - 4. 결과

 

 

3. 정리 및 후기

  • 2수로 비교하면 소나벨과 하누마탄을 돌았을 때 차이는 134골드이다
  • 휴게 쌓아서 돌면 268골드?
  • 이러면 하누마탄 딜찍으로 도는게 낫지않나...?
  • 또, 시간이 지나면서 가격차이는 더 줄어들지 않을까...