2.0 스턴 지속시간은 소스 어디 만져야되나요?
컨텐츠 정보
- 817 조회
- 5 댓글
- 0 추천
- 0 비추천
-
목록
본문
상세히 부탁드리겠습니다
-
등록일 2024.01.29
-
등록일 2023.11.18
-
등록일 2023.11.12
-
등록일 2023.10.20
관련자료
댓글 5

pieceB님의 댓글
SkillControl.java 클래스를 확인해보시면 됩니다.
skill.getUid() == 16 >> 스턴의 스킬번호입니다.
if (skill.getUid() == 16) {
boolean result = false;
double probability = 0;
int level = cha.getLevel() - o.getLevel();
// 시전자가 레벨이 높을때
if (level > 0) {
if (level == 1)
probability = 0.32;
else if (level == 2)
probability = 0.34;
else if (level == 3)
probability = 0.36;
else if (level == 4)
probability = 0.38;
else if (level == 5)
probability = 0.40;
else if (level == 6)
probability = 0.42;
else if (level == 7)
probability = 0.44;
else if (level == 8)
probability = 0.46;
else if (level == 9)
probability = 0.48;
else
probability = 0.50;
} else {
// 시전자가 레벨이 같거나 낮을때
if (level == 0)
probability = 0.50;
else if (level == -1)
probability = 0.48;
else if (level == -2)
probability = 0.46;
else if (level == -3)
probability = 0.44;
else if (level == -4)
probability = 0.42;
else if (level == -5)
probability = 0.40;
else if (level == -6)
probability = 0.38;
else if (level == -7)
probability = 0.36;
else if (level == -8)
probability = 0.34;
else if (level == -8)
probability = 0.32;
else
probability = 0.30;
}
probability += cha.getDynamicStunHit();
if (cha.isAutoStun()) {
probability += Lineage.inv_auto_stun_percent;
}
if (o instanceof Character)
probability -= ((Character) o).getTotalStunResist() * 0.8;
probability *= 100;
result = Util.random(1, 100) < (probability < 1 ? Util.random(1, 3) : Math.round(probability));
if (Lineage.is_miss_effect && !result)
cha.toSender(
S_ObjectEffect.clone(BasePacketPooling.getPool(S_ObjectEffect.class), o, Lineage.miss_effect));
return result;
}
제어문이 보이실텐데요. 레벨이 같은 경우와 낮을경우에 대한 수치를 입력해주시면 스턴확률 조절이 가능하십니다.
각 수치별로 레벨에 대한 차이가 있었을 경우에 대한 확률이 나와있는데 이부분을 수정하여
컴파일해주시면 서버에 적용 가능하십니다.
skill.getUid() == 16 >> 스턴의 스킬번호입니다.
if (skill.getUid() == 16) {
boolean result = false;
double probability = 0;
int level = cha.getLevel() - o.getLevel();
// 시전자가 레벨이 높을때
if (level > 0) {
if (level == 1)
probability = 0.32;
else if (level == 2)
probability = 0.34;
else if (level == 3)
probability = 0.36;
else if (level == 4)
probability = 0.38;
else if (level == 5)
probability = 0.40;
else if (level == 6)
probability = 0.42;
else if (level == 7)
probability = 0.44;
else if (level == 8)
probability = 0.46;
else if (level == 9)
probability = 0.48;
else
probability = 0.50;
} else {
// 시전자가 레벨이 같거나 낮을때
if (level == 0)
probability = 0.50;
else if (level == -1)
probability = 0.48;
else if (level == -2)
probability = 0.46;
else if (level == -3)
probability = 0.44;
else if (level == -4)
probability = 0.42;
else if (level == -5)
probability = 0.40;
else if (level == -6)
probability = 0.38;
else if (level == -7)
probability = 0.36;
else if (level == -8)
probability = 0.34;
else if (level == -8)
probability = 0.32;
else
probability = 0.30;
}
probability += cha.getDynamicStunHit();
if (cha.isAutoStun()) {
probability += Lineage.inv_auto_stun_percent;
}
if (o instanceof Character)
probability -= ((Character) o).getTotalStunResist() * 0.8;
probability *= 100;
result = Util.random(1, 100) < (probability < 1 ? Util.random(1, 3) : Math.round(probability));
if (Lineage.is_miss_effect && !result)
cha.toSender(
S_ObjectEffect.clone(BasePacketPooling.getPool(S_ObjectEffect.class), o, Lineage.miss_effect));
return result;
}
제어문이 보이실텐데요. 레벨이 같은 경우와 낮을경우에 대한 수치를 입력해주시면 스턴확률 조절이 가능하십니다.
각 수치별로 레벨에 대한 차이가 있었을 경우에 대한 확률이 나와있는데 이부분을 수정하여
컴파일해주시면 서버에 적용 가능하십니다.

a1szs님의 댓글
제가 잘 모르지만 위에 말씀 주신 부분은 스턴의 확률에 대한 말씀 이신것 같습니다.
작성자분은 스턴 시간을 말씀하신거로 보입니다.
Skill 쪽 한번 검색해 보심이 어떠신지요?
저도 거진 10년만에 와가지고 제가 예전에 가지고 있던거 보니 하기와 같은 부분이 있었습니다.
동일 부분이 있으신지 확인해 보세여.
package l1j.server.server.model.skill.skills;
import java.util.Random;
import l1j.server.server.model.L1Character;
import l1j.server.server.model.L1EffectSpawn;
import l1j.server.server.model.Instance.L1MonsterInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.Instance.L1PetInstance;
import l1j.server.server.model.Instance.L1SummonInstance;
import l1j.server.server.serverpackets.S_Paralysis;
public class ShockStun {
public static void runSkill(Random random, L1Character cha, int _shockStunDuration) {
int[] stunTimeArray = { 500, 1000, 1500, 2000, 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);
}
}
}
여기서 int[] stunTimeArray = { 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000 };
요 부분을 수정 하시면 됩니다.
제 기억에 500은 0.5초 / 1000은 1초로 알고 있습니다.
작성자분은 스턴 시간을 말씀하신거로 보입니다.
Skill 쪽 한번 검색해 보심이 어떠신지요?
저도 거진 10년만에 와가지고 제가 예전에 가지고 있던거 보니 하기와 같은 부분이 있었습니다.
동일 부분이 있으신지 확인해 보세여.
package l1j.server.server.model.skill.skills;
import java.util.Random;
import l1j.server.server.model.L1Character;
import l1j.server.server.model.L1EffectSpawn;
import l1j.server.server.model.Instance.L1MonsterInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.Instance.L1PetInstance;
import l1j.server.server.model.Instance.L1SummonInstance;
import l1j.server.server.serverpackets.S_Paralysis;
public class ShockStun {
public static void runSkill(Random random, L1Character cha, int _shockStunDuration) {
int[] stunTimeArray = { 500, 1000, 1500, 2000, 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);
}
}
}
여기서 int[] stunTimeArray = { 500, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000 };
요 부분을 수정 하시면 됩니다.
제 기억에 500은 0.5초 / 1000은 1초로 알고 있습니다.