ソースコード編集

「ソースコード編集」の編集履歴(バックアップ)一覧はこちら

ソースコード編集」(2008/06/29 (日) 22:30:59) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

* ソースコードの編集 ソースコードに手を加えないと実現できないことを書く。 てゆーか、ソースみて思いついたことのメモっぽいw #contents() ** マナポーション 使えないので、調べてみた。実装されていなかった。 - 前の実装は履歴みてないのでよくわからんが、残骸が gameserver/model/L2Potion.java っぽかった。これみると 435 MP回復させるみたい。 - 1.マナポのスキルを空いているスキルIDに突っ込む。瞬間POTの定義を参考にした -- datapack_development/data/stats/skills/2500-2599.xml を L2J_JP/data/stats/skills にコピーして編集 --- 最後の行「</list>」の直前にこれを突っ込む。番号は空いてたので適当につけた。 <!--added by gyo--> <skill id="2555" levels="1" name="Mana Potion"> <set name="power" val="435.0"/> <set name="target" val="TARGET_SELF"/> <set name="skillType" val="MANAHEAL"/> <set name="operateType" val="OP_ACTIVE"/> <set name="castRange" val="-1"/> <set name="effectRange" val="-1"/> <set name="isPotion" val="true"/> <for> </for> </skill> - 2.アイテムハンドラにマナポの動作を定義。これが簡易版の最初の方法 -- L2J_JP/java/net/sf/l2j/gameserver/handler/itemhandlers/Potion.java --- ソースのcase文とこで727の次にこれを追記 // added by gyo case 728: // mana_potion, xml: 2555 by gyo res = usePotion(activeChar, 2555, 1); break; *** 簡易ハック版 使えないので、どっちかをやってみる。 - L2J_JP/java/net/sf/l2j/gameserver/handler/itemhandlers/Potion.java --ソースのcase文とこで727の次にこれを追記。マナポのID 728を「強力マナのハーブ」と同じ扱いにしてみる。 // added by gyo case 728: // mana_potion, xml: ? res = usePotion(activeChar, 2279, 2); break; -- 「超強力マナのハーブ」2279, 3 だとMPが全快しちまった。。。 - L2J_JP/java/net/sf/l2j/gameserver/model/L2Potion.java -- 「setCurrentHpPotion1」とこにある次の記述を、「setCurrentMpPotion1」のブロックにコピペする。これで726の「マナ回復補助ポーション」も使えるのかな? // added by gyo case (728): double nowMp = activeChar.getMaxMp(); nowMp+=435; if (nowMp>= activeChar.getMaxMp()) { nowMp = activeChar.getMaxMp(); } activeChar.setCurrentMp(nowMp); break; case (726): _milliseconds = 500; _duration = 15; _effect = 1.5; startPotionMpRegeneration(activeChar); break; -- これは意味なかった。。。使えないアイテムはhandlerの方で動作を定義するのな ** お餅 お餅も実装されてないじゃん。 -スキルXMLの2136にHP回復だけの定義はあるけど、コアシステムがHPとMP同時回復設定をサポートしてくれないとダメポて書いてある -- <!-- Needs Core support: Heal HP 3% & heal MP 1% at the same time --> つーことで、本来はショボい代物。本鯖でもそんなもんだった記憶があるし - http://www.l2j-jp.info/forum/viewtopic.php?t=365 - java/net/sf/l2j/gameserver/handler/itemhandlers/Potions.java -- いじってなければ171行目、マナポのコードを追加してたら174行目あたりの、case 5591:の直前にこれを突っ込む --- 参照URLんとこだと、お餅がスペシャルアイテム化しとる。HPMP全回復て。。。ライフキューブやめて、ポーションの最後のパラメータを「1」にすると本来の挙動に近くなるはず。。。せめて「2」くらいにしとかないとつまらん。 // added by gyo case 5283: // Rice Cake //res = usePotion(activeChar, 4338, 1); //Life Cubic For Novice //res |= usePotion(activeChar, 2278, 3); //Superior Herb of Life //res |= usePotion(activeChar, 2279, 3); //Superior Herb of Mana res = true; usePotion(activeChar, 2278, 2); //Greater Herb of Life usePotion(activeChar, 2279, 2); //Greater Herb of Mana break; - マナポとお餅のコード追加で、426行目。フォーラムには、お餅を使用済みにするにはif文はこうじゃない?って書いてあったけど、その後変更になったようでハーブ判定の記述はなかったぞ?これはとりあえず見送り。参考までにメモっとく // [L2J_JP EDIT - TSL] if (res || item.getItemType() == L2EtcItemType.HERB || itemId == 5283) - ん~、これじゃだめみたいだ。お餅つかえないや。。。こいつはどうかな? // added by gyo case 5283: // Rice Cake res = usePotion(activeChar, 2136, 1); usePotion(activeChar, 2279, 1); break; ** キャラクター名が3文字未満のキャラが作成できない件 - L2_GameServer/net/sf/l2j/gameserver/clientpackets/CharacterCreate.java -- 107行目 // from http://www.l2j-jp.info/forum/viewtopic.php?t=11 // else if ((_name.length() < 3) || (_name.length() > 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) else if ((_name.length() < 1) || (_name.length() > 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) - L2_JPでは適用されてた。。。本家のソースみてた。。。 // [L2J_JP EDIT - TSL] else if ((_name.length() < 1) || (_name.length() > 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) ** 重量制限を100%まで無効にする - java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java -- 1837行目~ // edit by gyo from http://www.l2j-jp.info/forum/viewtopic.php?t=11 // if (weightproc < 500 || _dietMode) if (weightproc < 1000 || _dietMode) { newWeightPenalty = 0; } // edit by gyo from http://www.l2j-jp.info/forum/viewtopic.php?t=11 // else if (weightproc < 666) // { // newWeightPenalty = 1; // } // else if ( weightproc < 800) // { // newWeightPenalty = 2; // } // else if (weightproc < 1000) // { // newWeightPenalty = 3; // } else { newWeightPenalty = 4; } ** OEの上昇値の変更 - 参考URL:http://eiyouchu.blog69.fc2.com/blog-entry-86.html - ソース:java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java -- 384行目あたり item.setEnchantLevel(item.getEnchantLevel() + 1); -- この「+ 1」が上昇値。数字を書き換えれば1枚貼るとその数字分OE値が上がるみたい。 - てことで、1枚目というか+0に貼ると+30、2枚目以降は+5づつ増えるようにするにはこの行をこう書き換えるといいのかな? // edit by gyo //item.setEnchantLevel(item.getEnchantLevel() + 1); if (item.getEnchantLevel() == 0) { //1枚目 item.setEnchantLevel(30); } else { // 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 5); } - Nスク、祝スク、クリスクで動作を変えるには、さらに条件を追加しないといかんので、これに置き換える。めんどい。。。 Nスクは1枚目+30で2枚目以降+5づつ、祝スクは1枚目+40で2枚目以降+2づつ、クリスクは1枚目+50で2枚目以降+1づつ、にする例。とにかく + の後の数字を書き換えればやりたいようにできる。 -- こんなんだから、武器と防具とアクセでさらに変えようとかは思わないほうがよさげw // edit by gyo //item.setEnchantLevel(item.getEnchantLevel() + 1); for (int scrollId : ENCHANT_SCROLLS) { // Nスクの動作 if (scroll.getItemId() == scrollId) { if (item.getEnchantLevel() == 0) { //1枚目 item.setEnchantLevel(30); } else { // 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 5); } break; } } for (int scrollId : BLESSED_SCROLLS) { // 祝スクの動作 if (scroll.getItemId() == scrollId) { if (item.getEnchantLevel() == 0) { //1枚目 item.setEnchantLevel(40); } else { // 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 2); } break; } } for (int scrollId : CRYSTAL_SCROLLS) { // クリスクの動作 if (scroll.getItemId() == scrollId) { if(item.getEnchantLevel() == 0){ //1枚目 item.setEnchantLevel(50); } else { // 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 1); } break; } } ** 染料の上限撤廃 - 5以上にできるようにしちゃう - java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java - private void recalcHennaStats() -- 7536行目~ この6行をコメントアウトしちゃう // edit by gyo //if (_hennaINT>5)_hennaINT=5; //if (_hennaSTR>5)_hennaSTR=5; //if (_hennaMEN>5)_hennaMEN=5; //if (_hennaCON>5)_hennaCON=5; //if (_hennaWIT>5)_hennaWIT=5; //if (_hennaDEX>5)_hennaDEX=5; ** レイド石化・沈黙解除 レイドよりレベルが8以上高くても石化・沈黙しないようにする - java/net/sf/l2j/gameserver/model/L2Character.java - 石化対応:protected void onHitTimer(...) -- 5345行目~ if (level > target.getLevel() + 8) -- の「8」をありえない程高い数字に書き換える。レイドは20からしかいないから80とかでいいかも - 沈黙対応:public void callSkill(...) -- 6408行目~ if ((target.isRaid() && getLevel() > target.getLevel() + 8) || (target2 instanceof L2Character && (((L2Character)target2).isRaid() && getLevel() > ((L2Character)target2).getLevel() + 8))) -- の「8」を2つとも80とかに書き換える。 ** テレポートキューブ - http://ameblo.jp/yqq01307/archive3-200704.html - やってみるかな ** GMショップのアイテム編集 - http://ameblo.jp/yqq01307/archive1-200704.html - めんどくさそ ** 装備品のグレードペナルティ廃止 うまくいくとエキスパーティーズなくてもLv1からS80とか装備できるけど、面白いのか微妙だなぁ - L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java - refreshExpertisePenalty() で何もしないようにすればできそう -- 1912行目あたり、メソッドの1行目に追加 return; -- 以降、メソッド内全部コメントアウトw ** オンラインプレーヤーのリスト表示コマンド追加 海外サイトで見つけた。たぶん「/online」でシステムメッセージにプレーヤー名をリスト表示させる機能を追加するもの。いらいないけど、参考までに置いておく。 - {{ref OnlinePlayers.txt}} ======<Players Online>====== プレーヤー名 ... ======================= - パッチだから、最初の4行のファイルパスを書き換えて、patchコマンドを実行するだけ。GNUのWindows版でもあれば使える ---- #comment
* ソースコードの編集 ソースコードに手を加えないと実現できないことを書く。 てゆーか、ソースみて思いついたことのメモっぽいw #contents() ** マナポーション 使えないので、調べてみた。実装されていなかった。 - 前の実装は履歴みてないのでよくわからんが、残骸が gameserver/model/L2Potion.java っぽかった。これみると 435 MP回復させるみたい。 - 1.マナポのスキルを空いているスキルIDに突っ込む。瞬間POTの定義を参考にした -- datapack_development/data/stats/skills/2500-2599.xml を L2J_JP/data/stats/skills にコピーして編集 --- 最後の行「</list>」の直前にこれを突っ込む。番号は空いてたので適当につけた。 <!--added by gyo--> <skill id="2555" levels="1" name="Mana Potion"> <set name="power" val="435.0"/> <set name="target" val="TARGET_SELF"/> <set name="skillType" val="MANAHEAL"/> <set name="operateType" val="OP_ACTIVE"/> <set name="castRange" val="-1"/> <set name="effectRange" val="-1"/> <set name="isPotion" val="true"/> <for> </for> </skill> - 2.アイテムハンドラにマナポの動作を定義。これが簡易版の最初の方法 -- L2J_JP/java/net/sf/l2j/gameserver/handler/itemhandlers/Potion.java --- ソースのcase文とこで727の次にこれを追記 // added by gyo case 728: // mana_potion, xml: 2555 by gyo res = usePotion(activeChar, 2555, 1); break; *** 簡易ハック版 使えないので、どっちかをやってみる。 - L2J_JP/java/net/sf/l2j/gameserver/handler/itemhandlers/Potion.java --ソースのcase文とこで727の次にこれを追記。マナポのID 728を「強力マナのハーブ」と同じ扱いにしてみる。 // added by gyo case 728: // mana_potion, xml: ? res = usePotion(activeChar, 2279, 2); break; -- 「超強力マナのハーブ」2279, 3 だとMPが全快しちまった。。。 - L2J_JP/java/net/sf/l2j/gameserver/model/L2Potion.java -- 「setCurrentHpPotion1」とこにある次の記述を、「setCurrentMpPotion1」のブロックにコピペする。これで726の「マナ回復補助ポーション」も使えるのかな? // added by gyo case (728): double nowMp = activeChar.getMaxMp(); nowMp+=435; if (nowMp>= activeChar.getMaxMp()) { nowMp = activeChar.getMaxMp(); } activeChar.setCurrentMp(nowMp); break; case (726): _milliseconds = 500; _duration = 15; _effect = 1.5; startPotionMpRegeneration(activeChar); break; -- これは意味なかった。。。使えないアイテムはhandlerの方で動作を定義するのな ** お餅 お餅も実装されてないじゃん。 -スキルXMLの2136にHP回復だけの定義はあるけど、コアシステムがHPとMP同時回復設定をサポートしてくれないとダメポて書いてある -- <!-- Needs Core support: Heal HP 3% & heal MP 1% at the same time --> つーことで、本来はショボい代物。本鯖でもそんなもんだった記憶があるし - http://www.l2j-jp.info/forum/viewtopic.php?t=365 - java/net/sf/l2j/gameserver/handler/itemhandlers/Potions.java -- いじってなければ171行目、マナポのコードを追加してたら174行目あたりの、case 5591:の直前にこれを突っ込む --- 参照URLんとこだと、お餅がスペシャルアイテム化しとる。HPMP全回復て。。。ライフキューブやめて、ポーションの最後のパラメータを「1」にすると本来の挙動に近くなるはず。。。せめて「2」くらいにしとかないとつまらん。 // added by gyo case 5283: // Rice Cake //res = usePotion(activeChar, 4338, 1); //Life Cubic For Novice //res |= usePotion(activeChar, 2278, 3); //Superior Herb of Life //res |= usePotion(activeChar, 2279, 3); //Superior Herb of Mana res = true; usePotion(activeChar, 2278, 2); //Greater Herb of Life usePotion(activeChar, 2279, 2); //Greater Herb of Mana break; - マナポとお餅のコード追加で、426行目。フォーラムには、お餅を使用済みにするにはif文はこうじゃない?って書いてあったけど、その後変更になったようでハーブ判定の記述はなかったぞ?これはとりあえず見送り。参考までにメモっとく // [L2J_JP EDIT - TSL] if (res || item.getItemType() == L2EtcItemType.HERB || itemId == 5283) - ん~、これじゃだめみたいだ。お餅つかえないや。。。こいつはどうかな? // added by gyo case 5283: // Rice Cake res = usePotion(activeChar, 2136, 1); usePotion(activeChar, 2279, 1); break; ** キャラクター名が3文字未満のキャラが作成できない件 - L2_GameServer/net/sf/l2j/gameserver/clientpackets/CharacterCreate.java -- 107行目 // from http://www.l2j-jp.info/forum/viewtopic.php?t=11 // else if ((_name.length() < 3) || (_name.length() > 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) else if ((_name.length() < 1) || (_name.length() > 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) - L2_JPでは適用されてた。。。本家のソースみてた。。。 // [L2J_JP EDIT - TSL] else if ((_name.length() < 1) || (_name.length() > 16) || !Util.isAlphaNumeric(_name) || !isValidName(_name)) ** 重量制限を100%まで無効にする - java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java -- 1837行目~ // edit by gyo from http://www.l2j-jp.info/forum/viewtopic.php?t=11 // if (weightproc < 500 || _dietMode) if (weightproc < 1000 || _dietMode) { newWeightPenalty = 0; } // edit by gyo from http://www.l2j-jp.info/forum/viewtopic.php?t=11 // else if (weightproc < 666) // { // newWeightPenalty = 1; // } // else if ( weightproc < 800) // { // newWeightPenalty = 2; // } // else if (weightproc < 1000) // { // newWeightPenalty = 3; // } else { newWeightPenalty = 4; } ** OEの上昇値の変更 - 参考URL:http://eiyouchu.blog69.fc2.com/blog-entry-86.html - ソース:java/net/sf/l2j/gameserver/clientpackets/RequestEnchantItem.java -- 384行目あたり item.setEnchantLevel(item.getEnchantLevel() + 1); -- この「+ 1」が上昇値。数字を書き換えれば1枚貼るとその数字分OE値が上がるみたい。 - てことで、1枚目というか+0に貼ると+30、2枚目以降は+5づつ増えるようにするにはこの行をこう書き換えるといいのかな? // edit by gyo //item.setEnchantLevel(item.getEnchantLevel() + 1); if (item.getEnchantLevel() == 0) { //1枚目 item.setEnchantLevel(30); } else { // 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 5); } - Nスク、祝スク、クリスクで動作を変えるには、さらに条件を追加しないといかんので、これに置き換える。めんどい。。。 Nスクは1枚目+30で2枚目以降+5づつ、祝スクは1枚目+40で2枚目以降+2づつ、クリスクは1枚目+50で2枚目以降+1づつ、にする例。とにかく + の後の数字を書き換えればやりたいようにできる。 -- こんなんだから、武器と防具とアクセでさらに変えようとかは思わないほうがよさげw // edit by gyo //item.setEnchantLevel(item.getEnchantLevel() + 1); for (int scrollId : ENCHANT_SCROLLS) { // Nスクの動作 if (scroll.getItemId() == scrollId) { if (item.getEnchantLevel() == 0) { //1枚目 item.setEnchantLevel(30); } else { // 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 5); } break; } } for (int scrollId : BLESSED_SCROLLS) { // 祝スクの動作 if (scroll.getItemId() == scrollId) { if (item.getEnchantLevel() == 0) { //1枚目 item.setEnchantLevel(40); } else { // 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 2); } break; } } for (int scrollId : CRYSTAL_SCROLLS) { // クリスクの動作 if (scroll.getItemId() == scrollId) { if(item.getEnchantLevel() == 0){ //1枚目 item.setEnchantLevel(50); } else { // 2枚目以降 item.setEnchantLevel(item.getEnchantLevel() + 1); } break; } } ** 染料の上限撤廃 - 5以上にできるようにしちゃう - java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java - private void recalcHennaStats() -- 7536行目~ この6行をコメントアウトしちゃう // edit by gyo //if (_hennaINT>5)_hennaINT=5; //if (_hennaSTR>5)_hennaSTR=5; //if (_hennaMEN>5)_hennaMEN=5; //if (_hennaCON>5)_hennaCON=5; //if (_hennaWIT>5)_hennaWIT=5; //if (_hennaDEX>5)_hennaDEX=5; ** レイド石化・沈黙解除 レイドよりレベルが8以上高くても石化・沈黙しないようにする - java/net/sf/l2j/gameserver/model/L2Character.java - 石化対応:protected void onHitTimer(...) -- 5345行目~ if (level > target.getLevel() + 8) -- の「8」をありえない程高い数字に書き換える。レイドは20からしかいないから80とかでいいかも - 沈黙対応:public void callSkill(...) -- 6408行目~ if ((target.isRaid() && getLevel() > target.getLevel() + 8) || (target2 instanceof L2Character && (((L2Character)target2).isRaid() && getLevel() > ((L2Character)target2).getLevel() + 8))) -- の「8」を2つとも80とかに書き換える。 ** 装備品のグレードペナルティ廃止 うまくいくとエキスパーティーズなくてもLv1からS80とか装備できるけど、面白いのか微妙だなぁ - L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java - refreshExpertisePenalty() で何もしないようにすればできそう -- 1912行目あたり、メソッドの1行目に追加 return; -- 以降、メソッド内全部コメントアウトw ** オンラインプレーヤーのリスト表示コマンド追加 海外サイトで見つけた。たぶん「/online」でシステムメッセージにプレーヤー名をリスト表示させる機能を追加するもの。いらいないけど、参考までに置いておく。 - {{ref OnlinePlayers.txt}} ======<Players Online>====== プレーヤー名 ... ======================= - パッチだから、最初の4行のファイルパスを書き換えて、patchコマンドを実行するだけ。GNUのWindows版でもあれば使える ---- #comment

表示オプション

横に並べて表示:
変化行の前後のみ表示: