L2J_JP構築メモ Edit

低消費電力、静音なPPC Mac miniでL2Jサーバを走らせる。

  • 必要なツール類
    • Java 1.5 … L2JはJavaで記述されている。MacOSX 10.4 Tigerに付属。
    • Eclipse … Javaの統合開発環境セット
    • MySQL … データベース
    • phpMyAdmin … WEBブラウザからデータベース管理を行うツール。MacOSXに付属するApache、PHPと連携して動作する。


下準備 Edit

Tigerへアップグレード(MacOSX 10.3.9 → 10.4.6) Edit

  • J2SE 5.0 (Java 1.5)
    MacOSX(Tiger)に付属します。Tigerへアップグレード(2006/6/1)

MySQL 4.1 Edit

  • mysql-standard-4.1.20-apple-darwin8.6.0-powerpc.dmg をダウンロード … ここから
  • 次の3つのファイルをインストール
    • mysql-standard-4.1.20-apple-darwin8.6.0-powerpc.pkg
    • MySQLStartupItems.pkg
    • MySQL.prefPane … システム環境設定からMySQLの制御が可能になる。
  • /etc/php.iniへソケットの場所を指定
    # cp /etc/php.ini.default /etc/php.ini
    
    /etc/php.iniの661行目付近を修正
    mysql.default_socket = /tmp/mysql.sock
    
    システム環境設定→共有の「パーソナルWEB共有」を再起動すればOKです。
  • 〜/.profileへパス設定を追加
    PATH=/opt/local/bin:/usr/local/mysql/bin:$PATH
    
    パス設定を反映
    $ . ~/profile
    
  • 動作確認
    $ mysqlshow
    +-----------+
    | Databases |
    +-----------+
    | test      |
    +-----------+
    

phpMyAdmin Edit

Eclipse Edit

  • jp.sourceforge.mergedoc.pleiadesディレクトリをEclipseのpluginディレクトリへ格納。
  • eclipse.ini (Eclipse.app/Contents/MacOS/eclipse.ini)の最終行へ下記を追加
    jarファイルを絶対パスで指定するのがミソ。
    -javaagent:/Aplications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
    

L2J_JPサーバの作成 Edit

  • ソースの取得
    全てをEclipse上で行う。
    まずEclipseを起動し、画面右下のSVNリポジトリを右クリックして、リポジトリーロケーションを選択する。
    svn1.png

    サーバを指定する。
    svn2.png

    リポジトリL2J_JPを右クリックしてチェックアウトを選択する。
    svn3.png

    オプションを聞かれたら、 「プロジェクトとしてワークスペースへチェックアウト」を選択する。

  • ビルド
    「パッケージエクスポローラー」の中のL2J_JPを選択して、
    画面上部のボタン「実行 L2J_JP build.xml」を押せばOKです。
    build1.png

    「BUILD SUCCESSFUL」と表示されればビルドは終了です。(私のMacminiでは9分ほどかかりました。)

  • L2Jサーバの設置
    〜/Document/workspace/L2J_JP/build/dist フォルダがL2J_JPのサーバ環境一式になります。
    サーバの設置場所(どこでもOK)を決めてそこにコピーしておきましょう。
    $ cp -R ~/Document/workspace/L2J_JP/dist ~/L2J_JP
    
  • シェルスクリプトに実行属性を付加
    $ cd ~/L2J_JP
    $ find . -name "*.sh" -exec chmod +x {} \;
    

L2J_JPデータベースの作成 Edit

  • キャラクタ名を日本語表示するための設定
    /etc/my.cnfを用意(存在しないなら)
    $ sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf 
    
    /etc/my.cnf の [mysqld]、[mysql]の項へ文字コードの設定を追加。その設定を反映させるべくMySQLサーバを再起動する。
    [mysqld]
    default-character-set=utf8
    
    [mysql]
    default-character-set=sjis
    
    データベース l2jdb の作成と文字コードの確認
    $ mysql -u root
    mysql> create database l2jdb character set sjis;
    
    mysql> use l2jdb;
    mysql> show variables like 'character\_set\_%';
    +--------------------------+-------+
    | Variable_name            | Value |
    +--------------------------+-------+
    | character_set_client     | sjis  |
    | character_set_connection | sjis  |
    | character_set_database   | sjis  |
    | character_set_results    | sjis  |
    | character_set_server     | utf8  |
    | character_set_system     | utf8  |
    +--------------------------+-------+
    
    mysql> exit;
    
  • データベーステーブル/コンテンツの作成
    $ cd ~/L2J_LP/gameserver/tools
    $ ./database_installer.sh
    

L2J_JPサーバの設定 Edit

  • ネットワーク/MySQLアカウントの設定
    外部と接続する場合は、MySQLのuser/passwd等をちゃんと設定しましょう。
    ■ ~/L2J_JP/login/config/loginserver.properties
    InternalHostname = 192.168.1.11 # Mac miniのIP
    ExternalHostname = xxxx.ddo.jp  # WAN側IPアドレスを指定(ローカルで遊ぶならデフォルトでOK)
    login = root                    # MySQLデータベースのuser
    password =                      # MySQLデータベースのpasswd
    
    ■ ~/L2J_JP/gameserver/config/server.properties
    InternalHostname = 192.168.1.11 # Mac miniのIP
    ExternalHostname = xxxx.ddo.jp  # WAN側IPアドレスを指定(ローカルで遊ぶならデフォルトでOK)
    login = root                    # MySQLデータベースのuser
    password =                      # MySQLデータベースのpasswd
    

  • ゲームサーバの登録
    $ cd ~/L2J_JP/login
    $ ./RegisterGameServer.sh
    Enter The id of the server you want to register or type help to get a list of ids:
    Your choice: 1  ← 番号は何でも良いらしいがとりあえず1を選択
    
    Server Registered hexid saved to 'hexid(server 1).txt'
    Put this file in the /config folder of your gameserver and rename it to 'hexid.txt'
    
    hexidキーをgameserverへ登録する。
    $ cp hexid\(server 1\).txt ../gameserver/config/hexid.txt
    
  • ルータのポートフォワード
    下記ポートをMac miniへフォーワードするようにルータを設定する。
    実際私は外に繋いでないので間違っているかもしれませんが
    • TCP 7777
    • UDP 7777
    • TCP 2106
    • UDP 2106
  • L2J_JPサーバの起動
    $ cd ~/L2J_JP/login
    $ ./startLoginServer.sh
    
    $ cd ~/L2J_JP/gameserver
    $ ./startGameServer.sh
    
    

L2J_JPゲームパラメータの設定(お好みに応じて) Edit

  • jp_addonの適用(正しいかどうか自身ないけど・・・)
    $ cd ~/L2J_JP/gameserver/jp_addon
    $ mysql -u root l2jdb < sql/itemname_jp.sql
    $ mysql -u root l2jdb < sql/l2whdb.sql
    $ mysql -u root l2jdb < sql/updates_item.sql
    $ mysql -u root l2jdb < sql/updates_npc.sql
    
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/armor.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/etcitem.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/minions.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/npc.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/raidboss_spawnlist.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/random_spawn.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/random_spawn_loc.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/spawnlist.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql/weapon.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql_for_add/minions_C3AreaBoss.sql
    $ mysql -u root l2jdb < custum_sql_by_viento/sql_for_add/minions_C3GroupMob.sql
    
    $ cp -R data/* ../data
    
    #rev 303と314のアップデートを実行する。
    $ mysql -u root l2jdb < ~/L2J_JP/gameserver/sql/updates/20060613-\[303\].sql
    $ mysql -u root l2jdb < ~/L2J_JP/gameserver/sql/updates/20060619-\[314\].sql
    
  • パラメータいじり
    ■ ~/L2J_JP/gameserver/config/rates.properties
    RateXP = 20                       # 敵からの経験値(XP)を20倍に
    RateSP = 20                       # 敵からのスキルポイント?(SP)を20倍に 
    RatePartyXP = 5                   # パーティ行動時にはXP、さらに5倍
    RatePartySP = 5                   # パーティ行動時にはSP、さらに5倍
    
    RateDropAdera = 1000              # 敵が落とすアデナ(お金)を1000倍
    RateConsumableCost = 1.           # 消費剤(ss/sps/矢等)の売買コスト
    RateDropItems = 100               # 敵が落とすアイテム率、100倍
    RateDropSpoil = 3                 # Dwarf専用スキル、スポイルの成功確立を3倍
    
    PlayerDropLimit = 0               # 死亡時、アイテムを落さない。(最大0個落とす)
    PlayerRateDrop = 0                # 死亡時、ドロップ率0
    KarmaDropLimit = 0                # PKキャラ死亡時、アイテムを落さない。(最大0個落とす)
    KarmaRateDrop = 0                 # PKキャラ死亡時、ドロップ率0
    
    # ドロップ成立時の、アイテム、装備品、武器の3つのうちどれを落とすか?の確率(3合計で100)
    # 本例ではドロップ率が0なので、実質意味をなしてない。
    KarmaRateDropItem = 10         # アイテムを10%の確立で落とす
    KarmaRateDropEquip = 40           # 装備品を40%の確立で落とす
    KarmaRateDropEquipWeapon = 50     # 武器を50%の確立で落とす
    
    ■ ~/L2J_JP/gameserver/config/altsettings.properties
    Delevel = Fales                   # レベルや経験値(XP)が下がるペナルティの無効化
    AltGameExponentXP = 5             # レベル差に応じてXPを分配
    AltGameExponentSP = 5             # レベル差に応じてSPを分配
    AltGameCanselByHit = cast         # 敵攻撃により魔法詠唱がキャンセルされる(Falseにするとキャンセルなし)
    SpBookNeeded = False              # スキル取得の際、魔法書が不要になる
    AltGameSkillLearn = False         # Trueにすると全種族/クラスのスキルを取得できるようになる。
    AltSubClassWithoutQuests = True   # クエストなしでサブクラスになれる
    
    ■ ~/L2J_JP/gameserver/config/jp-custom.properties
    AltChangeable3rdClass = True      # 3次転職を可能にする
    
    ■ ~/L2J_JP/gameserver/config/options.properties
    ZoneTown = 1
    DeleteCharAfterDays = 1           # キャラクタ削除時、1日の猶予期間が与えられる。
    MaxDriftRange = 200               # default 200
    AllowRentPet = True
    AllowFishing = True
    
    ■ ~/L2J_JP/gameserver/config/other.properties
    StartingAdena = 2000000000        # キャラクタ作成時の初期アデナ(通貨)の量
    
    WyvernSpeed = 500                 # ワイバーン(飛竜)の移動速度5倍(default 100)
    StriderSpeed = 500                # ストラーダ(歩行竜)の移動速度5倍(default 80)
    
    UseDeepBlueDropRules = False
    
    MaximumSlotsForNoDwarf = 160      # 種族Dwarf以外の手持ちアイテム数
    MaximumSlotsForDwarf = 200        # 種族Dwarfの手持ちアイテム数
    MaximumSlotsForGMPlayer = 500     # GMの手持ちアイテム数
    
    EnchantCance = 100                # エンチャントの成功率を100%に
    EnchantMax = 200                  # +200までエンチャント可能(+200まで武器/防具を強化可能)
    
    HpRegenMultiplier = 200           # HPの自然回復速度200%
    MpRegenMultiplier = 200           # MPの自然回復速度200%
    CpRegenMultiplier = 200           # CPの自然回復速度200%
    
    RaidHpRegenMultiplier = 50        # RaidボスのHPの自然回復速度50%
    RaidMpRegenMultiplier = 50        # RaidボスのMPの自然回復速度50%
    RaidDefenceMultiplier = 20        # Raidボスの防御力          20%
    
    UnstuckInterval = 300
    
    RespawnRestoreCP = 90             # 復活時、総CP値の90%を回復する。
    RespawnRestoreHP = 90             # 復活時、総HP値の90%を回復する。
    RespawnRestoreMP = 90             # 復活時、総MP値の90%を回復する。
    
  • GMショップの設置
    • http://svn.tslroom.net/ の GM SHOP からダウンロード。
    • ReadMe.txt に従い、8031.html を所定の場所に格納。
    • GMショップのデータをl2jdpへ反映させます。
      $ mysql -u root l2jdb < ダウンロードした/gm_shop/gm_shop.SQL
      
  • GMキャラ
    • 作り方
      データベースを直接編集して普通に作ったキャラクタをGMキャラへ昇格させる。
      具体的には、phpMyAdminのようなデータベース管理ツールを使って、
      • データベース l2jdb 中の
      • accounts テーブルの 該当アカウントの access_level を 100 へ、さらに、
      • characters テーブルの 該当キャラの accesslevel を 100 へ変更すればOK
    • コマンド
      GMキャラで冒険中に、チャットウインドウへ次のコマンドを入力すると管理ツールが出現する。
      //admin
      
  • タヌキなアイテム … アイテムカスタマイズの例
    「タヌキの耳」を装備すると、最大CP/HP/MP、命中率、クリティカル、攻撃速度、魔法速度が30%向上する。
    他、HPドレイン10%のおまけ付。
    --- gameserver/data/stats/armor/7600-7699.xml.org 2006-06-04 16:53:46.000000000 +0900
    +++ gameserver/data/stats/armor/7600-7699.xml	2006-06-10 19:25:17.000000000 +0900
    @@ -3,6 +3,14 @@
     <item id='7680' name="Raccoon Ear">
       <for>
         <add val='0' order='0x10' stat='pDef' />
    +    <mul val='1.3' order='0x40' stat='maxCp'/>
    +    <mul val='1.3' order='0x40' stat='maxHp'/>
    +    <mul val='1.3' order='0x40' stat='maxMp'/>
    +    <mul val='1.3' order='0x40' stat='accCombat' />
    +    <mul val='1.3' order='0x40' stat='rCrit' />
    +    <mul val='1.3' order='0x40' stat='pAtkSpd' />
    +    <mul val='1.3' order='0x40' stat='mAtkSpd' />
    +    <add stat="absorbDam" val="10" order="0x50"/>
       </for>
     </item>
     <item id='7681' name="Outlaw's Eyepatch">
    
  • Javaソース変更(リビルド要)
    • 重量制限を100%まで無効にする。 ( http://svn.tslroom.net/forum/viewtopic.php?t=11 )
      --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java.orig	2006-06-11 21:21:36.000000000 +0900
      +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	2006-06-11 21:24:59.000000000 +0900
      @@ -1478,7 +1478,7 @@
       			setIsOverloaded(getCurrentLoad() > getMaxLoad());
       			int weightproc = getCurrentLoad() * 1000 / getMaxLoad();
       			int newWeightPenalty;
      -			if ( weightproc < 500) newWeightPenalty = 0;
      +			if ( weightproc < 1000) newWeightPenalty = 0;
       			else if ( weightproc < 666) newWeightPenalty = 1;
       			else if ( weightproc < 800) newWeightPenalty = 2;
       			else if ( weightproc < 1000) newWeightPenalty = 3;
      
      
    • Lv差8以上のレイドボス石化対策 ( http://svn.tslroom.net/forum/viewtopic.php?t=27 )
      --- java/net/sf/l2j/gameserver/model/L2Character.java.orig	2006-06-11 21:18:18.000000000 +0900
      +++ java/net/sf/l2j/gameserver/model/L2Character.java	2006-06-11 21:19:03.000000000 +0900
      @@ -3811,7 +3811,7 @@
       				activeWeapon.getSkillEffects(this, target, crit);
       			
       			// Check Raidboss attack
      -			if (target.isRaid() && getLevel() > target.getLevel() + 8)
      +			if (target.isRaid() && getLevel() > target.getLevel() + 80)
       			{
       				L2Skill skill = SkillTable.getInstance().getInfo(4515, 99);
                       
      @@ -4418,7 +4418,7 @@
       					}
       					
       					// Check Raidboss attack
      -					if (player.isRaid() && getLevel() > player.getLevel() + 8)
      +					if (player.isRaid() && getLevel() > player.getLevel() + 80)
       					{
       						L2Skill tempSkill = SkillTable.getInstance().getInfo(4515, 99);
       						if(tempSkill != null)
      
      
  • サブクラスを10個まで追加できるようにする。
    --- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSubClass.java.org
    +++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSubClass.java
    @@ -233,7 +233,7 @@ public class AdminSubClass implements IA
                             else
                                 playerMatrix = new Matrix(objectId, rset.getString("char_name"));
                             
    -                        if (playerMatrix.getNumSubClasses() == 3)
    +                        if (playerMatrix.getNumSubClasses() == 10)
                             {
                                 sendReport("WARN", "Warning | Player(" + …省略…
                                 continue;
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java.org
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
    @@ -6961,7 +6961,7 @@ public final class L2PcInstance extends 
          */
         public boolean addSubClass(int classId, int classIndex)
         {
    -    	if (getTotalSubClasses() == 3 || classIndex == 0) 
    +    	if (getTotalSubClasses() == 10 || classIndex == 0) 
         		return false;
         	
         	if (getSubClasses().containsKey(classIndex))
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java.org
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java
    @@ -143,7 +143,7 @@ public final class L2VillageMasterInstan
                 {
                     case 1: // Add Subclass - Initial
                         // Avoid giving player an option to add a new sub class, if they have three already.
    -                    if (player.getTotalSubClasses() == 3)
    +                    if (player.getTotalSubClasses() == 10)
                         {
                             player.sendMessage("You can now only change one of your current sub classes.");
                             return;
    
  • スキル拡張その1(改) … メインクラスで習得したスキルをサブクラスで使用できるようにする。
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java.org
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
    @@ -177,7 +177,10 @@ import net.sf.l2j.util.Point3D;
      */
     public final class L2PcInstance extends L2PlayableInstance
     {
    -	private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE char_obj_id=? AND class_index=?";
    +	private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,MAX(skill_level) AS skill_level FROM character_skills "+
    +	    "WHERE char_obj_id=? AND (class_index=0 AND (skill_name NOT IN "+
    +	    "(SELECT skill_name FROM character_skills WHERE char_obj_id=? AND class_index=? ) "+
    +	    ") OR class_index=?) GROUP BY skill_id";
     	private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (char_obj_id,skill_id,skill_level,skill_name,class_index) VALUES (?,?,?,?,?)";
     	private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND char_obj_id=? AND class_index=?";
     	private static final String DELETE_SKILL_FROM_CHAR = "DELETE FROM character_skills WHERE skill_id=? AND char_obj_id=? AND class_index=?";
    @@ -5173,7 +5176,9 @@ public final class L2PcInstance extends 
     			con = L2DatabaseFactory.getInstance().getConnection();
     			PreparedStatement statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR);
     			statement.setInt(1, getObjectId());
    -			statement.setInt(2, getClassIndex());
    +			statement.setInt(2, getObjectId());
    +			statement.setInt(3, getClassIndex());
    +			statement.setInt(4, getClassIndex());
     			ResultSet rset = statement.executeQuery();
     			
     			// Go though the recordset of this SQL query
    
  • スキル拡張その1(ボツ) … メインクラスで習得したスキルをサブクラスで使用できるようにする。
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java.org
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
    @@ -177,7 +177,7 @@ import net.sf.l2j.util.Point3D;
      */
     public final class L2PcInstance extends L2PlayableInstance
     {
    -	private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE char_obj_id=? AND class_index=?";
    +	private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,MAX(skill_level) AS skill_level FROM character_skills WHERE char_obj_id=? AND ( class_index=? OR class_index=0 ) GROUP BY skill_id";
     	private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (char_obj_id,skill_id,skill_level,skill_name,class_index) VALUES (?,?,?,?,?)";
     	private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND char_obj_id=? AND class_index=?";
     	private static final String DELETE_SKILL_FROM_CHAR = "DELETE FROM character_skills WHERE skill_id=? AND char_obj_id=? AND class_index=?";
    
  • スキル拡張その2 … メイン、サブで習得したすべてのスキルを使用できるようにする。
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java.org
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
    @@ -177,7 +177,7 @@ import net.sf.l2j.util.Point3D;
      */
     public final class L2PcInstance extends L2PlayableInstance
     {
    -	private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE char_obj_id=? AND class_index=?";
    +	private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,MAX(skill_level) AS skill_level FROM character_skills WHERE char_obj_id=? AND ( class_index=? OR 1) GROUP BY skill_id";
     	private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (char_obj_id,skill_id,skill_level,skill_name,class_index) VALUES (?,?,?,?,?)";
     	private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND char_obj_id=? AND class_index=?";
     	private static final String DELETE_SKILL_FROM_CHAR = "DELETE FROM character_skills WHERE skill_id=? AND char_obj_id=? AND class_index=?";
    
  • スキル拡張その2 … メイン、サブで習得したすべてのスキルを使用できるようにする。
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java.org
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
    @@ -174,7 +177,12 @@ import net.sf.l2j.util.Point3D;
      */
     public final class L2PcInstance extends L2PlayableInstance
     {
    -	private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE char_obj_id=? AND class_index=?";
    +        private static final String RESTORE_SKILLS_FOR_CHAR =
    +           "SELECT  ( (MIN(ABS(class_index-?)*65536+skill_id   ) ) & 0x0000ffff) AS skill_id, "+
    +           "        ( (MIN(ABS(class_index-?)*65536+skill_level) ) & 0x0000ffff) AS skill_level "+
    +           "FROM character_skills "+
    +           "WHERE ( class_index=0 OR class_index=? OR ?=0 ) AND char_obj_id=? "+
    +           "GROUP BY skill_name ORDER BY skill_id";
     	private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (char_obj_id,skill_id,skill_level,skill_name,class_index) VALUES (?,?,?,?,?)";
     	private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND char_obj_id=? AND class_index=?";
     	private static final String DELETE_SKILL_FROM_CHAR = "DELETE FROM character_skills WHERE skill_id=? AND char_obj_id=? AND class_index=?";
    @@ -5110,8 +5206,11 @@ public final class L2PcInstance extends 
     			// Retrieve all skills of this L2PcInstance from the database
     			con = L2DatabaseFactory.getInstance().getConnection();
     			PreparedStatement statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR);
    -			statement.setInt(1, getObjectId());
    +			statement.setInt(1, getClassIndex());
     			statement.setInt(2, getClassIndex());
    +			statement.setInt(3, getClassIndex());
    +			statement.setInt(4, getClassIndex());
    +			statement.setInt(5, getObjectId());
     			ResultSet rset = statement.executeQuery();
     			
     			// Go though the recordset of this SQL query
    
  • Hero武器を使う。(装備、床置き、倉庫出し入れが可能になる)
    --- java/net/sf/l2j/gameserver/clientpackets/RequestDropItem.java.org
    +++ java/net/sf/l2j/gameserver/clientpackets/RequestDropItem.java
    @@ -91,7 +91,7 @@ public class RequestDropItem extends Cli
             int itemId = item.getItemId();
             
             if ((itemId >= 6611 && itemId <= 6621) || itemId == 6842)
    -            return;
    +            ; // return;
             
             if(_count < 0)
             {
    --- java/net/sf/l2j/gameserver/clientpackets/SendWareHouseDepositList.java.org
    +++ java/net/sf/l2j/gameserver/clientpackets/SendWareHouseDepositList.java
    @@ -106,7 +106,7 @@ public class SendWareHouseDepositList ex
                 
                 int itemId = item.getItemId();
                 if ((itemId >= 6611 && itemId <= 6621) || itemId == 6842)
    -                continue;
    +                ; // continue;
     
     			// Calculate needed adena and slots
     			if (item.getItemId() == 57) currentAdena -= count;
    @@ -145,7 +145,7 @@ public class SendWareHouseDepositList ex
                 int itemId = oldItem.getItemId();
                 
                 if ((itemId >= 6611 && itemId <= 6621) || itemId == 6842)
    -                continue;
    +                ; // continue;
                 
     			L2ItemInstance newItem = player.getInventory().transferItem("Warehouse", objectId, count, warehouse, player, player.getLastFolkNPC());
                 if (newItem == null)
    --- java/net/sf/l2j/gameserver/model/Inventory.java.org
    +++ java/net/sf/l2j/gameserver/model/Inventory.java
    @@ -546,7 +546,7 @@ public abstract class Inventory extends 
                 L2PcInstance player = (L2PcInstance)getOwner();
                 
                 if(!player.isGM())
    -                if (!player.isHero())
    +                if(false) // if (!player.isHero())
                     {
                         int itemId = item.getItemId();
                         if ((itemId >= 6611 && itemId <= 6621) || itemId == 6842)
    @@ -779,7 +779,7 @@ public abstract class Inventory extends 
     	                L2PcInstance player = (L2PcInstance)getOwner();
     	                
     	                if(!player.isGM())
    -	                    if (!player.isHero())
    +	                    if(false) // if (!player.isHero())
     	                    {
     	                        int itemId = item.getItemId();
     	                        if ((itemId >= 6611 && itemId <= 6621) || itemId == 6842)
    


添付ファイル: fileaden3.jpg 232件 [詳細] filevara3.jpg 214件 [詳細] filebuild1.png 198件 [詳細] filesvn2.png 208件 [詳細] filesvn3.png 211件 [詳細] filesvn1.png 190件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-28 (水) 00:42:44 (6518d)