顯示具有 怪物 標籤的文章。 顯示所有文章
顯示具有 怪物 標籤的文章。 顯示所有文章

2014年6月3日 星期二

【Java教學】指定狀態才可攻擊到怪物

用炎魔的軍師來舉例

┌L1SkillId ( 此部分為狀態宣告基本設定 )

加入

public static final int STATUS_CURSE_YAHEE = 1014;



L1SkillTimer ( 此部分為狀態詳細設定 )

搜尋

// メッセージの表示(終了するとき)

上面找個位置加入

else if (skillId == STATUS_CURSE_YAHEE) { // 炎魔的烙印
if (cha instanceof L1PcInstance) {
L1PcInstance pc = (L1PcInstance) cha;
pc.sendPackets(new S_SkillIconAura(221, 0, 1));
}
}

C_NPCAction ( 此部分為NPC賦予玩家可打特定怪的狀態設定 )

宣告:

import static l1j.server.server.model.skill.L1SkillId.STATUS_CURSE_YAHEE;

找個位置加入

} else if (((L1NpcInstance) obj).getNpcTemplate().get_npcId() == 80073) { // 炎魔的軍師
if (s.equalsIgnoreCase("a")) { // 請給我力量
if (pc.hasSkillEffect(STATUS_CURSE_YAHEE)) { // 炎魔的烙印
pc.killSkillEffectTimer(STATUS_CURSE_YAHEE);
}
pc.sendPackets(new S_SkillSound(pc.getId(), 750));
pc.broadcastPacket(new S_SkillSound(pc.getId(), 750));
pc.sendPackets(new S_SkillIconAura(221, 1020, 1)); // 炎魔的烙印
pc.setSkillEffect(STATUS_CURSE_YAHEE, 1020 * 1000);
pc.sendPackets(new S_ServerMessage(1127));
htmlid = "";
}
}




L1Character ( 此部分為設定可攻擊的怪物有哪些 )

宣告:

import static l1j.server.server.model.skill.L1SkillId.STATUS_CURSE_YAHEE;

搜尋

// 判斷特定狀態下才可攻擊 NPC

下面加入

case 45675: // 火焰之影(變身前)
if (!cha.hasSkillEffect(STATUS_CURSE_YAHEE)) {
return true;
}
return false;
case 81082: // 火焰之影(變身後)
if (!cha.hasSkillEffect(STATUS_CURSE_YAHEE)) {
return true;
}
return false;
case 45625: // 混沌
if (!cha.hasSkillEffect(STATUS_CURSE_YAHEE)) {
return true;
}
return false;
case 45674: // 死亡
if (!cha.hasSkillEffect(STATUS_CURSE_YAHEE)) {
return true;
}
return false;
case 45685: // 墮落
if (!cha.hasSkillEffect(STATUS_CURSE_YAHEE)) {
return true;
}
return false;




2014年6月2日 星期一

【Java教學】 怪物強化系統

前言:
此系統Idea來源是某天無聊在逛某些伺服器論壇的時候,看到某伺服器有此功能,想說還不錯,我想各遊戲應該都有這種問題,就是遊戲玩到最後boss都變得跟垃圾一樣,寫這個讓遊戲能夠平衡一些,不過強化部分只有加入「修改力量」而已,其餘部分請自行參考,進行修改,由於困難度會隨著怪物不斷死亡而強化,所以,可以再延伸出,提高物品掉落率的設定等等。


修改核心檔案:L1Npc / L1NpcInstance / L1MonsterInstance / NpcTable
修改資料庫檔案:npc


--------------------------------------------以下為教學-------------------------------------------
L1Npc.Java

在最下面加入      

        //怪物強化
        private int _dcenhance;

        public int get_dc_Enhance() {
                return _dcenhance;
        }
        public void set_dc_Enhance(int i) {
                _dcenhance = i;
        }

        private int _currentdc;

        public int get_current_dc() {
                return _currentdc;
        }

        public void set_current_dc(int i) {
                _currentdc = i;
        }
        //怪物強化




L1NpcInstance.Java

在最下面加入
    
        //怪物強化
        public int getDcEnhance() {
                return _npcTemplate.get_dc_Enhance();
        }

        public void setDcEnhance(int i) {
                _npcTemplate.set_dc_Enhance(i);
        }

        public int getCurrentDc() {
                return _npcTemplate.get_current_dc();
        }

        public void setCurrentDc(int i) {
                _npcTemplate.set_current_dc(i);
        }

        public void setStr(byte i) {
                _npcTemplate.set_str(i);
        }
        //怪物強化


NpcTable.Java

搜尋

npc.setCantResurrect(rs.getBoolean("cant_resurrect"));

在下面加入      

//怪物強化                                
npc.set_current_dc(rs.getInt("current_dc"));                                
npc.set_dc_Enhance(rs.getInt("dc_enhance"));                                
//怪物強化

在最下面加入      

        //怪物強化
        public static void save(L1MonsterInstance mon) {
                Connection con = null;
                PreparedStatement pstm = null;
                try {
                        con = L1DatabaseFactory.getInstance().getConnection();
                        pstm = con.prepareStatement("UPDATE npc SET lvl= ?"
                                        + ", str= ?, current_dc= ? WHERE npcid=?");
                        pstm.setInt(1, mon.getLevel());
                        pstm.setInt(2, mon.getStr());
                        pstm.setInt(3, mon.getCurrentDc());
                        pstm.setInt(4, mon.getNpcId());
                        pstm.execute();
                }
                catch (Exception e) {
                        _log.log(Level.SEVERE, e.getLocalizedMessage(), e);
                }
                finally {
                        SQLUtil.close(pstm);
                        SQLUtil.close(con);
                }
        }
        //怪物強化


L1MonsterInstance.Java

搜尋第一次

 if (isDead()) {

下面加入  
                          
//怪物強化
                                if (getDcEnhance() != 0 && (getCurrentDc()%getDcEnhance()) == 0 && getCurrentDc() != 0) {
                                L1World.getInstance().broadcastPacketToAll(new S_SystemMessage(getName()+" 因被打死太多次,努力練功,現在變強了!!!"));
                                setStr((byte)(getStr()+100));
                                }
                                this.setCurrentDc(getCurrentDc()+1);
                                NpcTable.save(this);
                                //怪物強化


以上為Java修改

以下為資料庫修改

進入npc資料表 -> 設計資料表 -> 在最下面新增

current_dc int 11 0 不打勾 預設值0
dc_enhance int 11 0 不打勾 預設值0


-------------------------------------------以上為教學-------------------------------------------
使用方法: 資料表npc的dc_enhance欄位是設定死幾次就強化一次,適合使用在boss
此系統已經做基本測試,測試後沒有問題...



資料來源:日方系統

2014年3月26日 星期三

玩家無法對怪物施放指定魔法

文章出處:浪漫物語網路社區

找l1j\server\server\model\skill\L1SkillUse.java



找到這一段

if (((_skillId == TURN_UNDEAD) && ((undeadType == 0) || (undeadType == 2)))

                                || ((_skillId == TURN_UNDEAD) && (isTU == false))

                                || (((_skillId == ERASE_MAGIC) || (_skillId == SLOW) || (_skillId == MANA_DRAIN) || (_skillId == MASS_SLOW) || (_skillId == ENTANGLE) || (_skillId == WIND_SHACKLE)) && (isErase == false))

                                || ((_skillId == MANA_DRAIN) && (isManaDrain == false))) {

                        return true;

把它改成下面這樣

if (((_skillId == TURN_UNDEAD) && ((undeadType == 0) || (undeadType == 2)))

                                || ((_skillId == TURN_UNDEAD) && (isTU == false))

                                // 下面這行的負面魔法無效-木乃-藥霜-暗盲-黑影-暗黑-沉睡-

                                || _skillId == CURSE_PARALYZE || _skillId == SILENCE || _skillId == CURSE_BLIND || _skillId == DARKNESS || _skillId == DARK_BLIND || _skillId == FOG_OF_SLEEPING

                                || (((_skillId == ERASE_MAGIC) || (_skillId == SLOW) || (_skillId == MANA_DRAIN) || (_skillId == MASS_SLOW) || (_skillId == ENTANGLE) || (_skillId == WIND_SHACKLE)) && (isErase == false))

                                || ((_skillId == MANA_DRAIN) && (isManaDrain == false))) {

                        return true;

完成

2013年6月7日 星期五

【Java教學】【★★★★★】讓Npc和怪物顯示ID方便查看

方法一


1.模擬器的config資料夾在othersettings.properties裡加入

#是否顯示NPC的id(檢測用)
NPCid = false

看各人,想加到別的設定也行,但是後面的位置就要自行修正
在下是弄到othersettings.properties裡


2.找Config.java

3.找個地方宣告NPCid
public static boolean NPCid; //是否顯示NPC的id by Yao

4.因為設定在othersettings.properties裡,所以找到
try {Properties otherSettings = new Properties();

} catch (Exception e) {


在    } catch (Exception e) {   上面加入

NPCid = Boolean.parseBoolean(otherSettings.getProperty( //是否顯示NPC的id by Yao
"NPCid", "false"));

5.找到註解//othersettings.properties的很多 else if 內容,將下面的加在最後一個else if的後面

else if (pName.equalsIgnoreCase("NPCid")) { //是否顯示NPC的id by Yao
NPCid = Boolean.valueOf(pValue);
}


6.找到S_NPCPack.java
要匯入import l1j.server.Config;


7.搜尋writeH(npc.getTempLawful());

找到原本的writeS(npc.getNameId());改成
if ( Config.NPCid == false) { // 增加顯示NPC的id開關 by Yao
writeS(npc.getNameId());
} else {
writeS(npc.getNameId() + "["+npc.getNpcId()+"]" ); // 可看到NPCid
}

編譯後要不要顯示NPC的id就可由模擬器的config資料夾在othersettings.properties裡
#是否顯示NPC的id(檢測用)
NPCid = false

改true就顯示,不顯示就false


----------------------------------------------------------------------------------------------------------


方法二

1) 先在模擬器的config資料夾在altsettings.properties裡加入

#是否顯示NPC的id(檢測用)
NPCid = false

然後Config.java
要做3件事

2)public static boolean NPCid; 放在註解/** AltSettings control */裡面找地方放


3)放在註解// altsettings.properties的try { Properties altSettings = new Properties();開始
到} catch (Exception e) {裡面,} 在catch (Exception e) {上面加上
NPCid = Boolean.parseBoolean(altsettings.getProperty( "NPCid", "false"));


4)放在註解是給// altsettings.properties的很多else if 程式的地方,我會加在尾巴
else if (pName.equalsIgnoreCase("NPCid")) { NPCid = Boolean.valueOf(pValue);

而S_NPCPack.java的改法一樣











作者yaorushdie
以上兩個方法如果該宣告的請自行宣告

---------------END---------------

2013年5月28日 星期二

【遊戲整理】魔法編號表

166 食人妖精-攻擊魔法
212 四色攻擊光芒(白)
213 四色攻擊光芒(綠)
214 四色攻擊光芒(紅)
215 四色攻擊光芒(藍)
216 四色攻擊光芒(白)
217 四色攻擊光芒(綠)
218 四色攻擊光芒(紅)
219 四色攻擊光芒(藍)
222 蜘蛛網A
243 死亡騎士-攻擊魔法A
244 死亡騎士-攻擊魔法B(畫面不晃動)
245 死亡騎士-攻擊魔法C(畫面晃動)
761 超大魔法陣(召喚用)
954 獄犬-攻擊魔法(噴火)
1090 蜘蛛網
1043 邪惡蜥蜴-魔法攻擊
1044 邪惡蜥蜴-魔法攻擊
1054 亞力安-攻擊魔法(小光線)
1064 飛龍-攻擊魔法(噴火)
1085 流星雨落地
1086 法師吸血鬼之吻方向A
1087 法師吸血鬼之吻方向B
1088 法師吸血鬼之吻方向C
1089 法師吸血鬼之吻方向D
1115 思克巴-攻擊魔法(藍)
1119 思克巴女皇-攻擊魔法(黃)
1127 黑暗精靈-攻擊魔法(紅色魔法陣)
1160 安普-攻擊魔法(小石)
1161 安普長老-攻擊魔法(大石)
1183 惡魔-攻擊魔法(大火花)
1214 妖魔法師-魔法特效
1320 鬼魂-攻擊魔法A
1323 鬼魂-攻擊魔法B
1606 希爾黛斯-魔法攻擊A(像冰茅)
1607 希爾黛斯-氣泡漩渦(漩渦)
1608 希爾黛斯-魔法攻擊B(小漩渦)
1609 希爾黛斯-魔法攻擊B
1661 聖堂武士-刀光
1662 聖堂武士-劍氣
1663 聖堂武士-劍氣暴開
1783 烈焰獸-攻擊魔法(吐火)
1793 不死鳥-攻擊魔法A(火雨)
1794 不死鳥-攻擊魔法B(火雨2)
2261 冰女皇-攻擊魔法(法師的冰雪暴)
2527 小惡魔-攻擊魔法(小火花)
2546 巫妖-魔法攻擊A
2551 巫妖-魔法攻擊B
2552 巫妖-魔法攻擊C●
2759 吸血鬼-魔法A
2760 吸血鬼-魔法B(分身的樣子)
2761 吸血鬼-魔法C(蝙蝠)
2762 吸血鬼-魔法D(煙)
2775 幻象眼魔-魔法特效
2810 潔妮斯女皇-攻擊魔法(噴蜘蛛網)
2819 潔尼斯女皇-魔法特效
3378 黑暗妖精法師-魔法攻擊
3379 黑暗妖精法師-特殊攻擊
3393 鐮刀死神-魔法攻擊A(旋轉鐮刀向下)●
3394 鐮刀死神-魔法攻擊B(旋轉鐮刀向下)
3395 鐮刀死神-攻擊特效(迴旋斬)
3658 蜈蚣-施法特效
3669 巴拉卡-魔法特效A(小閃電圈)
3670 巴拉卡-魔法特效B(大閃電圈)
3671 巴拉卡-攻擊特效C(藍)
3685 冰烈A(?)
3778 冰烈A(?)擊中
3704 冰錐擊中
3705 冰錐
3696 野獸召喚魔法-惡靈(黑色鬼影)
3700 黑暗法師魔法-暗束縛
3740 一顆小隕石
3754 同上
3845 向上射出砲
3847 同上
3939 火焰燃燒
4020 水靈之主-攻擊特效A
4021 水靈之主-攻擊特效A
4022 水靈之主-攻擊特效B
4023 水靈之主-攻擊特效B
4026 深淵火靈-攻擊特效A
4027 深淵火靈-攻擊特效A
4031 深淵地靈-攻擊特效B(落石)
4037 深淵之主-魔法攻擊特效(紫火花)
4070 墮落-攻擊特效A(鐮刀攻擊)
4071 墮落-攻擊特效B(轉鐮刀)
4072 墮落-攻擊魔法攻擊A(鐮刀攻擊) ●
4073 墮落-攻擊魔法攻擊B(黑色鬼魂散開) ●
4326 墮落-攻擊魔法攻擊C(火焰燃燒)
4074 墮落-出現時特效A(紅龍捲風)
4076 墮落-出現時特效B(出現分身候消失)
4077 墮落-出現時特效C
2568 林德拜爾-現身時特效
2566 林德拜爾-攻擊魔法A
4155 林德拜爾-攻擊魔法B
4166 林德拜爾-攻擊魔法C
4167 林德拜爾-攻擊魔法D
1258 安塔瑞斯-攻擊特效A
1259 安塔瑞斯-攻擊特效B
1260 安塔瑞斯-攻擊特效C
1261 安塔瑞斯-攻擊特效D
1249 安塔瑞斯-攻擊魔法A
1262 安塔瑞斯-攻擊魔法B
4156 安塔瑞斯-攻擊魔法C
4158 安塔瑞斯-魔法攻擊D
4159 安塔瑞斯-魔法攻擊E
1263 安塔瑞斯-魔法攻擊F(毒霧)
1264 安塔瑞斯-魔法攻擊G(煙霧)
1265 安塔瑞斯-魔法攻擊H(逃跑煙霧)
4160 巴拉卡斯-攻擊魔法A
4161 巴拉卡斯-攻擊魔法B
4162 巴拉卡斯-攻擊魔法C
2004 巴拉卡斯-攻擊魔法D
1593 法利昂-魔法攻擊A
1594 法利昂-魔法攻擊B
4163 法力昂-攻擊魔法C
4164 法力昂-攻擊魔法D
4165 法力昂-攻擊魔法E
4170 曼波兔的攻擊魔法A
4173 曼波兔的攻擊魔法B
4176 曼波兔的攻擊魔法C
4229 曼波兔的魔法特效D
4230 曼波兔的魔法特效E
4231 曼波兔的魔法特效F
4221 德雷克-攻擊特效A
4222 德雷克-攻擊特效B
4223 德雷克-攻擊魔法A(迴旋劍氣)
4226 德雷克-攻擊魔法B(火焚身)
4238 高等蜥蜴人-攻擊魔法(水球)
4239 高等蜥蜴人-被水球魔法打中
閃電的 爆炸的   風的     法陣     人物周圍出現氣
4492     4580   5528     4662(火紅色)     5261
5304     4646   5651     4663(跳耀火紅)     5288
5306     4661   5663     4842藍閃電     5295
5542     4674   5665     4843(藍閃電陣     5476
5627     4890         4848黑霧       5825
5628     4891         4849黑霧陣
             4899         5277
             4906         5377
             4907
             5131
             5202

黑色流星雨群 4539
紅雷 5304 5306 (這2個請接在一起比較漂亮)
另外我再補充四龍:
4167 林德拜爾(粉塵爆炸)
2566 林德拜爾(口吐雷電)
1249 安塔瑞斯(大地震)
1262 安塔瑞斯(噴毒霧)
4158 安塔瑞斯(碎石漩渦)
4159 安塔瑞斯(地面爆炸)
2004 巴拉卡斯(吐火)
4160 巴拉卡斯(扇形火焰)
4161 巴拉卡斯(火旋漩渦)
4162 巴拉卡斯(火焰爆炸)
1593 法利昂(橫掃噴水)
1594 法利昂(全螢幕水壓攻擊)
4163 法力昂(噴水)
4164 法力昂(水牢)
4165 法力昂(瀑布)
2568 風龍降臨 (一隻白色的透明風龍降下來消失)
235 火色吸血鬼之吻(可用於吸血刀或法師吸吻替換)
4020 水靈之主-攻擊特效A
4021 水靈之主-攻擊擊中A
4022 水靈之主-攻擊特效B
4023 水靈之主-攻擊擊中B
4026 深淵火靈-攻擊特效
4027 深淵火靈-攻擊特效擊中
4031 深淵地靈-攻擊特效(一顆落石)
4037 深淵之主-魔法攻擊特效(與惡魔相同但為紫色火花)
4070 墮落-攻擊特效A(鐮刀攻擊)
4071 墮落-攻擊特效B(轉鐮刀)
4072 墮落-魔法攻擊A(火焰鐮刀攻擊)
4073 墮落-魔法攻擊B(一群黑色鬼魂以環狀散開)
4326 墮落-魔法攻擊C(火焰焚燒)
4074 墮落-出現時特效A(酷似一條紅色龍捲風)
4076 墮落-出現時特效B(出現墮落的樣子然後消失)
4077 墮落-出現時特效
4080 藍色尾巴-攻擊特效(激光從嘴裡吐出)
4081 藍色尾巴-攻擊特效(激光射出去的樣子)
4082 藍色尾巴-攻擊特效(激光打中)
2568 林德拜爾-出現時特效
2566 林德拜爾-攻擊魔法A(口吐雷電)
4155 林德拜爾-攻擊魔法B(旋風)
4166 林德拜爾-攻擊魔法C(大風)
4167 林德拜爾-攻擊魔法D(粉塵爆炸)
1258 安塔瑞斯-攻擊特效A(頭低下橫掃)
1259 安塔瑞斯-攻擊特效B(揮手攻擊)
1260 安塔瑞斯-攻擊特效C(揮另一隻手)
1261 安塔瑞斯-攻擊特效D(用尾巴攻擊)
1249 安塔瑞斯-攻擊魔法A(大地震)
1262 安塔瑞斯-攻擊魔法B(噴毒霧)
4156 安塔瑞斯-攻擊魔法C(投石)
4158 安塔瑞斯-魔法攻擊D(碎石漩渦)
4159 安塔瑞斯-魔法攻擊E(地面爆炸)
1263 安塔瑞斯-毒霧
1264 安塔瑞斯-出現煙霧(從土裡躦出來)
1265 安塔瑞斯-烙跑煙霧(躲回土裡)
4160 巴拉卡斯-攻擊魔法A(扇形火焰)
4161 巴拉卡斯-攻擊魔法B(火旋漩渦)
4162 巴拉卡斯-攻擊魔法C(火焰爆炸)
2004 巴拉卡斯-攻擊魔法D(吐火)
1593 法利昂-魔法攻擊A(橫掃噴水)
1594 法利昂-魔法攻擊B(全螢幕水壓攻擊)
4163 法力昂-攻擊魔法C(噴水)
4164 法力昂-攻擊魔法D(水牢)
4165 法力昂-攻擊魔法E(瀑布)
4170 曼波兔部下-攻擊魔法A(環形藍色氣體散開)
4173 曼波兔1-攻擊魔法A
4176 曼波兔2-攻擊魔法A
4229 曼波兔的魔法特效B(環繞圓形擴大) #
4230 曼波兔的魔法特效B
4231 曼波兔的魔法特效B
4221 德雷克-攻擊特效A
4222 德雷克-攻擊特效B
4223 德雷克-攻擊魔法A(迴旋劍氣)
4226 德雷克-攻擊魔法B(火焰焚身)
4238 高等蜥蜴人-攻擊魔法(水球)
4239 高等蜥蜴人-被水球魔法打中
4469 阿利歐克(紫光散開華麗魔法)
4836 大地之劍火球落下魔法陣
5902 閃電落下地震魔法陣
5935 光罩小魔法陣


請打開DB資料庫
看到william2 有些版本沒有
第1欄 oid 從1開始設吧
第2欄 weaponid 武器編號
第3欄 skillid 魔法編號【要設定圖檔編號、而非技能編號】
第4欄 areaskill 魔法的範圍有多大1~10
第5欄 damage 傷害值設定
第6欄 who 0=攻擊自己,1=敵人
第7欄 skillrandom 施法機率 1~100


在最後面先新增一排(按下就會出現)
item_id不用填(會自己出現~到時候用來設給NPC賣會用到)
name就是名子
type是種類
以下就是種類的英文名稱:
claw   鋼爪
edoryu   雙刀
staff   法仗
tohandsword雙手劍
dagger     匕首
sword     單手劍
blunt     斧頭
gauntlet   手甲
arrow     箭矢
throwingknife   飛刀
bow
dmg_small
對大型怪物攻擊力
dmg_large
對小型怪物攻擊力
material
武器的材質 ( 太多了~自己參照weapon)
safenchant
武器的安定值
weight
武器的重量
item_invgf
武器圖檔?在地上的樣子
item_groundgf
武器圖檔商店或身上顯示
name_id
武器顯示中文
price
武器的價格
use_royal

限定職業王族 0 = 裝備 1 = 不可

限定職業騎士 0 = 裝備 1 = 不可

限定職業法師 0 = 裝備 1 = 不可

限定職業妖精 0 = 裝備 1 = 不可

限定職業黑妖 0 = 裝備 1 = 不可