gto32132 發表於 2016-8-3 12:01

自創技能修改

新增進階精靈魔法:九重矢
1.開啟 src/l1j/server/server/clientpackets/C_ItemUSe.java

搜尋
                } else if (itemId == 40022) { // 古代体力回復
修改為
                // 新增進階精靈魔法:九重矢 by impreza8837
                } else if(itemId == 300037) {
                  int skillid = NINE_ARROW;
                  L1SkillUse l1skilluse = new L1SkillUse();
                  l1skilluse.handleCommands(client.getActiveChar(), skillid,
                            spellsc_objid, spellsc_x, spellsc_y, null, 0,
                            L1SkillUse.TYPE_NORMAL);
                // 新增進階精靈魔法:九重矢 by impreza8837
                } else if (itemId == 40022) { // 古代体力回復
2.開啟 src/l1j/server/server/model/skill/L1SkillUse.java

搜尋
10027, 10028, 10029 };
修改為
10027, 10028, 10029, 177 }; // 新增進階精靈魔法:九重矢 by impreza8837

再搜尋
} else if (_skillId == 10026 || _skillId == 10027
修改為
                // 新增進階精靈魔法:九重矢 by impreza8837
                } else if (_skillId == NINE_ARROW) {
                  boolean gfxcheck = false;
                  int[] BowGFX = { 138, 37, 3860, 3126, 3420, 2284, 3105,
                            3145, 3148, 3151, 3871, 4125, 2323, 3892, 3895,
                            3898, 3901, 4917, 4918, 4919, 4950, 6087, 6140,
                            6145, 6150, 6155, 6160, 6269, 6272, 6275, 6278, 371 };
                  int playerGFX = _player.getTempCharGfx();
                  for (int gfx : BowGFX) {
                        if (playerGFX == gfx) {
                            gfxcheck = true;
                            break;
                        }
                  }
                  if (!gfxcheck) {
                        return;
                  }

                  for (int i = 9; i > 0; i--) {
                        _target.onAction(_player);
                  }
                  for (int i = 3; i > 0; i--) {
                  _player.sendPackets(new S_SkillSound(_player.getId(),
                            4394));
                  _player.broadcastPacket(new S_SkillSound(_player.getId(),
                            4394));
                  Thread.sleep(400L);
                  }
                // 新增進階精靈魔法:九重矢 by impreza8837
                } else if (_skillId == 10026 || _skillId == 10027
3.開啟 src/l1j/server/server/model/skill/L1SkillId.java

搜尋
public static final int SKILLS_END = 176;
修改為
    // 新增進階精靈魔法:九重矢 by impreza8837
    public static final int NINE_ARROW = 177;
    // 新增進階精靈魔法:九重矢 by impreza8837

    public static final int SKILLS_END = 177;
DB增加etcitem物品
INSERT INTO `etcitem` VALUES ('300037', '進階精靈魔法:九重矢', '進階精靈魔法:九重矢', 'scroll', 'spell_long', 'paper', '630', '1755', '22', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '5', '400', '0', '0', '0');
記得修改想要的CD時間 預設:400

DB增加skills技能
INSERT INTO `skills` VALUES ('177', '進階精靈魔法:九重矢', '0', '0', '45', '0', '0', '0', '0', '0', 'attack', '3', '0', '0', '0', '0', '0', '0', '64', '0', '-1', '0', '0', '8', '', '18', '0', '0', '0', '0');
記得修改想要的耗魔量 預設:45

妖精新魔法-精靈之力(java)

在L1Attack.java裡面
在public int PcPcDamageCalc() { 下方
if (targetPlayer.check_magiclist(68) == true) Damage /= 2;上方加入

if (targetPlayer.check_magiclist(997) == true&& _random.nextInt(100) < 20){ //精靈之力
                targetPlayer.sendPackets(new S_SystemMessage("精靈出現疪佑"));
                player.sendPackets(new S_SkillSound(_targetId, 4540));
                player.broadcastPacket(new S_SkillSound(_targetId, 4540));
                Damage /= 4; //機率20 把傷害降低至剩 4/1
          }

在private int NpcPcDamageCalc() { 下方
if (npc.check_magiclist(27) == true)上方加入

if (targetPlayer.check_magiclist(997)== true && _random.nextInt(100) < 20){//精靈之力                  
               
                targetPlayer.sendPackets(new S_SystemMessage("精靈出現疪佑"));
                npc.broadcastPacket(new S_SkillSound(_targetId, 4540));
                Damage /= 4;
          }

在C_RequestItemUSe.java加入
在else if (itemId == 40033) { 上方加入

if(itemId == 80001){
if(l1pcinstance.get_classId() == 138 || l1pcinstance.get_classId() == 37) //這邊我限定妖精才能得到下面魔法動畫
{      
if(l1pcinstance.check_magiclist(997) == false){      
int time = 50 * 1000;
L1SkillUse skilluse = new L1SkillUse();
L1SkillUse.SkillTimer skill = skilluse.new SkillTimer(l1pcinstance,997,time);
skill.start();
l1pcinstance.sendPackets(new S_SkillIcon3(5, 50));//這邊是右上面的使用小圖示 數字5是保護兆 能改成 6或 7 時間為50秒
l1pcinstance.add_magiclist(997,skill);
l1pcinstance.sendPackets(new S_SkillSound(j, 2245));
l1pcinstance.broadcastPacket(new S_SkillSound(j, 2245));
l1pcinstance.sendPackets(new S_SystemMessage("得到精靈的疪佑"));
}
}
}else

在L1SKillUSe 裡面 加入
if (skillid == 2) {下方加入

if (skillid == 997) { // 精靈之力
if (charaPc != null) {
charaPc.sendPackets(new S_SystemMessage("精靈疪佑消失了"));
}

==================================================================================
傷害有20的機率 會把傷害降至 1/4趴
時間設 50秒吧因為並不是聖界 使用了 傷害就撿半
上述的法術 是有機率才會出現的
//設定妖精才能使用 是因為妖精過於弱勢

不用在db新增 直接創物品 80001出來 就能使用了 點二下 就啟用魔法效果了!
究極起死回生術


這個是我的伺服器內的宣傳圖,僅供參考。

前言:
對天堂服务器接觸比較久的人應該都知道這個魔法,
此為咖啡版的究極起死回生術,
因為看到目前大多數的整合版幾乎是以仿正為主流,
或者是自創內容,但是有自創技能的版本似乎屈指可數...
也有可能是小弟的見識太淺薄....QQ
不過鑒於這個出發點,小弟現在分享這個方法,
將咖啡版的究極起死回生術在新的版本中呈現出來。

使用軟體:JC、DJ
參考了日版的起死回生術原碼。
使用MCA大發佈的Rev1118版製成,特此感謝。
使用了傑大1098版的william_item_magic功能來施放魔法,特此感謝。

現在開始修改....

l1j\server\server\model\skill\L1SkillId.java

找到這一段

public static final int ADDITIONAL_FIRE = 176;

public static final int SKILLS_END = 176;

改成這樣

public static final int ADDITIONAL_FIRE = 176;

public static final int SUPER_TURN_UNDEAD = 177;//集體起死回生術

public static final int SKILLS_END = 177;
完畢,記得先將此原碼轉檔,壓入核心才能繼續以下的動作。

接著修改
l1j\server\server\model\skill\L1SkillUse.java

找到這一段
case TURN_UNDEAD: { // 起死回生術
if (undeadType == 1 || undeadType == 3) {
dmg = cha.getCurrentHp();
}else {
dmg = 0;
}
}
break;
往下插入這一段,先設定這個魔法的效果

case SUPER_TURN_UNDEAD: { // 集體起死回生術
    if (undeadType == 1 || undeadType == 3) {      
      dmg = cha.getCurrentHp();
      _player.sendPackets(new S_SkillSound(cha.getId(), 754));
      _player.broadcastPacket(new S_SkillSound(cha.getId(), 754)); // 魔法效果送出
      } else {
      dmg = 0;
      }
    }
    break;
再往下找到這一段

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 == CURSE_PARALYZE || _skillId == SILENCE || _skillId == CURSE_BLIND || _skillId == DARKNESS
                              || _skillId == DARK_BLIND || _skillId == FOG_OF_SLEEPING || _skillId == SHOCK_STUN) && isErase == false) // 新增木乃伊 CURSE_PARALYZE、魔封無效 SILENCE
    || (_skillId == MANA_DRAIN && isManaDrain == false)) { //新增闇盲咒術 CURSE_BLIND、
                              // 黑暗之影 DARKNESS、暗黑盲咒(黑妖的) DARK_BLIND、沉睡之霧無效 FOG_OF_SLEEPING by 9001183ex增加衝暈 SHOCK_STUN by mca 20081223
return true;
}
return false;
}
}
改成這樣

if ((_skillId == TURN_UNDEAD && (undeadType == 0 || undeadType == 2))
    || (_skillId == TURN_UNDEAD && isTU == false)
    || (_skillId == SUPER_TURN_UNDEAD && (undeadType == 0 || undeadType == 2)) //增加集體起死回生術
    || (_skillId == SUPER_TURN_UNDEAD && isTU == false)//增加集體起死回生術
    || ((_skillId == ERASE_MAGIC || _skillId == SLOW || _skillId == MANA_DRAIN || _skillId == MASS_SLOW || _skillId == ENTANGLE
    || _skillId == CURSE_PARALYZE || _skillId == SILENCE || _skillId == CURSE_BLIND || _skillId == DARKNESS
                              || _skillId == DARK_BLIND || _skillId == FOG_OF_SLEEPING || _skillId == SHOCK_STUN) && isErase == false) // 新增木乃伊 CURSE_PARALYZE、魔封無效 SILENCE
    || (_skillId == MANA_DRAIN && isManaDrain == false)) { //新增闇盲咒術 CURSE_BLIND、
                              // 黑暗之影 DARKNESS、暗黑盲咒(黑妖的) DARK_BLIND、沉睡之霧無效 FOG_OF_SLEEPING by 9001183ex增加衝暈 SHOCK_STUN by mca 20081223
return true;
}
return false;
}
}
完畢

接著再修改
l1j\server\server\model\L1Magic.java

設定這個魔法的成功率限制,

找到這一段

// 起死回生機率限制
if (skillId == TURN_UNDEAD && _calcType == PC_NPC) {
    if (_pc.isWizard() && probability > 70) { // 法師
    probability = 70;
    } else if (_pc.isElf()) { // 妖精
    if (probability > 70) {
      probability = 55;
    } else {
      probability /= 2;
    }
    }
}
// 起死回生機率限制end
改成這樣

// 起死回生機率限制
if ((skillId == TURN_UNDEAD || skillId == SUPER_TURN_UNDEAD) && _calcType == PC_NPC) {
    if (_pc.isWizard() && probability > 70) { // 法師
    probability = 70;
    } else if (_pc.isElf()) { // 妖精
    if (probability > 70) {
      probability = 55;
    } else {
      probability /= 2;
    }
    }
}
// 起死回生機率限制end
核心修改完畢,
接著開始修改DB的部份。

skills
新增一筆資料:

177 集體起死回生術 0 0 45 20 40318 1 3000 0 none 2 0 0 0 0 7 1 19 4 0 0 5 0 0761 0 0 280 00 0
etcitem
新增一筆資料:
9000 究極起死回生術 究極起死回生術 other normal none 0 3095 776 0 0 0 0 0 0 0 0 0 0 1 1 5 5000 0 0 1
william_item_magic
新增一筆資料:
9000 0 0 177 0
完畢,
黑妖法術(自爆)java文章

在C_RequestItemUSe.java
在public class C_RequestItemUSe extends ClientBasePacket { 下方新增

private L1PcInstance player = null;
public int Damage = 10;

在隨便一個private 上方加入

private void areaskill( L1PcInstance npc, int dmg, int vis) // 攻集npc
{
      Random random = new Random();
                //(以自身)計算攻擊範圍-使用方式areaskill(player,(int)d,幾格的範圍)
      L1Object visibleObjects[] = L1World.getInstance().getVisibleObjects(npc, vis);
      for(int i = 0; i < visibleObjects.length; i++)
      {
            if(visibleObjects == null)
                continue;
            if(visibleObjects instanceof L1MonsterInstance)
            {
                L1NpcInstance targetNpc = (L1NpcInstance)visibleObjects;
                targetNpc.ReceiveDamage(targetNpc,dmg, 0); // 怪被範圍魔法打死的怪經驗不會給玩家
                        
            }
      }
}
同樣的 在隨便一個private 地方加入
private void area3skill( L1PcInstance player, int dmg, int vis) // 攻集玩家
{
         
      Random random = new Random();
                //(以自身)計算攻擊範圍-使用方式areaskill(player,(int)d,幾格的範圍)
          L1Object al1object[] = L1World.getInstance().getVisibleObjects(player , vis);
      for (int j = 0; j < al1object.length; j++)
      {
            if(al1object == null)
                continue;
            if(al1object instanceof L1PcInstance)
            {
                L1PcInstance l1pcinstance = (L1PcInstance)al1object;
                l1pcinstance.ReceiveDamage(l1pcinstance,dmg, 0);
                        
            }
      }
}
在C_RequestItemUSe.java加入
在隨便一個物品下面加入
限定黑妖才能使用~~
else if (itemId == 80002) { // 自爆法術
    if (l1pcinstance.get_classId() == 2786|| l1pcinstance.get_classId() == 2796 ){//這邊是限定黑妖才能使用
      if(l1pcinstance.get_level() >= 70 ){//等級需到達70才會有以下效果
      int dmg = l1pcinstance.get_currentHp() + Damage; // 傷害 = 黑妖目前的血量 + 傷害
      areaskill(l1pcinstance,(int)dmg, 8);//八格以內的npc受到傷害
      area3skill(l1pcinstance,(int)dmg, 8);//八格以內的玩家受到傷害
      l1pcinstance.sendPackets(new S_AttackStatus(l1pcinstance,2, 19)); //施法動作
      l1pcinstance.broadcastPacket(new S_AttackStatus(l1pcinstance, 2, 19));
      l1pcinstance.sendPackets(new S_SkillSound(j, 4890));   
      l1pcinstance.broadcastPacket(new S_SkillSound(j, 4890));
      l1pcinstance.sendPackets(new S_SkillSound(j, 4611));   
      l1pcinstance.broadcastPacket(new S_SkillSound(j, 4611));
      l1pcinstance.Death((L1PcInstance)l1pcinstance); //使用者 死亡
      l1pcinstance.set_exp(l1pcinstance.get_exp() - dmg * 500); //經驗值倒扣公式為 傷害 * 500 (血量月多者 給予傷害月大 但經驗相對 倒扣月多                  
          }else
          if(l1pcinstance.get_level() <= 69){ //如果玩家等級小於 69級 出現以下訊息
            l1pcinstance.sendPackets(new S_SystemMessage("你的等級不足以承受這力量"));
      }
    }
    }
騎士魔法(死騎震裂)
修改檔案:C_RequestItemUSe.java
在public class C_RequestItemUSe extends ClientBasePacket { 下方新增

private L1PcInstance player = null;
public int Damage = 10;

在隨便一個private 上方加入(如遺失此程式碼可在L1Attack檔案裡尋獲)
private void areaskill( L1PcInstance npc, int dmg, int vis) // 攻集npc
{
Random random = new Random();
//(以自身)計算攻擊範圍-使用方式areaskill(player,(int)d,幾格的範圍)
L1Object visibleObjects[] = L1World.getInstance().getVisibleObjects(npc, vis);
for(int i = 0; i < visibleObjects.length; i++)
{
if(visibleObjects == null)
continue;
if(visibleObjects instanceof L1MonsterInstance)
{
L1NpcInstance targetNpc = (L1NpcInstance)visibleObjects;
targetNpc.ReceiveDamage(targetNpc,dmg, 0); // 怪被範圍魔法打死的怪經驗不會給玩家

}
}
}
同樣的 在隨便一個private 地方加入(如遺失此程式碼可在L1Attack檔案裡尋獲)
private void area3skill( L1PcInstance player, int dmg, int vis) // 攻集玩家
{

Random random = new Random();
//(以自身)計算攻擊範圍-使用方式areaskill(player,(int)d,幾格的範圍)
L1Object al1object[] = L1World.getInstance().getVisibleObjects(player , vis);
for (int j = 0; j < al1object.length; j++)
{
if(al1object == null)
continue;
if(al1object instanceof L1PcInstance)
{
L1PcInstance l1pcinstance = (L1PcInstance)al1object;
l1pcinstance.ReceiveDamage(l1pcinstance,dmg, 0);

}
}
}
請在隨便一個物品下面加入(以下是我參照mack078大大(黑妖自爆)所修改的)
else if (k == 70005) { // 騎士震裂
if (l1pcinstance.get_classId() == 61 || l1pcinstance.get_classId() == 48 ){ //這邊是限定騎士才能使用

if(l1pcinstance.get_level() >= 80){ //等級需到達80才會有以下效果
int dmg = l1pcinstance.get_baseStr() * 30;// 傷害 = 騎士目前最大的力量 * 30
areaskill(l1pcinstance,(int)dmg, 5); //5格以內的npc受到傷害
area3skill(l1pcinstance,(int)dmg, 5); //5格以內的玩家受到傷害
l1pcinstance.set_currentHp(l1pcinstance.get_currentHp() - 800);//目前血量扣800
l1pcinstance.set_currentMp(l1pcinstance.get_currentMp() - 400); //目前血量扣400
l1pcinstance.sendPackets(new S_AttackStatus(l1pcinstance,2, 19)); //施法動作
l1pcinstance.broadcastPacket(new S_AttackStatus(l1pcinstance, 2, 19));
l1pcinstance.sendPackets(new S_SkillSound(j, 245)); //魔法特效用死騎地震
l1pcinstance.broadcastPacket(new S_SkillSound(j, 245));//因搭配玩家變身死騎、荒神
}else
if(l1pcinstance.get_level() <= 79){ //如果玩家等級小於 80級 出現以下訊息
l1pcinstance.sendPackets(new S_SystemMessage("你的等級低於80級,以致無法施展此技能"));
}
}
} else
全部只需要在C_RequestItemUSe.java檔案裡修改或新增
if (k == 70005)←這是我設定的物品編號,可自行修改
只要記得在物品etcitem新增你要的物品編號(我在DELAY_TIME這設定延遲5秒)



感謝於~天天~轉帖!

camper0830 發表於 2020-2-1 21:48

感謝分享

19870922 發表於 2020-2-1 23:08

感謝分享

akb48 發表於 2020-3-19 18:19

感謝好文分享

野性覺醒 發表於 2020-3-20 18:14

來學習的 ,謝謝大大分享

19870922 發表於 2020-3-20 19:21

感謝分享

野性覺醒 發表於 2020-3-29 19:18

很棒的教學, 非常感謝

rtwey 發表於 2020-5-4 03:07

謝謝大大無私的分享

山口勝平 發表於 2020-12-28 14:26

感謝分享

19870922 發表於 2020-12-29 18:42

感謝分享

world168 發表於 2021-3-7 15:42

感謝分享

world168 發表於 2021-3-8 13:49

感謝分享

野性覺醒 發表於 2021-3-9 04:26

謝謝分享

野性覺醒 發表於 2021-3-25 00:25

感謝大大 無私分享

asrr7654 發表於 2021-3-25 00:37

感謝大大分享

sunny1414 發表於 2021-4-18 17:07

感謝分享

sunny1414 發表於 2021-4-18 17:07

感謝分享

jaden1988 發表於 2021-6-23 00:34

感謝分享

powerdream 發表於 2021-6-23 08:37

感謝大大分享

j89211047 發表於 2021-6-23 08:49

謝謝分享~
頁: [1] 2 3
查看完整版本: 自創技能修改