• SEARCH

    통합검색
  • GAMEZONE
    • 커뮤니티
      • 공지사항
      • 유저게시판
        • 등업게시판
        • 출석체크
        • 정회원 무료자료실
      • 스크린샷
      • 인증자료실
    • 리니지
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 메이플스토리
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 바람의나라
      • 자유게시판
      • 홍보게시판
      • 자료게시판
        • 유틸자료실
        • 소스자료실
        • 클라이언트
        • 팩 자료실
      • 연구게시판
        • 개발내역
        • 질문과답변
        • 기타
      • 강의게시판
        • DR
        • CR
        • 구버전
        • 클라이언트 개조
        • 노하우 게시판
        • 게임공략 & 팁
    • 다크에덴
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 믹스마스터
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 라그나로크
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 기타게임
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 게임강의
    • 비베&포토샵
      • 자유게시판
      • 자료실
        • 일반자료실
        • 포인트 자료실
      • 노하우게시판
      • 포토샵게시판
    • 모바일
      • 게임공략
      • 포인트 자료실
      • 유틸자료실
      • 자유게시판
  • 리니지 소스자료실
    • 리니지 소스자료실 ()
    • 공성소스 정리 (수정

      • 준희미니
      • 2016.06.29 - 12:38 182

     

    /**

    * Castle Table ArrayList형식으로 넘겨준다

    * @return ArrayList<L1Castle>

    */

    public ArrayList<L1Castle> CastleLoad(){

    Connection con = null;

    PreparedStatement pstm = null;

    ResultSet rs = null;

    ArrayList<L1Castle> castlelist = new ArrayList<L1Castle>();

    L1Castle _castle = null;

    try{

    con = L1DatabaseFactory.getInstance().getConnection();

    pstm = con

    .prepareStatement("Select * from castle");

    rs = pstm.executeQuery();

    while(rs.next()){

    _castle = new L1Castle(rs.getInt(1),rs.getString(2));

    _castle.setWarTime(timestampToCalendar((Timestamp) rs

    .getObject(3)));

    _castle.setTaxRate(rs.getInt(4));

    _castle.setPublicMoney(rs.getInt(5));

    _castle.setPublicReadyMoney(rs.getInt(6));

    _castle.setShowMoney(rs.getInt(7));

    _castle.setWarBaseTime(rs.getInt(8));

    _castle.setCastleSecurity(rs.getInt(9));

    castlelist.add(_castle);

    }

    }catch(Exception e){

    e.printStackTrace();

    }finally{

    SQLUtil.close(pstm);

    SQLUtil.close(con);

    SQLUtil.close(rs);

    }

    return castlelist;

    }

     

    L1Castle.java

     

    private boolean nowwar = false;

    public boolean isNowwar() {

    return nowwar;

    }

     

    public void setNowwar(boolean nowwar) {

    this.nowwar = nowwar;

     

    }

     

    나머진 파일로올렸으나 소스한번 보시라고 올릴께요

     

    L1CastleDate.java는 l1j.server.server.model 에 넣어주시고

     

    WarTimeController 는 기존꺼랑 교체하시면됩니다.

     

     

    WarTimeController.java //에러가있엇나보네요 담미님꺼적용후 다시올려요

     

    /*
     * This program is free software; you can redistribute it and/or modify
     * it under the terms of the GNU General Public License as published by
     * the Free Software Foundation; either version 2, or (at your option)
     * any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU General Public License for more details.
     *
     * You should have received a copy of the GNU General Public License
     * along with this program; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
     * 02111-1307, USA.
     *
     *
    http://www.gnu.org/copyleft/gpl.html
     */
    package l1j.server.server.TimeController;

    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;

    import l1j.server.Config;
    import l1j.server.server.datatables.CastleTable;
    import l1j.server.server.datatables.CharacterTable;
    import l1j.server.server.datatables.DoorSpawnTable;
    import l1j.server.server.model.L1CastleLocation;
    import l1j.server.server.model.L1Clan;
    import l1j.server.server.model.L1Object;
    import l1j.server.server.model.L1Teleport;
    import l1j.server.server.model.L1War;
    import l1j.server.server.model.L1WarSpawn;
    import l1j.server.server.model.L1World;
    import l1j.server.server.model.L1CastleData;
    import l1j.server.server.model.Instance.L1CrownInstance;
    import l1j.server.server.model.Instance.L1DoorInstance;
    import l1j.server.server.model.Instance.L1FieldObjectInstance;
    import l1j.server.server.model.Instance.L1PcInstance;
    import l1j.server.server.model.Instance.L1TowerInstance;
    import l1j.server.server.model.gametime.RealTimeClock;
    import l1j.server.server.serverpackets.S_PacketBox;
    import l1j.server.server.templates.L1Castle;

    public class WarTimeController implements Runnable {
     private static WarTimeController _instance;

     private L1Castle _l1castle = null;

     private int ALT_WAR_TIME_UNIT = Config.ALT_WAR_TIME_UNIT;


      private int ALT_WAR_TIME = Config.ALT_WAR_TIME;


      private int ALT_WAR_INTERVAL_UNIT = Config.ALT_WAR_INTERVAL_UNIT;
     
      private int ALT_WAR_INTERVAL = Config.ALT_WAR_INTERVAL;

     private ArrayList<L1Castle> castlelist = new ArrayList<L1Castle>();

     private ArrayList<L1Castle> Waringcastlelist = new ArrayList<L1Castle>();

     private WarTimeController() {
      L1CastleData CD = new L1CastleData();
      castlelist = CD.CatleDate();  //성리스트를 넣는다.
     }
     /**
      * Run()
      */
     public void run() {
      try {
       while (true) {
        try {
         checkWarTime(); // 전쟁 시간을 체크
         Thread.sleep(1000);
        } catch (Exception e) {
        }
       }
      } catch (Exception e1) {
      }
     }
     /**
      * 싱글톤 패턴
      * @return _instance
      */
     public static WarTimeController getInstance() {
      if (_instance == null) {
       _instance = new WarTimeController();
      }
      return _instance;
     }
     /**
      * 테이블및 castle정보 reLoad
      */
     public void reload() {
      L1CastleData CD = new L1CastleData();
      castlelist = CD.CatleDate();  //성리스트를 넣는다.
     }
     /**
      *  해당성의 공성시간을 변경하고 공지한다.
      * @param name 성이름
      * @param cal 시간
      */
     public void setWarStartTime(String name, Calendar cal) {
      Calendar endtime;
      if (name == null) {
       return;
      }
      if (name.length() == 0) {
       return;
      } 
      int index =0;
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
      for (L1Castle castle : castlelist) {
       if (castle.getName().startsWith(name)) {
        index = castlelist.indexOf(castle);
        castle.setWarTime(cal);
         endtime = (Calendar) castle.getWarTime().clone();
         endtime.add(ALT_WAR_TIME_UNIT,ALT_WAR_TIME);
        castlelist.set(index,castle);
        // 모든 유저에게 공성시간 알리기
        L1World.getInstance().broadcastServerMessage(String.format("%s공성시간: %s ~ %s", castle.getName(), formatter.format(castle.getWarTime()), formatter.format(endtime)));
       }
      }
     }

     /**
      * void 공성시간체크
      */
     private void checkWarTime() {
      Calendar Rtime = RealTimeClock.getInstance().getRealTimeCalendar();
      Calendar endtime;
      int index = 0;
      for(L1Castle _castle : castlelist){
       index = castlelist.indexOf(_castle);
        endtime = (Calendar) _castle.getWarTime().clone();
          endtime.add(ALT_WAR_TIME_UNIT,ALT_WAR_TIME);


          if(_castle.getWarTime().before(Rtime) && endtime.after(Rtime)){
           if (!_castle.isNowwar()){
            _castle.setNowwar(true);
            castlelist.set(index,_castle);
            StartWar(_castle);
           }
          }else if (endtime.before(Rtime)){
           if (_castle.isNowwar()){
            EndWar(_castle);
           }
          }
      }
     }

     /**
      * 공성시간이맞다면 공성시작
      * @param _castle2 castlelist의 index
      */
     private void StartWar(L1Castle _castle){
      L1WarSpawn warspawn = null;
      warspawn = new L1WarSpawn();
      warspawn.SpawnFlag(_castle.getId());
      // 성문을 수리해 닫는다
      for (L1DoorInstance door : DoorSpawnTable.getInstance()
        .getDoorList()) {
       if (L1CastleLocation.checkInWarArea(_castle.getId(), door)) {
        door.setAutoStatus(0);// 자동수리를 해제
        door.repairGate();
       }
      }
      if (_castle.getCastleSecurity() == 1){
       securityStart(_castle);// 치안관리
      }
       for (L1War war : L1World.getInstance().getWarList()) {
           if (war == null) {
            continue;
           }
           for (String attackClan : war.GetAttackClanList()) {
            war.CeaseWar(attackClan, war.GetDefenceClanName());
           }
          }
      L1World.getInstance().broadcastPacketToAll(new S_PacketBox(S_PacketBox.MSG_WAR_BEGIN, _castle.getId())); // %s의
      // 공성전이
      // 시작되었습니다.
      L1World.getInstance().broadcastPacketToAll(new S_PacketBox(S_PacketBox.GREEN_MESSAGE,"공성전이 시작되었습니다~~!!! "));
      int[] loc = new int[3];
      L1Clan clan = null;
      for (L1PcInstance pc : L1World.getInstance()
        .getAllPlayers()) {
       int castleId = _castle.getId();
       if (L1CastleLocation.checkInWarArea(castleId, pc)
         && !pc.isGm()) {
        clan = L1World.getInstance().getClan(
          pc.getClanname());
        if (clan != null) {
         if (clan.getCastleId() == castleId) {
          continue;
         }
        }
        loc = L1CastleLocation.getGetBackLoc(castleId);
        L1Teleport.teleport(pc, loc[0], loc[1],
          (short) loc[2], 5, true);
       }
      }
     }

     /**
      * 공성시간이 지났다면 공성종료
      * @param _castle2 castlelist의 index
      */
     private void EndWar(L1Castle _castle){
      _castle.setNowwar(false);
      L1World.getInstance().broadcastPacketToAll(
        new S_PacketBox(S_PacketBox.MSG_WAR_END, _castle.getId())); // %s의
      // 공성전이
      // 종료했습니다.
       _castle.getWarTime().add(ALT_WAR_INTERVAL_UNIT, ALT_WAR_INTERVAL);
      _castle.setTaxRate(10); // 세율10프로
      CastleTable.getInstance().updateCastle(_castle);
      castlelist.set(_castle.getId(), _castle); // 저장
      WarParkClear(_castle.getId());
     }
     /**
      * 공성존 정리 (깃발,왕관,수호탑수리등등)
      * @param castleNum castleID
      */
     private void WarParkClear(int castleNum){
      L1WarSpawn warspawn = null;
      int castle_id = castleNum;
      L1FieldObjectInstance flag = null;
      L1CrownInstance crown = null;
      L1TowerInstance tower = null;


      for (L1Object l1object : L1World.getInstance().getObject()) {
       // 전쟁 에리어내의 기를 지운다
       if (l1object instanceof L1FieldObjectInstance) {
        flag = (L1FieldObjectInstance) l1object;
        if (L1CastleLocation
          .checkInWarArea(castle_id, flag)) {
         flag.deleteMe();
        }
       }
       // 크라운이 있는 경우는, 크라운을 지워 타워를 spawn 한다
       if (l1object instanceof L1CrownInstance) {
        crown = (L1CrownInstance) l1object;
        if (L1CastleLocation.checkInWarArea(castle_id,
          crown)) {
         crown.deleteMe();
        }
       }
       if (l1object instanceof L1TowerInstance) {
        tower = (L1TowerInstance) l1object;
        if (L1CastleLocation.checkInWarArea(castle_id,
          tower)) {
         tower.deleteMe();
        }
       }
      }
      warspawn = new L1WarSpawn();
      warspawn.SpawnTower(castle_id);
      for (L1DoorInstance door : DoorSpawnTable.getInstance()
        .getDoorList()) {
       if (L1CastleLocation.checkInWarArea(castle_id, door)) {
        door.repairGate();
       }
      }
     }

     // 공성종료
     public void stopWar(String name) {
      if (name == null) {
       return;
      }
      if (name.length() == 0) {
       return;
      }
      int index = 0;
      for(L1Castle _castle : castlelist){
       if (_castle.getName().startsWith(name)) {
        _castle.setNowwar(false);
        index = castlelist.indexOf(_castle);
        L1World.getInstance().broadcastPacketToAll(
          new S_PacketBox(S_PacketBox.MSG_WAR_END, _castle.getId())); // %s의
        // 공성전이
        // 종료했습니다.
         _castle.getWarTime().add(ALT_WAR_INTERVAL_UNIT, ALT_WAR_INTERVAL);

        _castle.setTaxRate(10); // 세율10프로
        CastleTable.getInstance().updateCastle(_castle);
        castlelist.set(index, _castle); // 저장
        WarParkClear(_castle.getId());
       }
      }
     }
     /**
      * 현재 공성중인성인지
      * @param castlenum Castle ID
      * @return == ID ? True : false
      */
     public boolean isNowWar(int castlenum) {
      for(L1Castle _castle : castlelist){
       if(_castle.getId() ==castlenum){
        if(_castle.isNowwar()){
         return true;
        }
       }
      }
      return false;
     }
     /**
      * 해당유저에게 공성중인 성을 알려주는 메세지
      * @param player 넘어오는 player
      */
     public void checkCastleWar(L1PcInstance player) {
      for(L1Castle _castle : castlelist){
       if (_castle.isNowwar()) {
        player.sendPackets(new S_PacketBox(S_PacketBox.MSG_WAR_GOING,_castle.getId())); // %s의 공성전이 진행중입니다.
        // L1World.getInstance().broadcastPacketToAll(new S_PacketBox(S_PacketBox.GREEN_MESSAGE,"공성전이 진행중입니다. "));
       }
      }
     }
     //공성종료
     private void securityStart(L1Castle castle) {
      int castleId = castle.getId();
      int a = 0, b = 0, c = 0, d = 0, e = 0;
      int[] loc = new int[3];
      L1Clan clan = null;

      switch (castleId) {
      case 1:
      case 2:
      case 3:
      case 4:
       a = 52;
       b = 248;
       c = 249;
       d = 250;
       e = 251;
       break;
      case 5:
      case 6:
      case 7:
      default:
       break;
      }

      for (L1PcInstance pc : L1World.getInstance().getAllPlayers()) {
       if ((pc.getMapId() == a || pc.getMapId() == b || pc.getMapId() == c
         || pc.getMapId() == d || pc.getMapId() == e)
         && !pc.isGm()) {
        clan = L1World.getInstance().getClan(pc.getClanname());
        if (clan != null) {
         if (clan.getCastleId() == castleId) {
          continue;
         }
        }
        loc = L1CastleLocation.getGetBackLoc(castleId);
        L1Teleport
        .teleport(pc, loc[0], loc[1], (short) loc[2], 5, true);
       }
      }
      castle.setCastleSecurity(0);
      CastleTable.getInstance().updateCastle(castle);
      CharacterTable.getInstance().updateLoc(castleId, a, b, c, d, e);
     }
    }

     

    L1CastleData.java

     

    public class L1CastleData {

    private ArrayList<L1Castle> castlelist = new ArrayList<L1Castle>();

     

    public L1CastleData(){

     

    castlelist = CastleTable.getInstance().CastleLoad();

    }

     

    public ArrayList<L1Castle> CatleDate(){

    return castlelist;

    }

     

    }

     
    달라진점이있다면
     
    기존의 공성소스는
     
    성이갯수가 배열크기에맞게 소스상에서 정의되어있습니다.
     
    private L1Castle[] _l1castle = new L1Castle[8];
     
    private Calendar[] _war_start_time = new Calendar[8];
     
    private Calendar[] _war_end_time = new Calendar[8];
     
    private boolean[] _is_now_war = new boolean[8];
     
    이렇게말이죠
     
    자 리니지라는게임이 얼마나갈지모르지만 성이하나늘어날수도있고 신대륙이나오고 성이 새로 나올수도있는데
     
    이부분에서 이렇게제한을 해버리면 성은 8개밖에못쓰는겁니다. 고수분들은 저부분이 성갯수인걸아니 늘려주겟지만
     
    초보들은 못하시겠죠 그래서 그제한을 ArrayList를 사용함으로써 풀어두었습니다. 
     
    이제얼마든지 castle 테이블에 성만추가하시면 공성도작동할겁니다. 일단 호환성을 늘린거죠.
     
    그리고 쓸때없이 for문안에서 int문이라던지 객체생성해대던 비효율코딩 수정했구요.
     
    쓸떄없이 2번 3번 길게 날코딩되던 깃발 왕관 삭제 수호탑소스를 메소드하나로 묶었습니다.
     
    그리고 원활한 사용을위해 주석달아둔거밖에없네요 ㅎㅎ 
     
    회사에서 시간이남아돌아서 ㅎㅎ
     
    앞으로남는시간마다 팩구조적으로 비효율적이던걸 뜯어고칠계획이에요 
     
    일단 이소스자체는 테스트할상황은없어서 제가최대한 머리속에서 디코딩돌리면서 짠거라 테스트한번은해보셔야될겁니다.
     
    문제있으시면 댓글로적어주시고 바로바로답변해드립니다. 
     
     
    이 작성자의 게시글 더보기
     

    [출처] 공성소스 정리 (수정) (비공개 카페)

    이 게시물을..
    N
    0
    0
    • 리마스터팩 요정 소울 엠피 수정jstory
    • 0
      준희미니

    준희미니 님의 최근 글

    로한구축성공 283 1 2021 06.14 에오스 구축성공 356 2 2021 04.01 [에바] 나비켓 테이블 관련 설명 747 1 2016 07.29 에바소스인데 오픈대기 켜고 끄는 소스에요~ 70 2016 07.29 퍼플채팅 색(진보라채팅) 59 2016 07.29

    준희미니 님의 최근 댓글

    rt 2021 05.25 ㄳ 2021 05.11 ㄳ 2021 05.11 rt 2021 05.09 rt 2021 04.25
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • 리마스터팩 요정 소울 엠피 수정
    • 목록
      view_headline
    × CLOSE
    기본 (1,058) 제목 날짜 수정 조회 댓글 추천 비추
    분류 정렬 검색
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:14 591
    1058
    아머브레이크 데스티니 시전시 성공 확률 조정하는 소스가 있나요?
    안정환 2024.04.23 - 10:01 102
    1057
    List.spr(변신,몬스터 수정소스)개조방법
    유튜브고도리 2024.04.19 - 05:02 243
    1056
    NPC 외침 멘트 깔끔정리(by.유튜브고도리)
    유튜브고도리 2024.04.11 - 05:57 125
    1055
    디아블로 참 만들기
    유튜브고도리 2024.04.09 - 05:55 114
    1054
    리니지m 처럼 피통 늘리기,오류가 날때
    유튜브고도리 2024.04.09 - 05:18 91
    1053
    욕하면 채금 먹게 하기
    유튜브고도리 2024.04.09 - 04:59 71
    1052
    레벨에 따른 호칭 부여..?
    밤톨이11 2024.04.08 - 04:24 72
    1051
    초보자 보호 시스템
    밤톨이11 2024.04.08 - 04:21 57
    1050
    마법무기 데미지 증가
    밤톨이11 2024.04.08 - 04:19 70
    1049
    레벨 제한 맵
    밤톨이11 2024.04.08 - 04:14 65
    1048
    마법스크롤
    밤톨이11 2024.04.08 - 04:06 32
    1047
    리니지m 아지트 소유중에도 공성선포하기
    유튜브고도리 2024.04.07 - 21:37 41
    1046
    리니지m 마법인형이 마법을 쓰네?
    유튜브고도리 2024.04.07 - 21:36 61
    1045
    드래곤 슬레이어 각반(장비추가소스)
    유튜브고도리 2024.04.07 - 19:08 51
    1044
    린엠 게렝 변신 카드 만들기
    유튜브고도리 2024.04.06 - 06:06 100
    1043
    버프 물약 개별 소스 오래전 소스
    밤톨이11 2024.04.05 - 18:43 57
    1042
    일시 스텟 상승 물약
    밤톨이11 2024.04.05 - 18:42 26
    1041
    성 전환 물약
    밤톨이11 2024.04.05 - 18:37 30
    1040
    MP 물약 소스
    밤톨이11 2024.04.05 - 18:35 41
    1039
    리니지 옛날버젼..이라는데...구동가능여부 확인 부탁드립니다.
    도난차량 2024.03.24 - 04:56 354
    1038
    랭커
    foqwer 2024.03.14 - 10:43 141
    1037
    인첸별
    foqwer 2024.03.14 - 10:42 106
    1036
    몬스터 앞에 레벨 넣기
    프렌치좋아 2024.03.04 - 01:40 370
    1035
    3.63 글루딘 Single 용
    블루블랙3 2024.02.28 - 23:08 411
    1034
    Sprite file doesn`t exist 오류
    하앙비 2023.12.23 - 02:19 229
    1033
    전쟁세율 고정값 15%
    하남궁 2023.11.29 - 17:02 198
    1032
    인형합성사
    Rebecca 2023.10.09 - 22:54 337
    1031
    2.0 레벨업시 HP량 올리기
    Rebecca 2023.10.09 - 22:49 434
    1030
    전사버전 펫 만렙 변경
    Rebecca 2023.10.09 - 22:44 162
    1029
    맵 순간이동 가능 불가능지역 설정하기
    Rebecca 2023.10.09 - 22:39 237
    1028
    트레져박스 업로드입니다.
    린컴충성 2023.10.07 - 04:46 182
    1027
    리마스터 접속기 소스자료
    홍자놀기 2023.09.08 - 05:41 2284
    1026
    대미지 발동시 범위 질문드립니다
    나잇따나읻따 2023.05.21 - 22:26 292
    1025
    리니지 리마스터 몹 스폰수 어디서 줄일 수 있나요?
    001001 2023.04.25 - 16:06 727
    1024
    전사팩 로봇가능
    노력하자 2023.03.16 - 19:14 1113
    1023
    2.7 자동 물약 소스
    퍽퍽띠 2022.11.18 - 00:40 1215
    1022
    2.0 자동칼질소스 (클래스 파일에서 빼왔습니다)
    drumlinek 2022.11.06 - 05:20 929
    1021
    npc가 인겜에서 채팅으로 말하기
    하늘마음 2022.10.06 - 10:04 320
    1020
    유저 아이피보는 소스
    캐빈N.01 2020.12.15 - 21:34 639
    1019
    인공지능
    캐빈N.01 2020.12.15 - 21:27 1125
    1018
    아데나가 19억이 되면 자동으로 1억으로 금괴로 바꾸기
    강우리 2020.12.12 - 01:48 995
    1017
    린올기반 휘장 각반 견갑 장비인식 안되는거 수정함
    신화서버 2020.11.17 - 01:48 295
    1016
    방어구 인챈트별 피 증가 소스
    LGTwins 2020.09.12 - 05:52 688
    1015
    장신구 옵션 변경
    LGTwins 2020.08.31 - 07:00 751
    1014
    자동물약
    legena 2020.07.05 - 02:30 2089
    1013
    리마스터팩 스냅퍼 개방 레벨설정 본섭화 수정(몽양님 요청)
    jstory 2020.06.13 - 07:22 764
    1012
    리마스터팩 룬마력제거 검사 적용안대는 부분 수정
    jstory 2020.06.10 - 04:05 286
    1011
    리마스터팩 쓸모없는 아이템 활용
    jstory 2020.06.10 - 04:01 731
    1010
    리마스터팩 요정 소울 엠피 수정
    jstory 2020.06.10 - 03:54 459
    1009
    리마스터팩 자동공지시간에 버프주기
    jstory 2020.06.10 - 03:15 404
    • 1 2 3 4 5 6 7 8 9 10 .. 22
    • / 22 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay