感謝熱心分享
路過看看,謝分享。
新手來看看學習,雖然沒錢買但來看看
謝謝分享
感谢分享!
感谢分享
謝謝分享
感谢分享啊
感謝分享
可否請問如何讓815裡面內掛能設定使用攻擊技能
我使用前人的內掛原碼 設定範圍沒問題
也進行攻擊也正常但就是設定技能這方面完全沒作用
編譯原碼時裡也沒有顯示錯誤 執行後黑盒也沒顯示錯誤
https://i.meee.com.tw/ZjGg0I6.gif
那問題會出在那?
yashior 發表於 2026-3-14 10:35
感謝分享
可否請問如何讓815裡面內掛能設定使用攻擊技能
我使用前人的內掛原碼 設定範圍沒問題
很简单啊,增加一个施放技能的方法,判断技能距离和是否有障碍物,都通过的话,就进行放技能。稍后贴代码给你
yashior 發表於 2026-3-14 10:35
感謝分享
可否請問如何讓815裡面內掛能設定使用攻擊技能
我使用前人的內掛原碼 設定範圍沒問題
/**
* 攻击技能
* by IQN 20260116
*/
public void attack_skill(final L1PcInstance pc, final L1Character targets, final int skillrng, final int location, final int randomSkillId) {
try {
if (skillrng > 0 && location > skillrng) { // 如果技能距离大于0 就判断与目标的距离是否滿足技能距离
return;
}
if (pc.isSkillDelay()) { // 技能延迟施放中
return;
}
if (pc.hasSkillEffect(64)||pc.hasSkillEffect(161)||pc.hasSkillEffect(202)) {//被封印了
return;
}
final L1Skills skill = SkillsTable.get().getTemplate(randomSkillId);
final L1SkillUse skillUse = new L1SkillUse();
if (pc.getCurrentMp() >= skill.getMpConsume()) { // 施放该技能需要的魔力
if (targets.isDead()) // 加入施放前判斷目標是否已死亡
return;
skillUse.handleCommands(pc, randomSkillId, targets.getId(), targets.getX(), targets.getY(), skill.getBuffDuration(), L1SkillUse.TYPE_NORMAL);
Thread.sleep(skill.getReuseDelay()); // 延迟
}
} catch (Exception e) {
//
}
}把这段代码加到com.lineage.server.model.Instance.L1PcInstance里。然后在合适的地方调用这个方法:attack_skill(_pc, target, -1, location, skillId);就可以实现挂机时使用技能了
66666666666666666666
感謝分'想ㄉ
本帖最後由 yashior 於 2026-3-14 14:29 編輯
IQN 發表於 2026-3-14 10:57
把这段代码加到com.lineage.server.model.Instance.L1PcInstance里。然后在合适的地方调用这个方法:atta ...
感謝教學這是我用nick前人的內掛原碼
內掛裡面可以找到 您po出的相關原碼
然後內掛裡的自動購箭功能正常、自動買白瞬卷功能正常、範圍設定正常、就是自動技能施法那無作用(自動技能施法那無作用在原先的版本裡是正常的但移到815後就失效
在合适的地方调用 815版攻擊相關的有
L1AttackPC.java
L1AttackNPC.java
L1AttackMode.java
L1AttackList.java
L1AttackPower.java
L1AttackThread.java這些
會是調用的位置不同?還是其他的原因 請高手能開示 我很菜的請別嫌棄 感恩
本帖最後由 IQN 於 2026-3-14 16:57 編輯
yashior 發表於 2026-3-14 14:26
感謝教學這是我用nick前人的內掛原碼
內掛裡面可以找到 您po出的相關原碼
然後內掛裡的自動購箭功能正常、 ...
你贴出来的那些档都不对,不应该在那些档里加施放技能的方法。应该还是在L1PcInstance档里,我给你完整的代码吧。这里我只加了骑士的冲晕和妖精的拿弓就用三重,拿刀就烈炎术,其他职业的你可以自己加。
/**
* 攻击技能
* by IQN 20260116
*/
public void attack_skill(final L1PcInstance pc, final L1Character targets, final int skillrng, final int location, final int randomSkillId) {
try {
if (skillrng > 0 && location > skillrng) { // 如果技能距离大于0 就判断与目标的距离是否滿足技能距离
return;
}
if (pc.isSkillDelay()) { // 技能延迟施放中
return;
}
if (pc.hasSkillEffect(64)||pc.hasSkillEffect(161)||pc.hasSkillEffect(202)) {//被封印了
return;
}
final L1Skills skill = SkillsTable.get().getTemplate(randomSkillId);
final L1SkillUse skillUse = new L1SkillUse();
if (pc.getCurrentMp() >= skill.getMpConsume()) { // 施放该技能需要的魔力
if (targets.isDead()) // 加入施放前判斷目標是否已死亡
return;
skillUse.handleCommands(pc, randomSkillId, targets.getId(), targets.getX(), targets.getY(), skill.getBuffDuration(), L1SkillUse.TYPE_NORMAL);
Thread.sleep(skill.getReuseDelay()); // 延迟
}
} catch (Exception e) {
}
}
private void attack(L1Character target) {
// System.out.println("攻击可能位置");
// 攻击可能位置
int attack_Range = 1;
if (this.getWeapon() != null) {
attack_Range = this.getWeapon().getItem().getRange();
}
if (attack_Range < 0) {
attack_Range = 15;
}
if (isAttackPosition(target.getX(), target.getY(), attack_Range)) {// 已经到达可以攻击的距离
setHeading(targetDirection(target.getX(), target.getY()));
attackTarget(target);
///<font color="#ff0000">start从这里开始添加by IQN 20260314</font>
final int location = getLocation().getTileLineDistance(target.getLocation());
int physicalRange = 1;
L1ItemInstance weapon = getWeapon();
if (weapon != null) {
physicalRange = weapon.getItem().getRange();
}
if(isKnight())//添加位置 2
{
if (weapon != null && !target.hasSkillEffect(87)) {
int weaponType = weapon.getItem().getType();
if(weaponType==3)
{
attack_skill(this, target, -1, location, 87);//冲晕
}
}
}
if(isElf())//添加位置 2
{
int weaponType = weapon.getItem().getType();
int skillId = (weaponType == 4 || weaponType == 13) ? 132 : 46;//三重矢或烈焰术
attack_skill(this, target, -1, location, skillId);
}
///<font color="#ff0000">end从这里开始结束 by IQN 20260314</font>
// XXX
if (_pcMove != null) {
_pcMove.clear();
}
} else { // 攻击不可能位置
if (_pcMove != null) {
final int dir = _pcMove.moveDirection(target.getX(), target.getY());
if (dir == -1) {
_AItarget.setSkillEffect(this.getId() + 100000, 20000);// 给予20秒状态
allTargetClear();
} else {
_pcMove.setDirectionMove(dir);
// setSleepTime(calcSleepTime(getPassispeed(), MOVE_SPEED));
}
}
}
}
感謝分享
感謝大大無私分享
7777777777778
新手來看看學習
謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享謝謝分享
驗證後: 20人限制封殼無源碼非常天堂38