• SEARCH

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

      • 웨롭지않아
      • 2016.04.22 - 21:45 2016.04.22 - 13:52 160

    에바팩 판도라팩 3.63버젼을 기준으로하였으며

    테스트다해봤고 공성돌아가는거까지 확인했습니다 ㅎ

    기존소스와달라진점은 캐슬테이블에 성만 추가하면 공성타이머부분은 알아서돌아줍니다.

    이전처럼 소스+디비 다수정할필요는없어졌어요 제작 : 킹덤

     

    WarTimeController.java

    아래꺼 다 복사해서 고대로 컨트롤 A 컨트롤 V

    /*
     * 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);
            System.out.println(_castle.getName()+"시작");
           }
          }else if (endtime.before(Rtime)){
           if (_castle.isNowwar()){
            EndWar(_castle);
            System.out.println(_castle.getName()+"종료");
           }
          }
      }
     }

     /**
      * 공성시간이맞다면 공성시작
      * @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);
     }
    }

    이건 l1j.server.server.model 폴더에 위치해주시면되고

    새로만드셔야되는 java파일입니다. 파일명 대소문자 꼭 똑같이하세요

    L1CastleDate.java

    package l1j.server.server.model;

    import java.util.ArrayList;
    import java.util.Calendar;

    import l1j.server.server.datatables.CastleTable;
    import l1j.server.server.templates.L1Castle;

    public class L1CastleData {
     private ArrayList<L1Castle> castlelist = new ArrayList<L1Castle>();
     
     public L1CastleData(){
      Calendar endtime;
      castlelist = CastleTable.getInstance().CastleLoad();
     }

     public ArrayList<L1Castle> CatleDate(){
      return castlelist;
     }
    }

     

     

    CastleTable.java 아래꼐 없다면 추가해주세요

    /**
      * 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;
     }

    이 게시물을..
    N
    0
    0
    • 리마스터팩 요정 소울 엠피 수정jstory
    • 0
      웨롭지않아

    웨롭지않아 님의 최근 글

    에바일팩(3.63 공성소스) 160 2016 04.22 포토샵 cs6 무설치 크랙적용 657 1 2016 04.22 이벤트용 강제 변신무기 만들기(에바일팩소스) 79 2016 04.22 마법크리이펙트(에바일팩소스) 118 2016 04.22 출첵 2016 04.21

    웨롭지않아 님의 최근 댓글

    트리플 쓰면 클라이언트가 에러 나서 꺼지네용;; 어떻게 이걸 수정해야될지;; 2016 05.19 다운 받고 싶은댕 포인트 압박이 장난 아니네요 2016 04.25 등업해야 되는걸로 알고잇어요 2016 04.21 안녕하세요~ 2016 04.20
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • 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 242
    1056
    NPC 외침 멘트 깔끔정리(by.유튜브고도리)
    유튜브고도리 2024.04.11 - 05:57 123
    1055
    디아블로 참 만들기
    유튜브고도리 2024.04.09 - 05:55 113
    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 40
    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 352
    1038
    랭커
    foqwer 2024.03.14 - 10:43 141
    1037
    인첸별
    foqwer 2024.03.14 - 10:42 106
    1036
    몬스터 앞에 레벨 넣기
    프렌치좋아 2024.03.04 - 01:40 369
    1035
    3.63 글루딘 Single 용
    블루블랙3 2024.02.28 - 23:08 410
    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 1111
    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 2088
    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