ソースコード編集


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ソースコードの編集


ソースコードに手を加えないと実現できないことを書く。
てゆーか、ソースみて思いついたことのメモっぽいw


マナポーション

使えないので、調べてみた。実装されていなかった。
  • 前の実装は履歴みてないのでよくわからんが、残骸が 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の上昇値の変更

				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版でもあれば使える


名前:
コメント: