범위 스턴 들어가게 하기

홈 > 서버존 > 개발 팁/정보
개발 팁/정보

범위 스턴 들어가게 하기

★대장★김춘배
전과 0범 |  가입날짜 2019-07-14  |    
0 475 0 0
L1Skillid.java
L1SkillUse.java
L1SkillTimer.java
L1Magic.java
 
제가 추가한부분이 ;
L1Skillid.java
 
 public static final int MOB_SLOW_18 = 30000;   //슬로우 18번모션
 public static final int MOB_SLOW_1 = 30001;    //슬로우 1번모션
 public static final int MOB_CURSEPARALYZ_19 = 30002; //커스 19번모션
 public static final int MOB_COCA = 30003;    //코카트리스 얼리기공격
 public static final int MOB_BASILL = 30004;    //바실리스크 얼리기에볼
 public static final int MOB_RANGESTUN_19 = 30005;  //범위스턴 19번모션
 public static final int MOB_RANGESTUN_18 = 30006;  //범위스턴 18번모션 //원래 있던건데 없으시면 적당한곳에 추가를;;;
 
L1SkillUse.java
private boolean isTarget(L1Character cha) throws Exception {// 검색
.
.
.
.
if (CharPosUtil.glanceCheck(_user, cha.getX(), cha.getY()) == false
    && _skill.isThrough() == false) {
   if (!(_skill.getType() == L1Skills.TYPE_CHANGE || _skill.getType() == L1Skills.TYPE_RESTORE)) {
    _isGlanceCheckFail = true;
    return false; 
   }
  }   //이부분 밑에
if ((cha.getSkillEffectTimerSet().hasSkillEffect(SHOCK_STUN)
    || cha.getSkillEffectTimerSet().hasSkillEffect(MOB_SHOCKSTUN_30)
    || cha.getSkillEffectTimerSet().hasSkillEffect(MOB_RANGESTUN_19)
    || cha.getSkillEffectTimerSet().hasSkillEffect(MOB_RANGESTUN_18))
    && (_skillId == SHOCK_STUN 
    || _skillId == MOB_SHOCKSTUN_30 
    || _skillId == MOB_RANGESTUN_19 
    || _skillId == MOB_RANGESTUN_18)) {
   return false; 
  }//실험도중에 스턴이 연속으로들어오면 스턴아이콘이 안사라지면서 멈춰버리더군요. 이부분이 마법 중첩이안되게하는 부분인거같아 추가햇는데 중첩으로안들어오더군요. 멈추는것도 사라지고. 이게 맞나는 모르겟는데 이상없더군요..
.
.
.
.
if (cha instanceof L1PcInstance) {
   L1PcInstance pc = (L1PcInstance) cha;
   if (pc.getSkillEffectTimerSet().hasSkillEffect(ABSOLUTE_BARRIER)//검색
     ||pc.getSkillEffectTimerSet().hasSkillEffect(AVATA)) { 
    if (_skillId == CURSE_BLIND 
      || _skillId == WEAPON_BREAK
      || _skillId == DARKNESS 
      || _skillId == WEAKNESS
      || _skillId == DISEASE 
      || _skillId == FOG_OF_SLEEPING
      || _skillId == MASS_SLOW 
      || _skillId == SLOW
      || _skillId == CANCELLATION
      || _skillId == MOB_CANCELLATION
      || _skillId == SILENCE
      || _skillId == DECAY_POTION 
      || _skillId == MASS_TELEPORT
      || _skillId == DETECTION 
      || _skillId == HORROR_OF_DEATH 
      || _skillId == COUNTER_DETECTION 
      || _skillId == GUARD_BREAK
      || _skillId == ERASE_MAGIC 
      || _skillId == ENTANGLE 
      || _skillId == FEAR
      || _skillId == PHYSICAL_ENCHANT_DEX
      || _skillId == PHYSICAL_ENCHANT_STR
      || _skillId == BLESS_WEAPON 
      || _skillId == EARTH_SKIN
      || _skillId == IMMUNE_TO_HARM
      || _skillId == REMOVE_CURSE 
      || _skillId == CONFUSION
      || _skillId == MOB_SLOW_1 
      || _skillId == MOB_SLOW_18 
      || _skillId == MOB_WEAKNESS_1 
      || _skillId == MOB_DISEASE_1
      || _skillId == MOB_BASILL 
      || _skillId == MOB_SHOCKSTUN_30
      || _skillId == MOB_RANGESTUN_19 
      || _skillId == MOB_RANGESTUN_18 //이부분도 앱솔중에 사용할수없는마법인지 안먹히는마법인지 모르겟는데;; 눈치껏보니 안먹히는거같아서 추가해줌.. 아시는분 조언좀;;
      || _skillId == MOB_DISEASE_30 
      || _skillId == MOB_WINDSHACKLE_1
      || _skillId == MOB_COCA 
      || _skillId == MOB_CURSEPARALYZ_19
      || _skillId == MOB_CURSEPARALYZ_18
      || _skillId == ANTA_SKILL_1
      || _skillId == ANTA_SKILL_2
      || _skillId == ANTA_SKILL_3 // 안타라스 용언
      || _skillId == ANTA_SKILL_4
      || _skillId == ANTA_SKILL_5
      || _skillId == ANTA_SKILL_6
      || _skillId == ANTA_SKILL_7
      || _skillId == ANTA_SKILL_8
      || _skillId == ANTA_SKILL_9
      || _skillId == ANTA_SKILL_10) {
     return true;
    } else {
     return false;
    }
   }
  }
 
private void addMagicList(L1Character cha, boolean repetition) {//검색
if (_skillTime == 0) {
   _getBuffDuration = _skill.getBuffDuration() * 1000; 
   if (_skill.getBuffDuration() == 0) {
    if (_skillId == INVISIBILITY) { 
     cha.getSkillEffectTimerSet().setSkillEffect(INVISIBILITY, 0);
    }
    return;
   }
  } else {
   _getBuffDuration = _skillTime * 1000;
  }
  if (_skillId == SHOCK_STUN 
    || _skillId == MOB_SHOCKSTUN_30 // 이부분이 스턴시간과 관련있는거같아서 <<;; 스턴시간설정은 다른곳에서하지만;.
    || _skillId == MOB_RANGESTUN_19 //
    || _skillId == MOB_RANGESTUN_18 
    || _skillId == ANTA_SKILL_3
    || _skillId == ANTA_SKILL_4  
    || _skillId == ANTA_SKILL_5) {
   _getBuffDuration = _shockStunDuration;
  }
 
private void sendGrfx(boolean isSkillAction) { //검색
.
.
.
.
if (_skillId == SHOCK_STUN
     || _skillId == MOB_SHOCKSTUN_30         //Grfx이부분보니 마법이미지가저오는부분인듯해서..
     || _skillId == MOB_RANGESTUN_19 
     || _skillId == MOB_RANGESTUN_18
     || _skillId == ANTA_SKILL_3
     || _skillId == ANTA_SKILL_4
     || _skillId == ANTA_SKILL_5){  
    if (_targetList.size() == 0) {
     if (_target instanceof L1PcInstance) { // Gn.89
      L1PcInstance pc = (L1PcInstance) _target;
      pc.sendPackets(new S_SkillSound(pc.getId(), 4434));
      Broadcaster.broadcastPacket(pc, new S_SkillSound(pc.getId(), 4434));
      pc.sendPackets(new S_ServerMessage(280));
     } else if (_target instanceof L1NpcInstance) {
      Broadcaster.broadcastPacket(_target, new S_SkillSound(_target.getId(), 4434));
     }
     return;
    } else {
     if (_target instanceof L1PcInstance) {
      L1PcInstance pc = (L1PcInstance) _target;
      pc.sendPackets(new S_SkillSound(pc.getId(), 4434));
      Broadcaster.broadcastPacket(pc, new S_SkillSound(pc.getId(), 4434));
     } else if (_target instanceof L1NpcInstance) {
      Broadcaster.broadcastPacket(_target, new S_SkillSound(_target.getId(), 4434));
     }
     return;
    }
   }   
 
 private void runSkill() {
.
.
.
.
.
    case MOB_SHOCKSTUN_30:  //저같은 경우에는 몹스턴이라는게 만들어져있었는데 다른부분에 추가가안되서 CMD에러가
    case MOB_RANGESTUN_18: //났었음.. 없으신분들은 싸그리추가하셔도될듯; 적당한곳에;
    case MOB_RANGESTUN_19:{     //원래 쇼크스턴이란 좀 다른데 몬스터가 쓰는거라서 유저관련 소스다뺀듯..
     int[] stunTimeArray = { 2500, 3000, 3500, 4000, 4500, 5000 };// 이부분은 도는시간 !
     int rnd = random.nextInt(stunTimeArray.length);
     _shockStunDuration = stunTimeArray[rnd];
     L1EffectSpawn.getInstance().spawnEffect(81162, _shockStunDuration,
       cha.getX(), cha.getY(), cha.getMapId());
     if (cha instanceof L1PcInstance) {
      L1PcInstance pc = (L1PcInstance) cha;
      pc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_STUN, true));
     } else if (cha instanceof L1MonsterInstance
       || cha instanceof L1SummonInstance
       || cha instanceof L1PetInstance) {
      L1NpcInstance npc = (L1NpcInstance) cha;
      npc.setParalyzed(true);
      npc.setParalysisTime(_shockStunDuration);
     }
    }
    break;
 
L1SkillTimer.java
public static void stopSkill(L1Character cha, int skillId) {
.
.
.
.
case SHOCK_STUN:  // 검색
  case MOB_SHOCKSTUN_30: //스킬멈추는곳인듯..
  case MOB_RANGESTUN_19:
  case MOB_RANGESTUN_18:
   if (cha instanceof L1PcInstance) {
    L1PcInstance pc = (L1PcInstance) cha;
    pc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_STUN, false));
   } else if (cha instanceof L1MonsterInstance
     || cha instanceof L1SummonInstance
     || cha instanceof L1PetInstance) {
    L1NpcInstance npc = (L1NpcInstance) cha;
    npc.setParalyzed(false);
   }
   break;
 
L1Magic.java
private boolean checkZone(int skillId) {  //검색
 if (_pc != null && _targetPc != null) {
   if (CharPosUtil.getZoneType(_pc) == 1 || CharPosUtil.getZoneType(_targetPc) == 1) { 
    if (skillId == WEAPON_BREAK || skillId == SLOW
      || skillId == CURSE_PARALYZE || skillId == MANA_DRAIN
      || skillId == DARKNESS || skillId == WEAKNESS
      || skillId == DISEASE || skillId == DECAY_POTION
      || skillId == MASS_SLOW || skillId == ENTANGLE
      || skillId == ERASE_MAGIC || skillId == EARTH_BIND
      || skillId == AREA_OF_SILENCE || skillId == WIND_SHACKLE
      || skillId == STRIKER_GALE || skillId == SHOCK_STUN 
      || skillId == MOB_SHOCKSTUN_30  //확률부분위에있는부분인데;; 확실히 무슨역활인지 모르겟네요..
      || skillId == MOB_RANGESTUN_19  //있으니 추가;;
      || skillId == MOB_RANGESTUN_18
      || skillId == FOG_OF_SLEEPING || skillId == ICE_LANCE
      || skillId == FREEZING_BLIZZARD || skillId == HORROR_OF_DEATH
      || skillId == POLLUTE_WATER || skillId == FEAR
      || skillId == ELEMENTAL_FALL_DOWN || skillId == GUARD_BREAK
      || skillId == RETURN_TO_NATURE || skillId == FREEZING_BREATH
      || skillId == PHANTASM || skillId == JOY_OF_PAIN
      || skillId == CONFUSION || skillId == SILENCE) {
     return false;
    }
   }
  }
  return true;
 }
 
private int calcProbability(int skillId) {
.
.
.
case SHOCK_STUN: //검색
case MOB_SHOCKSTUN_30: //추가 확률부분,
case MOB_RANGESTUN_19: //나머지 확률은 나비켓에서 probability변경해서 쓰심될듯.
case MOB_RANGESTUN_18:   
    
   if (attackLevel == defenseLevel) {
       probability = (int)(l1skills.getProbabilityValue());
      }
      else if (attackLevel > defenseLevel) {
       probability = (int)(l1skills.getProbabilityValue() + ((attackLevel - defenseLevel) * 2.6));
      }
      else if (attackLevel < defenseLevel){
       probability = (int)(l1skills.getProbabilityValue() + ((attackLevel - defenseLevel) * 4));
      }
      if (probability < 4) {
        probability = 4;
      } else if (probability > 80) {
        probability = 80;
      } 
      break;
 
case SHOCK_STUN: //검색
case MOB_SHOCKSTUN_30:  // 내성
case MOB_RANGESTUN_19:
case MOB_RANGESTUN_18:
   if (_calcType == PC_PC || _calcType == NPC_PC) { probability -= _targetPc.getResistance().getStun(); 
   
   if (_targetPc.getSkillEffectTimerSet().hasSkillEffect(VALA_MAAN)) { // 화룡의 마안 - 스턴내성+3
       probability -= 2* _targetPc.getResistance().getStun() + 3; //빨간 2*이부분 없에시는게 낳으실듯 내성이 무척 강하더군요.
 }                                                                                  
 }
  break;
 
나비켓에 Skill테이블에서
30005 광역 스턴 11 6 15 0 0 0 1500 6 attack 3 0 0 0 40 0 0 1 0 1 5 0 64  19 4434 0 0 0 280
30006 광역 스턴2 11 6 15 0 0 0 1500 6 attack 3 0 0 0 40 0 0 1 0 1 5 0 64 19 4434 0 0 0 280
이런식으로 추가되있는데요 ; 빨간색부분이 순서대로  타입 확률 레인지 아레아 인데;
타입부분을 attack
확률부분은 동렙일때 저같은경우는 40퍼센트라서 40해논것이고 입맛에 맞게 바꾸셔도될듯;
레인지 부분은 공격범위 1칸 일때 스턴드오는데 이부분을 확실히 모르겟어서 일단 1로해둠 -1 2이상은 실험안해봄;;
아레아는 범위 5면 몬스터 중심으로 몬스터 서있는자리포함해서 위아래좌우로 5칸임  0000몹0000 이렇게됨
댓글 ()

1. 포인트 목적성 의미없는 게시글은 포인트가 회수 및 글삭제 됩니다

2. 관리자 판단하에 게시판 성격에 맞지 않는 글은 삭제 또는 이동됩니다.

포토 제목


전체채팅
채팅규정
공지사항
접속통계
채팅차단이 되는 경우(차단수위)

지나친 도배 행위 (영창)
개인 메신저,SNS,전화번호 노출 (영창)
운영진 비방 및 욕설 (영창)
타 사이트 홍보 혹은 링크 (영창)
근거없는 유언비어 (영창)
지속적인 금전요구 (영창)
사칭사기 (영창)
부모,가족욕설 및 은유적표현 (영창)
지역감정유발/기타 분란 행위 (영창)
관리자 판단하에 지나치다고 판단되는 행위 (영창)


수다왕 점수 반영

0시-6시 사이의 채팅 내역
6시-12시 사이의 채팅내역
12시-18시 사이의 채팅 내역
18시-0시 사이의 채팅 내역
수다왕은 채팅로그를 확인 후 운영진이 점수를 반영합니다.
※ 점수 반영이 되는 시각은 상이할 수 있습니다.

수다왕 벌점 기준

- 지나친 욕설 및 패드립
- 매크로를 이용한 채팅
투데이서버 돌발 이벤트!  최고관리자 02-17
2월 3회 수다왕 결과 발표  최고관리자 02-17
2월 2회 수다왕 결과 발표  최고관리자 02-10
2월 1회 수다왕 결과 발표  최고관리자 02-02
1월 게시왕 후기왕 결과 발...  최고관리자 02-01
1월 4회 수다왕 결과 발표  최고관리자 01-27
1월 3회 수다왕 결과 발표  최고관리자 01-19
1월 2회 수다왕 결과 발표  최고관리자 01-12
1월 1회 수다왕 결과 발표  최고관리자 01-05
투데이 가족 여러분 모두 새...  최고관리자 01-01
12월 게시왕 후기왕 결과 ...  최고관리자 12-31
12월 5회 수다왕 결과 발...  최고관리자 12-30
12월 4회 수다왕 발표  최고관리자 12-22
12월 3회 수다왕 결과 발...  최고관리자 12-16
12월 2회 수다왕 결과 발...  최고관리자 12-09
12월 1회 수다왕 결과 발...  최고관리자 12-02
11월 게시왕 후기왕 결과 ...  최고관리자 12-01
11월 4회 수다왕 결과 발...  최고관리자 11-25
11월 3회 수다왕 결과 발...  최고관리자 11-18
11월 2회 수다왕 결과 발...  최고관리자 11-10
11월 1회 수다왕 결과 발...  최고관리자 11-04
10월 게시왕 후기왕 결과 ...  최고관리자 10-31
10월 4회 수다왕 결과 발...  최고관리자 10-28
10월 3회 수다왕 결과 발...  최고관리자 10-20
10월 2회 수다왕 결과 발...  최고관리자 10-14
10월 1회 수다왕 결과 발...  최고관리자 10-06
텔레그램 @myfreetod...  최고관리자 09-05
사다리 게임 이용 안내  최고관리자 07-26
명예의 전당 포인트 지급안내  최고관리자 07-25
포인트 적립 및 마켓 이용  최고관리자 07-24
  • 오늘 방문자 12,181 명
  • 어제 방문자 25,598 명
  • 최대 방문자 26,002 명
  • 전체 방문자 1,904,067 명
  • 전체 게시물 119,926 개
  • 전체 댓글수 11,601 개
새댓글
새글
개발   서버열어서 왕놀이 하려는...  팡민이 02-23
자유   제가 피눈물 나게 해드릴...  팡민이 02-23
자유   노라조 - 변비  김옥지 02-22
개발   ㅋㅌ jspapa1 톡주...  서버팩구함 02-22
개발   카톡 jspapa1 톡주...  서버팩구함 02-22
자유   내가더슬프게해줄께  바로쌀년아 02-22
자유   아 촌나 슬프자나  돈히 02-22
개발   클라 정보랑 접속방법좀 ...  joy 02-22
포토   아이유  오늘어디냐... 09:20
포토   아이유  오늘어디냐... 09:19
포토   아이유  오늘어디냐... 09:19
포토   아이유  오늘어디냐... 09:19
포토   아이유  오늘어디냐... 09:19
포토   아이유  오늘어디냐... 09:18
포토   아이유  오늘어디냐... 09:18
포토   아이유  오늘어디냐... 09:18