• SEARCH

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

      • 퍽퍽띠
      • 2023.03.25 - 07:04 2022.11.18 - 00:40 1215 3

    조건

     

    1. 유저 커멘드가 활성화 되어있어야 한다. (이거까지는 구현해주셔야 해요)

    2. 사용하시는 소스와 스타일에 따라 다름으로 어느정도 이해가 있으신 경우에만 사용하여 주세요.

    2.7 버전 순정 버전 기준에서 테스트 완료된 소스 입니다.

    3. 저같은 경우 고대의 강력 체력회복제로 해두었는데 변경하고 싶다면 아이템 아이디 부분만 자신의 데이터베이스에서 확인하여 고치시면 되겟죠? ㅎㅎ

    ------------------------------------------------------

    사용법

    95%미만인 경우 물약 사용 : .자동물약 켬 95

    자동물약사용 끔: .자동물약 끔

     

     

    유의점

    자동물약이 켜져있는 상태에서 물약이 모두 소진되면 소진된 메세지와 함께 소진상태로 변경

    이후 귀환하여 물약만 구매하면 바로 자동 사용처리 (리스 or 끔 이전까지 유지)

    ------------------------------------------------------

    1. UserCommands.java [사용자 명령어 처리]

    ※ 저같은 경우 cmd를 else if 문에서 switch 문으로 바꾸었습니다. 

    switch(cmd) {

      case "자동물약":

        toAutoPotion(pc, param);

        break;

    }

     

    ---------- or ------------------

     

    else if (cmd.equalsIgnoreCase("자동물약") {

      toAutoPotion(pc, param);

    }

    1-2. toAutoPotion 함수 추가 [해당 부분은 게시판의 자동물약 소스올려주신분꺼 참고 하여 수정하여 올렸습니다.]

     

    static private void toAutoPotion(L1PcInstance pc, String st) throws Exception {

    try 

    {

    String[] params = st.split("\\s"); 

    // System.out.println(Arrays.toString(params));

    switch(params[0]) {

    case "켬":

    if(params.length < 2) {

    pc.sendPackets(new S_SystemMessage("자동물약 설정한 HP %를 입력하여주세요."));

    return;

    }

    int rate = Integer.parseInt(params[1]);

    if(rate < 0 || rate > 100) {

    pc.sendPackets(new S_SystemMessage("자동물약 범위는 0~100 사이로 설정하여 주세요."));

    return;

    }

    pc.setIsAutoPotion(true);

    pc.setAutoPotionPercent(rate);

    pc.sendPackets(new S_SystemMessage("현재 HP가 " + params[1] + "% 이하이면 고대의 강력 체력 회복제를 자동으로 사용합니다."));

    break;

    case "끔":

    pc.setIsAutoPotion(false);

    pc.setAutoPotionPercent(0);

    pc.sendPackets(new S_SystemMessage("자동물약을 비활성화 합니다."));

    break;

    default:

    pc.sendPackets(new S_SystemMessage(".자동물약 [켬/끔] [0~100] ex: .자동물약 켬 95, .자동물약 끔"));

    break;

    }

     

    }

    catch(Exception ex) {

    pc.sendPackets(new S_SystemMessage(".자동물약 [켬/끔] [0~100] ex: .자동물약 켬 95, .자동물약 끔"));

    }

    }

     

     

    ☆ 여기까지 오셨다면  pc.setIsAutoPotion, pc.setAutoPotionPercent 두가지 함수가 오류가 나있을텐데 해당 부분을 추가하도록 합니다. 

    2. L1PcInstance.java 수정

    private boolean _isAutoPostion; //현재 케릭터의 자동포션 설정상태 true : 켬, false: 끔

    public boolean getIsAutoPotion() {

    return this._isAutoPostion;

    }

    public void setIsAutoPotion(boolean isAutoPostion) {

    this._isAutoPostion = isAutoPostion;

    }

     

    private int _autoPotionPercent; //현재 케릭터의 자동포션 기준 잔량(몇%미만일때 실행할지)

    public int AutoPotionPercent() {

    return this._autoPotionPercent;

    }

    public void setAutoPotionPercent(int autoPotionPercent) {

    this._autoPotionPercent = autoPotionPercent;

    }

     

    private boolean _postionChecker; // 포션을 가지고 있는지?

    public boolean postionChecker() {

    return this._postionChecker;

    }

    public void setPostionChecker(boolean postionChecker) {

    if(_postionChecker && !postionChecker) {

    // True에서 False로 변경시 에러 메세지 출력

    sendPackets(new S_SystemMessage("고대의 강력 체력 회복제가 모두 소진되었습니다."));

    }

    this._postionChecker = postionChecker;

    }

     

     

    ★ 자 이제 여기까지 설정이되었다면 기본적인 설정이 모두 완료 되었습니다. 

    -> 이제 매초당 실행을 해야하겟죠? 하지만 우리 2.7에는 매초마다 실행시키는 부분이 없습니다... 마땅한게 없어서 찾아보려다가 앞으로 기능추가를 위해 파일을 생성합니다. 

    ~~.server.server 패키지에 클래스 추가

    3. CharacterTimeController.java

     

    package l1j.server.server;

     

    import static l1j.server.server.model.skill.L1SkillId.ABSOLUTE_BARRIER;

    import static l1j.server.server.model.skill.L1SkillId.POLLUTE_WATER;

     

    import java.sql.Timestamp;

    import java.util.Map;

    import java.util.Random;

    import java.util.concurrent.ConcurrentHashMap;

    import java.util.logging.Logger;

     

    import l1j.server.server.model.L1ItemDelay;

    import l1j.server.server.model.L1PcInventory;

    import l1j.server.server.model.L1World;

    import l1j.server.server.model.Instance.L1ItemInstance;

    import l1j.server.server.model.Instance.L1PcInstance;

    import l1j.server.server.serverpackets.S_ServerMessage;

    import l1j.server.server.serverpackets.S_SkillSound;

    import l1j.server.server.serverpackets.S_SystemMessage;

     

    public class CharacterTimeController implements Runnable{

    private static Logger _log = Logger.getLogger(CharacterTimeController.class.getName());

     

    private static CharacterTimeController _instance;

    private static Random _random = new Random();

     

    public static CharacterTimeController getInstance() {

    if (_instance == null) {

    _instance = new CharacterTimeController();

    }

    return _instance;

    }

     

    @Override

    public void run() {

    try {

    while (true) {

    autoPostionChecker(); // 자동 포션기능 체크

    Thread.sleep(1000); //1 초당 설정

    }

    } catch (Exception e1) {

    System.out.println(CharacterTimeController.class.getName() + " [Error] " + e1.getMessage());

    }

    }

     

     

    private static void autoPostionChecker() {

    try {

    for (L1PcInstance pc : L1World.getInstance().getAllPlayers()) {

    boolean isStorePostion = pc.getInventory().checkItem(40024); //고대의 강력 체력 회복제(40024) 체크

    pc.setPostionChecker(isStorePostion);

    // System.out.println(pc.getAccountName() + " 자동물약: " + pc.getIsAutoPotion() + pc.AutoPotionPercent() + isStorePostion);

     

    // 죽은 상태면 포션을 먹지 않는다.

    if(pc.isDead()) {

    return;

    }

    if (pc.isTeleport()) { // 텔레포트 처리중

    return;

    }

    // 오토포션이 설정안되어 있다면 종료한다.

    if(!pc.getIsAutoPotion()) {

    return;

    }

     

    float nowHPPercent = ((float)pc.getCurrentHp() / (float)pc.getMaxHp()) * 100;

    float rate = pc.AutoPotionPercent();

    // System.out.println(pc.getName() + "HP [ " + nowHPPercent + " / " + rate  + " ]");

    if(pc.getIsAutoPotion()) { // 자동포션이 설정된 유저만 동작  

    if(pc.postionChecker()) { // 포션이 존재하는 경우에만 로직을 동작

    if(nowHPPercent < rate) {

    L1ItemInstance autoPostionItem = pc.getInventory().findItemId(40024); // 아이템 아이디

    // System.out.println(autoPostionItem);

    if(autoPostionItem != null) {

    UseHeallingPotion(pc, 55, 197);

    pc.getInventory().removeItem(autoPostionItem, 1);

    pc.saveInventory();  

    L1ItemDelay.onItemUse(pc.getNetConnection(), autoPostionItem); // 아이템 지연 개시  

    }

    }

    }  

    }  

    }  

    }

    catch(Exception e) {

    System.out.println("CTimeController-autoPostionChecker [Error] : " + e.getMessage());

    }

     

    }

     

    private static void UseHeallingPotion(L1PcInstance pc, int healHp, int gfxid) {

    if (pc.hasSkillEffect(71) == true) { // 디케이포션 상태

    pc.sendPackets(new S_ServerMessage(698)); // 마력에 의해 아무것도 마실 수가 없습니다.

    return;

    }

    // 아브소르트바리아의 해제

    cancelAbsoluteBarrier(pc);

     

    pc.sendPackets(new S_SkillSound(pc.getId(), gfxid));

    pc.broadcastPacket(new S_SkillSound(pc.getId(), gfxid));

    pc.sendPackets(new S_ServerMessage(77)); // \f1기분이 좋아졌습니다.

    healHp *= (_random.nextGaussian() / 5.0D) + 1.0D;

    if (pc.hasSkillEffect(POLLUTE_WATER)) { // 포르트워타중은 회복량1/2배

    healHp /= 2;

    }

    pc.setCurrentHp(pc.getCurrentHp() + healHp);  

    }

     

    private static void cancelAbsoluteBarrier(L1PcInstance pc) { // 아브소르트바리아의 해제

    if (pc.hasSkillEffect(ABSOLUTE_BARRIER)) {

    pc.killSkillEffectTimer(ABSOLUTE_BARRIER);

    pc.startHpRegeneration();

    pc.startMpRegeneration();

    pc.startMpRegenerationByDoll();

    }

    }

    }

     

    ※ 아직 고칠께 많지만..  이제 마지막 설정

    4. GameServer.java 두줄 추가!

    ※ 프리미엄타임컨트롤이 있다면 그 아래 선언 해주시면 좋을꺼 같아요!

     

    CharacterTimeController characterTimeController = CharacterTimeController.getInstance();

    GeneralThreadPool.getInstance().execute(characterTimeController);

     

     

    기본적인 구현만 된 상태이며 아직 예외나 많은 테스트가 부족합니다. 

    그냥 복사 붙여넣기식 구현보다는 각각의 함수가 무엇을 뜻하며 파일이 뭘뜻하는지 이해를 하시고 사용하셔야 더욱더 재미있게 즐길수 있을듯합니다!

    이 게시물을..
    N
    0
    0
    • 전사팩 로봇가능노력하자
    • 2.0 자동칼질소스 (클래스 파일에서 빼왔습니다)drumlinek
    • 2
      퍽퍽띠

    퍽퍽띠 님의 최근 글

    2.7 자동 물약 소스 1215 3 2022 11.18 2.7 서버팩 460 3 2022 11.15

    퍽퍽띠 님의 최근 댓글

    와.. 감사합니다.. ㅎㅎㅎㅎ 2022 11.16 확인했습니다아! 2022 11.15
    글쓴이의 서명작성글 감추기 

    댓글3

    • 0
      해골이다
      2022.11.19 - 10:45 2022.11.19 - 10:39 #12237656

      좋은 정보 감사합니다

    • 0
      Heliodi
      2023.01.10 - 11:02 #12360477

      좋은 정보 

    • 0
      마이다스
      2023.03.25 - 07:04 #12571678

      와 능력자시군요 따봉~!

    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • 전사팩 로봇가능
    • 2.0 자동칼질소스 (클래스 파일에서 빼왔습니다)
    • 목록
      view_headline
    3
    × 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 2283
    1026
    대미지 발동시 범위 질문드립니다
    나잇따나읻따 2023.05.21 - 22:26 292
    1025
    리니지 리마스터 몹 스폰수 어디서 줄일 수 있나요?
    001001 2023.04.25 - 16:06 727
    1024
    전사팩 로봇가능
    노력하자 2023.03.16 - 19:14 1111
    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