自創技能修改
新增進階精靈魔法:九重矢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秒)
感謝於~天天~轉帖!
感謝分享 感謝分享 感謝好文分享 來學習的 ,謝謝大大分享 感謝分享 很棒的教學, 非常感謝 謝謝大大無私的分享 感謝分享 感謝分享 感謝分享 謝謝分享 感謝大大 無私分享 感謝大大分享
感謝分享 感謝分享 感謝分享 感謝大大分享
謝謝分享~ 感謝分享