속성방어 본섭화???
기존에 속성방어 공식으로 하면 기사의경우 마갑주+속성반지면 속성방어가 100%가 넘게 나옵니다.
이경우 아무리 쎈 속성마법이라도 피가 안다는 증상이 발생되게 되는데요...
본섭처럼 약한속성마법의경우는 무시 강한속성마법의경우는 데미지 감소로 처리해 보았습니다.
허접하지만 ^^; 이거 적용이 안댄거 같아서 올려봅니다.
L1.Magic.java 수정하시면 대욤...
// ●●●● MR에 의한 데미지 경감 ●●●●
// attr:0.무속성 마법 , 1.땅마법 , 2.불마법 , 4.수해법 , 8.바람 마법 , 16.광마법
private int MrDefenseCalc(int dmg , int attr) {
int mr = 0;
int attr_defense = 0;
/*
* 타겟의 MR와 속성 방어력 산출 NPC의 경우 , 약점 속성으로 공격받았을 경우 , 1.5배의 데미지가 된다
* 역약점 속성으로 공격받았을 경우 , 0.5배의 데미지가 된다.
*/
if (_calcType == PC_PC || _calcType == NPC_PC) {
mr = targetPlayer.get_mr();
if (attr == L1Skills.ATTR_EARTH)
attr_defense = targetPlayer.get_earth();
if (attr == L1Skills.ATTR_FIRE)
attr_defense = targetPlayer.get_fire();
if (attr == L1Skills.ATTR_WATER)
attr_defense = targetPlayer.get_water();
if (attr == L1Skills.ATTR_WIND)
attr_defense = targetPlayer.get_wind();
} else if (_calcType == PC_NPC || _calcType == NPC_NPC) {
mr = targetNpc.get_mr();
if (((attr & L1Skills.ATTR_EARTH) == L1Skills.ATTR_EARTH && targetNpc
.getNpcTemplate().get_weakwind() == 1)
|| ((attr & L1Skills.ATTR_FIRE) == L1Skills.ATTR_FIRE && targetNpc
.getNpcTemplate().get_weakwater() == 1)
|| ((attr & L1Skills.ATTR_WATER) == L1Skills.ATTR_WATER && targetNpc
.getNpcTemplate().get_weakfire() == 1)
|| ((attr & L1Skills.ATTR_WIND) == L1Skills.ATTR_WIND && targetNpc
.getNpcTemplate().get_weakearth() == 1))
attr_defense = 50;
if (((attr & L1Skills.ATTR_EARTH) == L1Skills.ATTR_EARTH && targetNpc
.getNpcTemplate().get_weakearth() == 1)
|| ((attr & L1Skills.ATTR_FIRE) == L1Skills.ATTR_FIRE && targetNpc
.getNpcTemplate().get_weakfire() == 1)
|| ((attr & L1Skills.ATTR_WATER) == L1Skills.ATTR_WATER && targetNpc
.getNpcTemplate().get_weakwater() == 1)
|| ((attr & L1Skills.ATTR_WIND) == L1Skills.ATTR_WIND && targetNpc
.getNpcTemplate().get_weakwind() == 1))
attr_defense = -50;
}
/*
* 최대치 , 최소치의 설정
*/
if (attr_defense < -100)
attr_defense = -100;
if (attr_defense > 100)
attr_defense = 100;
/*
* 속성 방어분 마이너스
*/
if (dmg <= 100)
dmg -= (int) ((double) dmg * ((double) attr_defense / 100D)); //데미지가 100이하라면 100%차단
else
dmg -= (int) ((double) dmg * ((double) attr_defense / 100D)) / 2; //데미지가 100이상이라면 데미지의 2/1감소
int rnd = _random.nextInt(100) + 1;
if (mr >= rnd) {
dmg /= 2;
}
return dmg;
}
출처:옆동네(팝X)

로스트사가 님의 최근 댓글
감사합니다. 2019 06.13 감사합니다. 2019 06.12 감사합니다. 2019 05.03 감사합니다. 2019 05.03 감사합니다. 2018 03.11