瘋天堂私服發佈網站廣告欄位!
瘋天堂私服發佈網站您最佳的選擇!
免費曝光天堂私服的方式!
害怕天堂私服倒閉嗎?快使用天堂分析師!
天堂私服抽獎扭蛋物品及機率測試器
天堂私服稱號顏色製造器
瘋天堂私服發佈網站教您註冊推文收藏私服!
天堂私服血量魔力計算器
瘋天堂私服發布網站廣告贊助及爆料私服客服
教您如何不用註冊也可以推文天堂私服!
天堂私服270怪物查詢掉落資料庫
天堂私服盟徽製造器
test0428
2007-02-21 18:19

天堂套裝一定時間顯示動畫特效的java寫法!

在 armor_set 增加欄位 效果編號 - effect_id 及 效果間隔 - interval (單位:千分之一秒)

讓使用者在db可以設定穿套裝時設定法術效果及效果出現的頻率。


◇設定部分◇

step 1.

在db下按f6, 輸入下列資料,按ENTER。

ALTER table `armor_set` add `effect_id` int(10) NOT NULL default 0;

ALTER table `armor_set` add `interval` int(10) NOT NULL default 0;


複製代碼step 2.

在 L1ArmorSets 下找個適當的地方加入- ( l1j.server.server.templates.L1ArmorSets) // 套裝效果

private int _effect_id;

public int getEffectId() {

return _effect_id;

}

public void setEffectId(int i) {

_effect_id = i;

}

private int _interval;

public int getInterval() {

return _interval;

}

public void setInterval(int i) {

_interval = i;

}

複製代碼step 3.

在 ArmorSetTable 下找-

as.setDefenseFire(rs.getInt("defense_fire"));
as.setDefenseEarth(rs.getInt("defense_earth"));


複製代碼在下面加入-

as.setEffectId(rs.getInt("effect_id")); // 套裝效果
as.setInterval(rs.getInt("interval"));


複製代碼step 4.

在 L1ArmorSet 下找 - ( l1j.server.server.model.L1ArmorSet)

impl.addEffect(new AcHpMpBonusEffect(armorSets.getAc(),
armorSets.getHp(), armorSets.getMp(), armorSets
.getHpr(), armorSets.getMpr(), armorSets
.getMr()));


複製代碼更動為-

impl.addEffect(new AcHpMpBonusEffect(armorSets.getAc(),
armorSets.getHp(), armorSets.getMp(), armorSets
.getHpr(), armorSets.getMpr(), armorSets
.getMr(),armorSets.getEffectId(),armorSets.getInterval())); // 套裝效果


複製代碼找 -

private final int _regenMp;
private final int _addMr;

複製代碼在下面加入-

private final int _addEffectId; // 套裝效果
private final int _addInterval;


複製代碼找 -

public AcHpMpBonusEffect(int ac, int addHp, int addMp, int regenHp,

int regenMp, int addMr) {

_ac = ac;

_addHp = addHp;

_addMp = addMp;

_regenHp = regenHp;

_regenMp = regenMp;

_addMr = addMr;

}


複製代碼更動為 -

public AcHpMpBonusEffect(int ac, int addHp, int addMp, int regenHp,

int regenMp, int addMr,int addEffectId ,int addInterval) { // 套裝效果

_ac = ac;

_addHp = addHp;

_addMp = addMp;

_regenHp = regenHp;

_regenMp = regenMp;

_addMr = addMr;

_addEffectId = addEffectId; // 套裝效果

_addInterval = addInterval;

}


複製代碼找 -

public void giveEffect(L1PcInstance pc) {

pc.addAc(_ac);

pc.addMaxHp(_addHp);

pc.addMaxMp(_addMp);

pc.addHpr(_regenHp);

pc.addMpr(_regenMp);

pc.addMr(_addMr);

}

複製代碼更動為 -

public void giveEffect(L1PcInstance pc) {

pc.addAc(_ac);

pc.addMaxHp(_addHp);

pc.addMaxMp(_addMp);

pc.addHpr(_regenHp);

pc.addMpr(_regenMp);

pc.addMr(_addMr);

if (_addEffectId !=0){ // 套裝效果

pc.startSustainEffect(pc ,_addEffectId , _addInterval);

}

}


複製代碼找 -

public void cancelEffect(L1PcInstance pc) {
pc.addAc(-_ac);
pc.addMaxHp(-_addHp);
pc.addMaxMp(-_addMp);
pc.addHpr(-_regenHp);
pc.addMpr(-_regenMp);
pc.addMr(-_addMr);
}


複製代碼更動為 -

public void cancelEffect(L1PcInstance pc) {
pc.addAc(-_ac);
pc.addMaxHp(-_addHp);
pc.addMaxMp(-_addMp);
pc.addHpr(-_regenHp);
pc.addMpr(-_regenMp);
pc.addMr(-_addMr);
if (_addEffectId !=0){ // 套裝效果
pc.stopSustainEffect();
}
}

複製代碼step 5.

在 l1j.william 下新增類別 - SustainEffect (原 m大之 skillsound 改寫)package l1j.william;

import java.util.TimerTask;

import java.util.logging.Level;

import java.util.logging.Logger;

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

import l1j.server.server.serverpackets.S_SkillSound;

public class SustainEffect extends TimerTask {

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

private final L1PcInstance Active_pc;

private final int effect_id;

public SustainEffect(L1PcInstance pc ,int effect) {

Active_pc = pc;

effect_id = effect;

}

@Override

public void run() {

try {

if (Active_pc.isDead()) {

return;

}

Active_pc.sendPackets(new S_SkillSound(Active_pc.getId(), effect_id));

Active_pc.broadcastPacket(new S_SkillSound(Active_pc.getId(), effect_id)); // 是否加入,請自行考量

} catch (Throwable e) {

_log.log(Level.WARNING, e.getLocalizedMessage(), e);

}

}

}


複製代碼step 6.

在 L1PcInstance 下找個適當的地方加入 -

// 套裝效果

private SustainEffect SustainEffect; // 記得先 import l1j.william.SustainEffect;

public void startSustainEffect(L1PcInstance pc ,int effect_id ,int Interval) {

final int _Interval = Interval; // 間隔時間

SustainEffect = new SustainEffect(pc ,effect_id);

_regenTimer.scheduleAtFixedRate(SustainEffect,_Interval, _Interval);

}

public void stopSustainEffect() {

SustainEffect.cancel();

SustainEffect = null;

}


複製代碼
......................................................

假如實裝OK了

人物走動後 卻出現效果還在屁股後面


請配合法術效果出現、走速、間隔,來調整至適當的情況。

將 skillsound 改成 -

S_EffectLocation packet = new S_EffectLocation(locx, locy, 法術效果編號);
pc.sendPackets(packet);
pc.broadcastPacket(packet); // 若要省資源,可對 broadcastPacket 做限制

其中,locx locy 先判斷是否與上一個 座標相同,若相同則不變~也就是原地停止時效果會在腳下!!

若座標不同則表示是在移動狀態,用取得人物面向,對下一出現的地點做預設,比如往面向前的2格~ (面向0~7的座標寫法可參火牢)

這樣也許可以~不過要實際去做才能調整至適當的情形!!



上一篇文章:天堂陷阱設定的java寫法!
下一篇文章:天堂3.63C 解決戒指bug問題的java寫法!

分享文章:分享到微博! 分享到臉書! 分享到噗浪! 分享到維特! 分享到Google+! 分享到LINE!