From 0c828bea2fc2a8a7cada077e2a1ae57c088e756b Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 28 Nov 2017 18:21:28 +0000 Subject: [PATCH] Multisell, augment and tax zone rework. Adapted from: L2jUnity free files. --- .../dist/game/config/Character.ini | 4 - .../dist/game/data/buylists/0000382.xml | 88 +- .../dist/game/data/buylists/0000383.xml | 88 +- .../dist/game/data/buylists/0335103.xml | 2 +- .../dist/game/data/buylists/0335145.xml | 2 +- .../dist/game/data/buylists/0335187.xml | 2 +- .../dist/game/data/buylists/0335229.xml | 2 +- .../dist/game/data/buylists/0335230.xml | 2 +- .../dist/game/data/buylists/0335231.xml | 2 +- .../dist/game/data/buylists/0335277.xml | 2 +- .../dist/game/data/buylists/0335319.xml | 2 +- .../dist/game/data/buylists/0335366.xml | 2 +- .../dist/game/data/buylists/0335383.xml | 2 +- .../dist/game/data/buylists/0335390.xml | 2 +- .../dist/game/data/buylists/0335421.xml | 2 +- .../dist/game/data/buylists/0335512.xml | 2 +- .../dist/game/data/buylists/0335558.xml | 2 +- .../dist/game/data/buylists/0335580.xml | 2 +- .../dist/game/data/buylists/0335582.xml | 2 +- .../dist/game/data/buylists/0335584.xml | 2 +- .../dist/game/data/buylists/0335586.xml | 2 +- .../dist/game/data/buylists/0335605.xml | 2 +- .../dist/game/data/buylists/0335644.xml | 2 +- .../dist/game/data/buylists/0335645.xml | 2 +- .../dist/game/data/buylists/0336456.xml | 2 +- .../dist/game/data/buylists/0351001.xml | 2 +- .../dist/game/data/buylists/0351021.xml | 22 +- .../dist/game/data/buylists/0351022.xml | 22 +- .../dist/game/data/buylists/0351023.xml | 8 +- .../dist/game/data/buylists/0351024.xml | 22 +- .../dist/game/data/buylists/0351025.xml | 6 +- .../dist/game/data/buylists/0351026.xml | 42 +- .../dist/game/data/buylists/0351421.xml | 4 +- .../dist/game/data/buylists/0351441.xml | 22 +- .../dist/game/data/buylists/0351442.xml | 22 +- .../dist/game/data/buylists/0351443.xml | 8 +- .../dist/game/data/buylists/0351444.xml | 22 +- .../dist/game/data/buylists/0351445.xml | 6 +- .../dist/game/data/buylists/0351446.xml | 42 +- .../dist/game/data/buylists/0351841.xml | 4 +- .../dist/game/data/buylists/0351861.xml | 22 +- .../dist/game/data/buylists/0351862.xml | 22 +- .../dist/game/data/buylists/0351863.xml | 8 +- .../dist/game/data/buylists/0351864.xml | 22 +- .../dist/game/data/buylists/0351865.xml | 6 +- .../dist/game/data/buylists/0351866.xml | 42 +- .../dist/game/data/buylists/0352261.xml | 2 +- .../dist/game/data/buylists/0352281.xml | 22 +- .../dist/game/data/buylists/0352282.xml | 22 +- .../dist/game/data/buylists/0352283.xml | 8 +- .../dist/game/data/buylists/0352284.xml | 22 +- .../dist/game/data/buylists/0352285.xml | 6 +- .../dist/game/data/buylists/0352286.xml | 42 +- .../dist/game/data/buylists/0352741.xml | 2 +- .../dist/game/data/buylists/0352761.xml | 22 +- .../dist/game/data/buylists/0352762.xml | 22 +- .../dist/game/data/buylists/0352763.xml | 12 +- .../dist/game/data/buylists/0352764.xml | 22 +- .../dist/game/data/buylists/0352765.xml | 6 +- .../dist/game/data/buylists/0352766.xml | 42 +- .../dist/game/data/buylists/0353161.xml | 2 +- .../dist/game/data/buylists/0353181.xml | 22 +- .../dist/game/data/buylists/0353182.xml | 22 +- .../dist/game/data/buylists/0353183.xml | 8 +- .../dist/game/data/buylists/0353184.xml | 22 +- .../dist/game/data/buylists/0353185.xml | 6 +- .../dist/game/data/buylists/0353186.xml | 42 +- .../dist/game/data/buylists/0353631.xml | 2 +- .../dist/game/data/buylists/0353651.xml | 22 +- .../dist/game/data/buylists/0353652.xml | 22 +- .../dist/game/data/buylists/0353653.xml | 8 +- .../dist/game/data/buylists/0353654.xml | 22 +- .../dist/game/data/buylists/0353655.xml | 6 +- .../dist/game/data/buylists/0353656.xml | 42 +- .../dist/game/data/buylists/0355091.xml | 2 +- .../dist/game/data/buylists/0355111.xml | 22 +- .../dist/game/data/buylists/0355112.xml | 22 +- .../dist/game/data/buylists/0355113.xml | 12 +- .../dist/game/data/buylists/0355114.xml | 22 +- .../dist/game/data/buylists/0355115.xml | 6 +- .../dist/game/data/buylists/0355116.xml | 42 +- .../dist/game/data/buylists/0355551.xml | 2 +- .../dist/game/data/buylists/0355571.xml | 22 +- .../dist/game/data/buylists/0355572.xml | 22 +- .../dist/game/data/buylists/0355573.xml | 8 +- .../dist/game/data/buylists/0355574.xml | 22 +- .../dist/game/data/buylists/0355575.xml | 6 +- .../dist/game/data/buylists/0355576.xml | 42 +- .../dist/game/data/buylists/0366531.xml | 2 +- .../dist/game/data/buylists/0366541.xml | 4 +- .../dist/game/data/buylists/0366551.xml | 4 +- .../dist/game/data/buylists/0366561.xml | 2 +- .../dist/game/data/buylists/0366571.xml | 2 +- .../dist/game/data/buylists/0366581.xml | 2 +- .../dist/game/data/buylists/0366591.xml | 2 +- .../dist/game/data/buylists/0366601.xml | 2 +- .../dist/game/data/buylists/0366611.xml | 2 +- .../dist/game/data/buylists/1312801.xml | 2 +- .../dist/game/data/buylists/3000100.xml | 4 +- .../dist/game/data/buylists/3000101.xml | 2 +- .../dist/game/data/buylists/3000200.xml | 4 +- .../dist/game/data/buylists/3000201.xml | 4 +- .../dist/game/data/buylists/3000300.xml | 2 +- .../dist/game/data/buylists/3000301.xml | 2 +- .../dist/game/data/buylists/3000400.xml | 5 +- .../dist/game/data/buylists/3004700.xml | 2 +- .../dist/game/data/buylists/3006000.xml | 4 +- .../dist/game/data/buylists/3006001.xml | 4 +- .../dist/game/data/buylists/3006100.xml | 4 +- .../dist/game/data/buylists/3006101.xml | 4 +- .../dist/game/data/buylists/3006200.xml | 4 +- .../dist/game/data/buylists/3006201.xml | 2 +- .../dist/game/data/buylists/3006202.xml | 2 +- .../dist/game/data/buylists/3006300.xml | 15 +- .../dist/game/data/buylists/3006301.xml | 4 +- .../dist/game/data/buylists/3007800.xml | 135 +-- .../dist/game/data/buylists/3008100.xml | 14 +- .../dist/game/data/buylists/3008101.xml | 4 +- .../dist/game/data/buylists/3008200.xml | 2 +- .../dist/game/data/buylists/3008201.xml | 2 +- .../dist/game/data/buylists/3008400.xml | 4 +- .../dist/game/data/buylists/3008401.xml | 2 +- .../dist/game/data/buylists/3008500.xml | 4 +- .../dist/game/data/buylists/3008701.xml | 4 +- .../dist/game/data/buylists/3008800.xml | 2 +- .../dist/game/data/buylists/3009000.xml | 4 +- .../dist/game/data/buylists/3009001.xml | 2 +- .../dist/game/data/buylists/3009100.xml | 4 +- .../dist/game/data/buylists/3009101.xml | 2 +- .../dist/game/data/buylists/3009300.xml | 4 +- .../dist/game/data/buylists/3009400.xml | 2 +- .../dist/game/data/buylists/3009401.xml | 2 +- .../dist/game/data/buylists/3009402.xml | 2 +- .../dist/game/data/buylists/3013500.xml | 2 +- .../dist/game/data/buylists/3013501.xml | 2 +- .../dist/game/data/buylists/3013600.xml | 2 +- .../dist/game/data/buylists/3013601.xml | 2 +- .../dist/game/data/buylists/3013700.xml | 4 +- .../dist/game/data/buylists/3013800.xml | 2 +- .../dist/game/data/buylists/3013801.xml | 2 +- .../dist/game/data/buylists/3014700.xml | 2 +- .../dist/game/data/buylists/3014701.xml | 2 +- .../dist/game/data/buylists/3014800.xml | 2 +- .../dist/game/data/buylists/3014801.xml | 2 +- .../dist/game/data/buylists/3014900.xml | 4 +- .../dist/game/data/buylists/3014901.xml | 2 +- .../dist/game/data/buylists/3015000.xml | 2 +- .../dist/game/data/buylists/3016300.xml | 2 +- .../dist/game/data/buylists/3016400.xml | 2 +- .../dist/game/data/buylists/3016500.xml | 2 +- .../dist/game/data/buylists/3016501.xml | 2 +- .../dist/game/data/buylists/3016601.xml | 2 +- .../dist/game/data/buylists/3017800.xml | 4 +- .../dist/game/data/buylists/3017801.xml | 4 +- .../dist/game/data/buylists/3017900.xml | 4 +- .../dist/game/data/buylists/3017901.xml | 4 +- .../dist/game/data/buylists/3018000.xml | 15 +- .../dist/game/data/buylists/3018001.xml | 4 +- .../dist/game/data/buylists/3018100.xml | 2 +- .../dist/game/data/buylists/3020700.xml | 2 +- .../dist/game/data/buylists/3020701.xml | 2 +- .../dist/game/data/buylists/3020800.xml | 2 +- .../dist/game/data/buylists/3020801.xml | 2 +- .../dist/game/data/buylists/3020802.xml | 2 +- .../dist/game/data/buylists/3020803.xml | 2 +- .../dist/game/data/buylists/3020900.xml | 2 +- .../dist/game/data/buylists/3023000.xml | 4 +- .../dist/game/data/buylists/3023001.xml | 4 +- .../dist/game/data/buylists/3023100.xml | 4 +- .../dist/game/data/buylists/3025300.xml | 4 +- .../dist/game/data/buylists/3025301.xml | 4 +- .../dist/game/data/buylists/3025400.xml | 15 +- .../dist/game/data/buylists/3025401.xml | 4 +- .../dist/game/data/buylists/3029400.xml | 4 +- .../dist/game/data/buylists/3030100.xml | 14 +- .../dist/game/data/buylists/3030101.xml | 4 +- .../dist/game/data/buylists/3031300.xml | 2 +- .../dist/game/data/buylists/3031400.xml | 2 +- .../dist/game/data/buylists/3031401.xml | 2 +- .../dist/game/data/buylists/3031402.xml | 2 +- .../dist/game/data/buylists/3031500.xml | 15 +- .../dist/game/data/buylists/3032100.xml | 4 +- .../dist/game/data/buylists/3032101.xml | 4 +- .../dist/game/data/buylists/3038700.xml | 2 +- .../dist/game/data/buylists/3042000.xml | 2 +- .../dist/game/data/buylists/3043600.xml | 4 +- .../dist/game/data/buylists/3043700.xml | 4 +- .../dist/game/data/buylists/3051600.xml | 2 +- .../dist/game/data/buylists/3051601.xml | 2 +- .../dist/game/data/buylists/3051700.xml | 2 +- .../dist/game/data/buylists/3051701.xml | 2 +- .../dist/game/data/buylists/3051800.xml | 2 +- .../dist/game/data/buylists/3051900.xml | 2 +- .../dist/game/data/buylists/3051901.xml | 2 +- .../dist/game/data/buylists/3055800.xml | 2 +- .../dist/game/data/buylists/3055801.xml | 2 +- .../dist/game/data/buylists/3055900.xml | 2 +- .../dist/game/data/buylists/3055901.xml | 2 +- .../dist/game/data/buylists/3056000.xml | 2 +- .../dist/game/data/buylists/3056001.xml | 2 +- .../dist/game/data/buylists/3056100.xml | 2 +- .../dist/game/data/buylists/3068400.xml | 4 +- .../dist/game/data/buylists/3068401.xml | 4 +- .../dist/game/data/buylists/3073100.xml | 2 +- .../dist/game/data/buylists/3082700.xml | 4 +- .../dist/game/data/buylists/3082800.xml | 2 +- .../dist/game/data/buylists/3082900.xml | 2 +- .../dist/game/data/buylists/3083000.xml | 4 +- .../dist/game/data/buylists/3083100.xml | 2 +- .../dist/game/data/buylists/3083400.xml | 4 +- .../dist/game/data/buylists/3083401.xml | 4 +- .../dist/game/data/buylists/3083700.xml | 4 +- .../dist/game/data/buylists/3083701.xml | 4 +- .../dist/game/data/buylists/3083800.xml | 4 +- .../dist/game/data/buylists/3083801.xml | 2 +- .../dist/game/data/buylists/3083900.xml | 15 +- .../dist/game/data/buylists/3084000.xml | 2 +- .../dist/game/data/buylists/3084100.xml | 4 +- .../dist/game/data/buylists/3084101.xml | 4 +- .../dist/game/data/buylists/3084102.xml | 2 +- .../dist/game/data/buylists/3084200.xml | 4 +- .../dist/game/data/buylists/3086900.xml | 2 +- .../dist/game/data/buylists/3087900.xml | 2 +- .../dist/game/data/buylists/3089000.xml | 4 +- .../dist/game/data/buylists/3089001.xml | 4 +- .../dist/game/data/buylists/3089100.xml | 4 +- .../dist/game/data/buylists/3089101.xml | 4 +- .../dist/game/data/buylists/3089200.xml | 4 +- .../dist/game/data/buylists/3089300.xml | 14 +- .../dist/game/data/buylists/3089301.xml | 4 +- .../dist/game/data/buylists/3104500.xml | 135 +-- .../dist/game/data/buylists/3106700.xml | 4 +- .../dist/game/data/buylists/3125600.xml | 4 +- .../dist/game/data/buylists/3125601.xml | 4 +- .../dist/game/data/buylists/3125602.xml | 2 +- .../dist/game/data/buylists/3125603.xml | 2 +- .../dist/game/data/buylists/3125700.xml | 4 +- .../dist/game/data/buylists/3125701.xml | 4 +- .../dist/game/data/buylists/3125702.xml | 2 +- .../dist/game/data/buylists/3125703.xml | 2 +- .../dist/game/data/buylists/3125800.xml | 4 +- .../dist/game/data/buylists/3125801.xml | 4 +- .../dist/game/data/buylists/3125802.xml | 2 +- .../dist/game/data/buylists/3125803.xml | 2 +- .../dist/game/data/buylists/3125900.xml | 4 +- .../dist/game/data/buylists/3125901.xml | 4 +- .../dist/game/data/buylists/3125902.xml | 2 +- .../dist/game/data/buylists/3125903.xml | 2 +- .../dist/game/data/buylists/3126000.xml | 2 +- .../dist/game/data/buylists/3126001.xml | 2 +- .../dist/game/data/buylists/3126100.xml | 4 +- .../dist/game/data/buylists/3126101.xml | 2 +- .../dist/game/data/buylists/3126200.xml | 2 +- .../dist/game/data/buylists/3126300.xml | 4 +- .../dist/game/data/buylists/3126301.xml | 15 +- .../dist/game/data/buylists/3126500.xml | 2 +- .../dist/game/data/buylists/3127400.xml | 4 +- .../dist/game/data/buylists/3130000.xml | 4 +- .../dist/game/data/buylists/3130001.xml | 4 +- .../dist/game/data/buylists/3130100.xml | 4 +- .../dist/game/data/buylists/3130101.xml | 4 +- .../dist/game/data/buylists/3130200.xml | 4 +- .../dist/game/data/buylists/3130201.xml | 4 +- .../dist/game/data/buylists/3130300.xml | 4 +- .../dist/game/data/buylists/3130301.xml | 4 +- .../dist/game/data/buylists/3130400.xml | 4 +- .../dist/game/data/buylists/3130500.xml | 4 +- .../dist/game/data/buylists/3130600.xml | 2 +- .../dist/game/data/buylists/3130700.xml | 4 +- .../dist/game/data/buylists/3130701.xml | 15 +- .../dist/game/data/buylists/3130900.xml | 4 +- .../dist/game/data/buylists/3131800.xml | 2 +- .../dist/game/data/buylists/3131900.xml | 4 +- .../dist/game/data/buylists/3135100.xml | 2 +- .../dist/game/data/buylists/3136600.xml | 2 +- .../dist/game/data/buylists/3138600.xml | 4 +- .../dist/game/data/buylists/3141300.xml | 2 +- .../dist/game/data/buylists/3141400.xml | 2 +- .../dist/game/data/buylists/3141500.xml | 2 +- .../dist/game/data/buylists/3141600.xml | 2 +- .../dist/game/data/buylists/3141700.xml | 2 +- .../dist/game/data/buylists/3141800.xml | 2 +- .../dist/game/data/buylists/3141900.xml | 2 +- .../dist/game/data/buylists/3142000.xml | 2 +- .../dist/game/data/buylists/3142100.xml | 2 +- .../dist/game/data/buylists/3142200.xml | 2 +- .../dist/game/data/buylists/3142300.xml | 2 +- .../dist/game/data/buylists/3142400.xml | 2 +- .../dist/game/data/buylists/3142500.xml | 2 +- .../dist/game/data/buylists/3142600.xml | 2 +- .../dist/game/data/buylists/3142700.xml | 2 +- .../dist/game/data/buylists/3142800.xml | 2 +- .../dist/game/data/buylists/3142900.xml | 2 +- .../dist/game/data/buylists/3143000.xml | 2 +- .../dist/game/data/buylists/3143100.xml | 2 +- .../dist/game/data/buylists/3143200.xml | 2 +- .../dist/game/data/buylists/3143300.xml | 2 +- .../dist/game/data/buylists/3143400.xml | 2 +- .../dist/game/data/buylists/3143500.xml | 2 +- .../dist/game/data/buylists/3143600.xml | 2 +- .../dist/game/data/buylists/3143700.xml | 2 +- .../dist/game/data/buylists/3143800.xml | 2 +- .../dist/game/data/buylists/3143900.xml | 2 +- .../dist/game/data/buylists/3144000.xml | 4 +- .../dist/game/data/buylists/3144100.xml | 2 +- .../dist/game/data/buylists/3144200.xml | 26 +- .../dist/game/data/buylists/3144300.xml | 4 +- .../dist/game/data/buylists/3144400.xml | 4 +- .../dist/game/data/buylists/3144500.xml | 4 +- .../dist/game/data/buylists/3156300.xml | 2 +- .../dist/game/data/buylists/3156700.xml | 2 +- .../dist/game/data/buylists/3156800.xml | 2 +- .../dist/game/data/buylists/3157000.xml | 2 +- .../dist/game/data/buylists/3157100.xml | 2 +- .../dist/game/data/buylists/3157200.xml | 2 +- .../dist/game/data/buylists/3157300.xml | 2 +- .../dist/game/data/buylists/3157400.xml | 2 +- .../dist/game/data/buylists/3157500.xml | 2 +- .../dist/game/data/buylists/3157600.xml | 2 +- .../dist/game/data/buylists/3157700.xml | 2 +- .../dist/game/data/buylists/3157800.xml | 2 +- .../dist/game/data/buylists/3157900.xml | 2 +- .../dist/game/data/buylists/3166600.xml | 2 +- .../dist/game/data/buylists/3166700.xml | 2 +- .../dist/game/data/buylists/3166800.xml | 2 +- .../dist/game/data/buylists/3166900.xml | 4 +- .../dist/game/data/buylists/3167000.xml | 2 +- .../dist/game/data/buylists/3169600.xml | 2 +- .../dist/game/data/buylists/3169700.xml | 2 +- .../dist/game/data/buylists/3175601.xml | 338 ++++---- .../dist/game/data/buylists/3175602.xml | 78 +- .../dist/game/data/buylists/3175603.xml | 230 ++--- .../dist/game/data/buylists/3175604.xml | 312 +++---- .../dist/game/data/buylists/3175605.xml | 278 +++--- .../dist/game/data/buylists/3175606.xml | 300 +++---- .../dist/game/data/buylists/3175607.xml | 314 +++---- .../dist/game/data/buylists/3175608.xml | 228 ++--- .../dist/game/data/buylists/3194500.xml | 4 +- .../dist/game/data/buylists/3194501.xml | 4 +- .../dist/game/data/buylists/3194600.xml | 4 +- .../dist/game/data/buylists/3194601.xml | 4 +- .../dist/game/data/buylists/3194700.xml | 4 +- .../dist/game/data/buylists/3194701.xml | 4 +- .../dist/game/data/buylists/3194800.xml | 4 +- .../dist/game/data/buylists/3194801.xml | 4 +- .../dist/game/data/buylists/3194900.xml | 4 +- .../dist/game/data/buylists/3195000.xml | 4 +- .../dist/game/data/buylists/3195100.xml | 2 +- .../dist/game/data/buylists/3195200.xml | 4 +- .../dist/game/data/buylists/3195201.xml | 15 +- .../dist/game/data/buylists/3195400.xml | 2 +- .../dist/game/data/buylists/3196200.xml | 2 +- .../dist/game/data/buylists/3196300.xml | 4 +- .../dist/game/data/buylists/3197300.xml | 2 +- .../dist/game/data/buylists/3198000.xml | 2 +- .../dist/game/data/buylists/3198900.xml | 2 +- .../dist/game/data/buylists/3200700.xml | 19 +- .../dist/game/data/buylists/3210500.xml | 2 +- .../dist/game/data/buylists/3210600.xml | 2 +- .../dist/game/data/buylists/3216400.xml | 2 +- .../dist/game/data/buylists/3216401.xml | 2 +- .../dist/game/data/buylists/3216500.xml | 2 +- .../dist/game/data/buylists/3216501.xml | 2 +- .../dist/game/data/buylists/3216600.xml | 4 +- .../dist/game/data/buylists/3216700.xml | 2 +- .../dist/game/data/buylists/3216900.xml | 2 +- .../dist/game/data/buylists/3229800.xml | 3 +- .../dist/game/data/buylists/3287400.xml | 2 +- .../dist/game/data/buylists/3287500.xml | 2 +- .../dist/game/data/buylists/3287600.xml | 4 +- .../dist/game/data/buylists/3287700.xml | 2 +- .../dist/game/data/buylists/3287800.xml | 4 +- .../dist/game/data/buylists/3287900.xml | 2 +- .../dist/game/data/buylists/3288000.xml | 4 +- .../dist/game/data/buylists/3288100.xml | 4 +- .../dist/game/data/buylists/3288200.xml | 4 +- .../dist/game/data/buylists/3288300.xml | 4 +- .../dist/game/data/buylists/3288700.xml | 2 +- .../dist/game/data/buylists/3289700.xml | 15 +- .../dist/game/data/buylists/3357900.xml | 2 +- .../dist/game/data/buylists/3393400.xml | 2 +- .../dist/game/data/buylists/3393401.xml | 2 +- .../dist/game/data/buylists/3393500.xml | 2 +- .../dist/game/data/buylists/3393501.xml | 2 +- .../dist/game/data/buylists/3393600.xml | 2 +- .../dist/game/data/buylists/3393700.xml | 2 +- .../dist/game/data/buylists/3538400.xml | 4 +- .../dist/game/data/buylists/3538401.xml | 4 +- .../dist/game/data/buylists/3538402.xml | 4 +- .../dist/game/data/buylists/3538600.xml | 4 +- .../dist/game/data/buylists/3538601.xml | 4 +- .../dist/game/data/buylists/3538602.xml | 4 +- .../dist/game/data/buylists/3538800.xml | 4 +- .../dist/game/data/buylists/3538801.xml | 4 +- .../dist/game/data/buylists/3538802.xml | 4 +- .../dist/game/data/buylists/3539200.xml | 4 +- .../dist/game/data/buylists/3539201.xml | 4 +- .../dist/game/data/buylists/3539202.xml | 4 +- .../dist/game/data/buylists/3539400.xml | 4 +- .../dist/game/data/buylists/3539401.xml | 4 +- .../dist/game/data/buylists/3539402.xml | 4 +- .../dist/game/data/buylists/3539600.xml | 4 +- .../dist/game/data/buylists/3539601.xml | 4 +- .../dist/game/data/buylists/3539602.xml | 4 +- .../dist/game/data/buylists/3539800.xml | 4 +- .../dist/game/data/buylists/3539801.xml | 4 +- .../dist/game/data/buylists/3539802.xml | 4 +- .../dist/game/data/buylists/3540000.xml | 4 +- .../dist/game/data/buylists/3540001.xml | 4 +- .../dist/game/data/buylists/3540002.xml | 4 +- .../dist/game/data/buylists/3540300.xml | 4 +- .../dist/game/data/buylists/3540301.xml | 4 +- .../dist/game/data/buylists/3540302.xml | 4 +- .../dist/game/data/buylists/3540500.xml | 4 +- .../dist/game/data/buylists/3540501.xml | 4 +- .../dist/game/data/buylists/3540502.xml | 4 +- .../dist/game/data/buylists/3540700.xml | 4 +- .../dist/game/data/buylists/3540701.xml | 4 +- .../dist/game/data/buylists/3540702.xml | 4 +- .../dist/game/data/buylists/3543900.xml | 4 +- .../dist/game/data/buylists/3543901.xml | 4 +- .../dist/game/data/buylists/3543902.xml | 4 +- .../dist/game/data/buylists/3544100.xml | 4 +- .../dist/game/data/buylists/3544101.xml | 4 +- .../dist/game/data/buylists/3544102.xml | 4 +- .../dist/game/data/buylists/3544300.xml | 4 +- .../dist/game/data/buylists/3544301.xml | 4 +- .../dist/game/data/buylists/3544302.xml | 4 +- .../dist/game/data/buylists/3544500.xml | 4 +- .../dist/game/data/buylists/3544501.xml | 4 +- .../dist/game/data/buylists/3544502.xml | 4 +- .../dist/game/data/buylists/3544700.xml | 4 +- .../dist/game/data/buylists/3544701.xml | 4 +- .../dist/game/data/buylists/3544702.xml | 4 +- .../dist/game/data/buylists/3544900.xml | 4 +- .../dist/game/data/buylists/3544901.xml | 4 +- .../dist/game/data/buylists/3544902.xml | 4 +- .../dist/game/data/buylists/3545100.xml | 4 +- .../dist/game/data/buylists/3545101.xml | 4 +- .../dist/game/data/buylists/3545102.xml | 4 +- .../dist/game/data/buylists/3545300.xml | 4 +- .../dist/game/data/buylists/3545301.xml | 4 +- .../dist/game/data/buylists/3545302.xml | 4 +- .../dist/game/data/buylists/3545500.xml | 4 +- .../dist/game/data/buylists/3545501.xml | 4 +- .../dist/game/data/buylists/3545502.xml | 4 +- .../dist/game/data/buylists/3545700.xml | 4 +- .../dist/game/data/buylists/3545701.xml | 4 +- .../dist/game/data/buylists/3545702.xml | 4 +- .../dist/game/data/buylists/3545900.xml | 4 +- .../dist/game/data/buylists/3545901.xml | 4 +- .../dist/game/data/buylists/3545902.xml | 4 +- .../dist/game/data/buylists/3546100.xml | 4 +- .../dist/game/data/buylists/3546101.xml | 4 +- .../dist/game/data/buylists/3546102.xml | 4 +- .../dist/game/data/buylists/3546300.xml | 4 +- .../dist/game/data/buylists/3546301.xml | 4 +- .../dist/game/data/buylists/3546302.xml | 4 +- .../dist/game/data/buylists/3546500.xml | 4 +- .../dist/game/data/buylists/3546501.xml | 4 +- .../dist/game/data/buylists/3546502.xml | 4 +- .../dist/game/data/buylists/3546700.xml | 4 +- .../dist/game/data/buylists/3546701.xml | 4 +- .../dist/game/data/buylists/3546702.xml | 4 +- .../dist/game/data/buylists/3556600.xml | 4 +- .../dist/game/data/buylists/3556601.xml | 4 +- .../dist/game/data/buylists/3556602.xml | 4 +- .../dist/game/data/buylists/3556800.xml | 4 +- .../dist/game/data/buylists/3556801.xml | 4 +- .../dist/game/data/buylists/3556802.xml | 4 +- .../dist/game/data/buylists/3557000.xml | 4 +- .../dist/game/data/buylists/3557001.xml | 4 +- .../dist/game/data/buylists/3557002.xml | 4 +- .../dist/game/data/buylists/3557200.xml | 4 +- .../dist/game/data/buylists/3557201.xml | 4 +- .../dist/game/data/buylists/3557202.xml | 4 +- .../dist/game/data/buylists/3557400.xml | 4 +- .../dist/game/data/buylists/3557401.xml | 4 +- .../dist/game/data/buylists/3557402.xml | 4 +- .../dist/game/data/buylists/3557600.xml | 4 +- .../dist/game/data/buylists/3557601.xml | 4 +- .../dist/game/data/buylists/3557602.xml | 4 +- .../dist/game/data/buylists/3557800.xml | 4 +- .../dist/game/data/buylists/3557801.xml | 4 +- .../dist/game/data/buylists/3557802.xml | 4 +- .../dist/game/data/buylists/3672100.xml | 2 +- .../dist/game/data/buylists/3672101.xml | 2 +- .../dist/game/data/buylists/3672102.xml | 2 +- .../dist/game/data/buylists/3672300.xml | 2 +- .../dist/game/data/buylists/3672301.xml | 2 +- .../dist/game/data/buylists/3672302.xml | 2 +- .../dist/game/data/buylists/3672500.xml | 2 +- .../dist/game/data/buylists/3672501.xml | 2 +- .../dist/game/data/buylists/3672502.xml | 2 +- .../dist/game/data/buylists/3672700.xml | 2 +- .../dist/game/data/buylists/3672701.xml | 2 +- .../dist/game/data/buylists/3672702.xml | 2 +- .../dist/game/data/buylists/3672900.xml | 2 +- .../dist/game/data/buylists/3672901.xml | 2 +- .../dist/game/data/buylists/3672902.xml | 2 +- .../dist/game/data/buylists/3673100.xml | 2 +- .../dist/game/data/buylists/3673101.xml | 2 +- .../dist/game/data/buylists/3673102.xml | 2 +- .../dist/game/data/buylists/3673300.xml | 2 +- .../dist/game/data/buylists/3673301.xml | 2 +- .../dist/game/data/buylists/3673302.xml | 2 +- .../dist/game/data/buylists/3673500.xml | 2 +- .../dist/game/data/buylists/3673501.xml | 2 +- .../dist/game/data/buylists/3673502.xml | 2 +- .../dist/game/data/buylists/3673700.xml | 2 +- .../dist/game/data/buylists/3673701.xml | 2 +- .../dist/game/data/buylists/3673702.xml | 2 +- .../dist/game/data/buylists/3673900.xml | 2 +- .../dist/game/data/buylists/3673901.xml | 2 +- .../dist/game/data/buylists/3673902.xml | 2 +- .../dist/game/data/html/admin/zone.htm | 2 +- .../dist/game/data/multisell/1004.xml | 338 -------- .../dist/game/data/multisell/719.xml | 60 +- .../game/data/multisell/custom/600010.xml | 30 +- .../DelusionTeleport/DelusionTeleport.java | 26 +- .../admincommandhandlers/AdminElement.java | 2 +- .../admincommandhandlers/AdminShop.java | 38 +- .../admincommandhandlers/AdminZone.java | 2 +- .../scripts/handlers/bypasshandlers/Wear.java | 4 +- .../handlers/communityboard/HomeBoard.java | 2 +- .../handlers/communityboard/RegionBoard.java | 3 +- .../handlers/effecthandlers/ConvertItem.java | 2 +- .../scripts/handlers/itemhandlers/Seed.java | 6 +- .../game/data/stats/items/15400-15499.xml | 1 + .../dist/game/data/xsd/buylist.xsd | 2 + .../dist/game/data/xsd/multisell.xsd | 4 +- .../dist/game/data/zones/custom_town.xml | 639 -------------- .../dist/game/data/zones/tax.xml | 5 +- .../java/com/l2jmobius/Config.java | 2 - .../gameserver/data/xml/impl/BuyListData.java | 82 +- .../data/xml/impl/MultisellData.java | 411 +++------ .../gameserver/data/xml/impl/OptionData.java | 4 +- .../datatables/AugmentationData.java | 32 +- .../instancemanager/MapRegionManager.java | 20 +- .../instancemanager/TownManager.java | 121 --- .../gameserver/model/Augmentation.java | 202 +++-- .../model/CharSelectInfoPackage.java | 10 +- .../l2jmobius/gameserver/model/ItemInfo.java | 68 +- .../gameserver/model/L2Augmentation.java | 133 --- .../gameserver/model/L2MapRegion.java | 9 +- .../l2jmobius/gameserver/model/StatsSet.java | 14 + .../l2jmobius/gameserver/model/TradeItem.java | 8 +- .../l2jmobius/gameserver/model/TradeList.java | 29 +- .../gameserver/model/actor/L2Npc.java | 74 +- .../actor/instance/L2MerchantInstance.java | 30 +- .../model/actor/instance/L2PcInstance.java | 17 +- .../gameserver/model/buylist/Product.java | 29 +- .../{L2BuyList.java => ProductList.java} | 12 +- .../gameserver/model/entity/Castle.java | 16 +- .../model/events/AbstractScript.java | 2 +- .../character/player/OnPlayerAugment.java | 8 +- .../model/holders/ItemChanceHolder.java | 32 + .../model/holders/MultisellEntryHolder.java | 56 ++ .../model/holders/MultisellListHolder.java | 112 +++ .../holders/PreparedMultisellListHolder.java | 107 +++ .../model/itemauction/AuctionItem.java | 9 +- .../model/itemcontainer/Inventory.java | 5 +- .../model/itemcontainer/PcInventory.java | 44 - .../model/items/L2WarehouseItem.java | 26 +- .../model/items/instance/L2ItemInstance.java | 63 +- .../gameserver/model/multisell/Entry.java | 91 -- .../model/multisell/Ingredient.java | 151 ---- .../gameserver/model/multisell/ItemInfo.java | 87 -- .../model/multisell/ListContainer.java | 123 --- .../model/multisell/PreparedEntry.java | 107 --- .../multisell/PreparedListContainer.java | 104 --- .../gameserver/model/options/Options.java | 102 ++- .../model/variables/PlayerVariables.java | 1 + .../gameserver/model/zone/ZoneId.java | 4 +- .../gameserver/model/zone/type/L2TaxZone.java | 171 ++-- .../clientpackets/MultiSellChoose.java | 748 ++++++++-------- .../network/clientpackets/RequestBuyItem.java | 17 +- .../RequestExEnchantItemAttribute.java | 3 +- .../clientpackets/RequestPreviewItem.java | 4 +- .../network/clientpackets/RequestRefine.java | 10 +- .../clientpackets/RequestRefundItem.java | 22 +- .../clientpackets/RequestSellItem.java | 30 +- .../RequestChangeAttributeItem.java | 2 +- .../serverpackets/AbstractItemPacket.java | 94 +-- .../network/serverpackets/BuyList.java | 27 +- .../network/serverpackets/CharInfo.java | 5 +- .../serverpackets/CharSelectionInfo.java | 9 +- .../network/serverpackets/ExBuySellList.java | 24 +- .../ExPutItemResultForVariationCancel.java | 8 +- .../serverpackets/ExUserInfoEquipSlot.java | 5 +- .../serverpackets/GMViewCharacterInfo.java | 5 +- .../network/serverpackets/MultiSellList.java | 143 ++-- .../network/serverpackets/SellList.java | 111 --- .../serverpackets/ShopPreviewList.java | 4 +- .../network/serverpackets/TradeOtherAdd.java | 2 +- .../network/serverpackets/TradeOwnAdd.java | 2 +- .../network/serverpackets/TradeUpdate.java | 2 +- .../ExResponseCommissionBuyItem.java | 2 +- .../dist/game/config/Character.ini | 4 - .../dist/game/data/buylists/0000382.xml | 88 +- .../dist/game/data/buylists/0000383.xml | 88 +- .../dist/game/data/buylists/0335103.xml | 2 +- .../dist/game/data/buylists/0335145.xml | 2 +- .../dist/game/data/buylists/0335187.xml | 2 +- .../dist/game/data/buylists/0335229.xml | 2 +- .../dist/game/data/buylists/0335230.xml | 2 +- .../dist/game/data/buylists/0335231.xml | 2 +- .../dist/game/data/buylists/0335277.xml | 2 +- .../dist/game/data/buylists/0335319.xml | 2 +- .../dist/game/data/buylists/0335366.xml | 2 +- .../dist/game/data/buylists/0335383.xml | 2 +- .../dist/game/data/buylists/0335390.xml | 2 +- .../dist/game/data/buylists/0335421.xml | 2 +- .../dist/game/data/buylists/0335512.xml | 2 +- .../dist/game/data/buylists/0335558.xml | 2 +- .../dist/game/data/buylists/0335580.xml | 2 +- .../dist/game/data/buylists/0335582.xml | 2 +- .../dist/game/data/buylists/0335584.xml | 2 +- .../dist/game/data/buylists/0335586.xml | 2 +- .../dist/game/data/buylists/0335605.xml | 2 +- .../dist/game/data/buylists/0335644.xml | 2 +- .../dist/game/data/buylists/0335645.xml | 2 +- .../dist/game/data/buylists/0336456.xml | 2 +- .../dist/game/data/buylists/0351001.xml | 2 +- .../dist/game/data/buylists/0351021.xml | 22 +- .../dist/game/data/buylists/0351022.xml | 22 +- .../dist/game/data/buylists/0351023.xml | 8 +- .../dist/game/data/buylists/0351024.xml | 22 +- .../dist/game/data/buylists/0351025.xml | 6 +- .../dist/game/data/buylists/0351026.xml | 42 +- .../dist/game/data/buylists/0351421.xml | 4 +- .../dist/game/data/buylists/0351441.xml | 22 +- .../dist/game/data/buylists/0351442.xml | 22 +- .../dist/game/data/buylists/0351443.xml | 8 +- .../dist/game/data/buylists/0351444.xml | 22 +- .../dist/game/data/buylists/0351445.xml | 6 +- .../dist/game/data/buylists/0351446.xml | 42 +- .../dist/game/data/buylists/0351841.xml | 4 +- .../dist/game/data/buylists/0351861.xml | 22 +- .../dist/game/data/buylists/0351862.xml | 22 +- .../dist/game/data/buylists/0351863.xml | 8 +- .../dist/game/data/buylists/0351864.xml | 22 +- .../dist/game/data/buylists/0351865.xml | 6 +- .../dist/game/data/buylists/0351866.xml | 42 +- .../dist/game/data/buylists/0352261.xml | 2 +- .../dist/game/data/buylists/0352281.xml | 22 +- .../dist/game/data/buylists/0352282.xml | 22 +- .../dist/game/data/buylists/0352283.xml | 8 +- .../dist/game/data/buylists/0352284.xml | 22 +- .../dist/game/data/buylists/0352285.xml | 6 +- .../dist/game/data/buylists/0352286.xml | 42 +- .../dist/game/data/buylists/0352741.xml | 2 +- .../dist/game/data/buylists/0352761.xml | 22 +- .../dist/game/data/buylists/0352762.xml | 22 +- .../dist/game/data/buylists/0352763.xml | 12 +- .../dist/game/data/buylists/0352764.xml | 22 +- .../dist/game/data/buylists/0352765.xml | 6 +- .../dist/game/data/buylists/0352766.xml | 42 +- .../dist/game/data/buylists/0353161.xml | 2 +- .../dist/game/data/buylists/0353181.xml | 22 +- .../dist/game/data/buylists/0353182.xml | 22 +- .../dist/game/data/buylists/0353183.xml | 8 +- .../dist/game/data/buylists/0353184.xml | 22 +- .../dist/game/data/buylists/0353185.xml | 6 +- .../dist/game/data/buylists/0353186.xml | 42 +- .../dist/game/data/buylists/0353631.xml | 2 +- .../dist/game/data/buylists/0353651.xml | 22 +- .../dist/game/data/buylists/0353652.xml | 22 +- .../dist/game/data/buylists/0353653.xml | 8 +- .../dist/game/data/buylists/0353654.xml | 22 +- .../dist/game/data/buylists/0353655.xml | 6 +- .../dist/game/data/buylists/0353656.xml | 42 +- .../dist/game/data/buylists/0355091.xml | 2 +- .../dist/game/data/buylists/0355111.xml | 22 +- .../dist/game/data/buylists/0355112.xml | 22 +- .../dist/game/data/buylists/0355113.xml | 12 +- .../dist/game/data/buylists/0355114.xml | 22 +- .../dist/game/data/buylists/0355115.xml | 6 +- .../dist/game/data/buylists/0355116.xml | 42 +- .../dist/game/data/buylists/0355551.xml | 2 +- .../dist/game/data/buylists/0355571.xml | 22 +- .../dist/game/data/buylists/0355572.xml | 22 +- .../dist/game/data/buylists/0355573.xml | 8 +- .../dist/game/data/buylists/0355574.xml | 22 +- .../dist/game/data/buylists/0355575.xml | 6 +- .../dist/game/data/buylists/0355576.xml | 42 +- .../dist/game/data/buylists/0366531.xml | 2 +- .../dist/game/data/buylists/0366541.xml | 4 +- .../dist/game/data/buylists/0366551.xml | 4 +- .../dist/game/data/buylists/0366561.xml | 2 +- .../dist/game/data/buylists/0366571.xml | 2 +- .../dist/game/data/buylists/0366581.xml | 2 +- .../dist/game/data/buylists/0366591.xml | 2 +- .../dist/game/data/buylists/0366601.xml | 2 +- .../dist/game/data/buylists/0366611.xml | 2 +- .../dist/game/data/buylists/1312801.xml | 2 +- .../dist/game/data/buylists/3000100.xml | 4 +- .../dist/game/data/buylists/3000101.xml | 2 +- .../dist/game/data/buylists/3000200.xml | 4 +- .../dist/game/data/buylists/3000201.xml | 4 +- .../dist/game/data/buylists/3000300.xml | 2 +- .../dist/game/data/buylists/3000301.xml | 2 +- .../dist/game/data/buylists/3000400.xml | 5 +- .../dist/game/data/buylists/3004700.xml | 2 +- .../dist/game/data/buylists/3006000.xml | 4 +- .../dist/game/data/buylists/3006001.xml | 4 +- .../dist/game/data/buylists/3006100.xml | 4 +- .../dist/game/data/buylists/3006101.xml | 4 +- .../dist/game/data/buylists/3006200.xml | 4 +- .../dist/game/data/buylists/3006201.xml | 2 +- .../dist/game/data/buylists/3006202.xml | 2 +- .../dist/game/data/buylists/3006300.xml | 15 +- .../dist/game/data/buylists/3006301.xml | 4 +- .../dist/game/data/buylists/3007800.xml | 135 +-- .../dist/game/data/buylists/3008100.xml | 14 +- .../dist/game/data/buylists/3008101.xml | 4 +- .../dist/game/data/buylists/3008200.xml | 2 +- .../dist/game/data/buylists/3008201.xml | 2 +- .../dist/game/data/buylists/3008400.xml | 4 +- .../dist/game/data/buylists/3008401.xml | 2 +- .../dist/game/data/buylists/3008500.xml | 4 +- .../dist/game/data/buylists/3008701.xml | 4 +- .../dist/game/data/buylists/3008800.xml | 2 +- .../dist/game/data/buylists/3009000.xml | 4 +- .../dist/game/data/buylists/3009001.xml | 2 +- .../dist/game/data/buylists/3009100.xml | 4 +- .../dist/game/data/buylists/3009101.xml | 2 +- .../dist/game/data/buylists/3009300.xml | 4 +- .../dist/game/data/buylists/3009400.xml | 2 +- .../dist/game/data/buylists/3009401.xml | 2 +- .../dist/game/data/buylists/3009402.xml | 2 +- .../dist/game/data/buylists/3013500.xml | 2 +- .../dist/game/data/buylists/3013501.xml | 2 +- .../dist/game/data/buylists/3013600.xml | 2 +- .../dist/game/data/buylists/3013601.xml | 2 +- .../dist/game/data/buylists/3013700.xml | 4 +- .../dist/game/data/buylists/3013800.xml | 2 +- .../dist/game/data/buylists/3013801.xml | 2 +- .../dist/game/data/buylists/3014700.xml | 2 +- .../dist/game/data/buylists/3014701.xml | 2 +- .../dist/game/data/buylists/3014800.xml | 2 +- .../dist/game/data/buylists/3014801.xml | 2 +- .../dist/game/data/buylists/3014900.xml | 4 +- .../dist/game/data/buylists/3014901.xml | 2 +- .../dist/game/data/buylists/3015000.xml | 2 +- .../dist/game/data/buylists/3016300.xml | 2 +- .../dist/game/data/buylists/3016400.xml | 2 +- .../dist/game/data/buylists/3016500.xml | 2 +- .../dist/game/data/buylists/3016501.xml | 2 +- .../dist/game/data/buylists/3016601.xml | 2 +- .../dist/game/data/buylists/3017800.xml | 4 +- .../dist/game/data/buylists/3017801.xml | 4 +- .../dist/game/data/buylists/3017900.xml | 4 +- .../dist/game/data/buylists/3017901.xml | 4 +- .../dist/game/data/buylists/3018000.xml | 15 +- .../dist/game/data/buylists/3018001.xml | 4 +- .../dist/game/data/buylists/3018100.xml | 2 +- .../dist/game/data/buylists/3020700.xml | 2 +- .../dist/game/data/buylists/3020701.xml | 2 +- .../dist/game/data/buylists/3020800.xml | 2 +- .../dist/game/data/buylists/3020801.xml | 2 +- .../dist/game/data/buylists/3020802.xml | 2 +- .../dist/game/data/buylists/3020803.xml | 2 +- .../dist/game/data/buylists/3020900.xml | 2 +- .../dist/game/data/buylists/3023000.xml | 4 +- .../dist/game/data/buylists/3023001.xml | 4 +- .../dist/game/data/buylists/3023100.xml | 4 +- .../dist/game/data/buylists/3025300.xml | 4 +- .../dist/game/data/buylists/3025301.xml | 4 +- .../dist/game/data/buylists/3025400.xml | 15 +- .../dist/game/data/buylists/3025401.xml | 4 +- .../dist/game/data/buylists/3029400.xml | 4 +- .../dist/game/data/buylists/3030100.xml | 14 +- .../dist/game/data/buylists/3030101.xml | 4 +- .../dist/game/data/buylists/3031300.xml | 2 +- .../dist/game/data/buylists/3031400.xml | 2 +- .../dist/game/data/buylists/3031401.xml | 2 +- .../dist/game/data/buylists/3031402.xml | 2 +- .../dist/game/data/buylists/3031500.xml | 15 +- .../dist/game/data/buylists/3032100.xml | 4 +- .../dist/game/data/buylists/3032101.xml | 4 +- .../dist/game/data/buylists/3038700.xml | 2 +- .../dist/game/data/buylists/3042000.xml | 2 +- .../dist/game/data/buylists/3043600.xml | 4 +- .../dist/game/data/buylists/3043700.xml | 4 +- .../dist/game/data/buylists/3051600.xml | 2 +- .../dist/game/data/buylists/3051601.xml | 2 +- .../dist/game/data/buylists/3051700.xml | 2 +- .../dist/game/data/buylists/3051701.xml | 2 +- .../dist/game/data/buylists/3051800.xml | 2 +- .../dist/game/data/buylists/3051900.xml | 2 +- .../dist/game/data/buylists/3051901.xml | 2 +- .../dist/game/data/buylists/3055800.xml | 2 +- .../dist/game/data/buylists/3055801.xml | 2 +- .../dist/game/data/buylists/3055900.xml | 2 +- .../dist/game/data/buylists/3055901.xml | 2 +- .../dist/game/data/buylists/3056000.xml | 2 +- .../dist/game/data/buylists/3056001.xml | 2 +- .../dist/game/data/buylists/3056100.xml | 2 +- .../dist/game/data/buylists/3068400.xml | 4 +- .../dist/game/data/buylists/3068401.xml | 4 +- .../dist/game/data/buylists/3073100.xml | 2 +- .../dist/game/data/buylists/3082700.xml | 4 +- .../dist/game/data/buylists/3082800.xml | 2 +- .../dist/game/data/buylists/3082900.xml | 2 +- .../dist/game/data/buylists/3083000.xml | 4 +- .../dist/game/data/buylists/3083100.xml | 2 +- .../dist/game/data/buylists/3083400.xml | 4 +- .../dist/game/data/buylists/3083401.xml | 4 +- .../dist/game/data/buylists/3083700.xml | 4 +- .../dist/game/data/buylists/3083701.xml | 4 +- .../dist/game/data/buylists/3083800.xml | 4 +- .../dist/game/data/buylists/3083801.xml | 2 +- .../dist/game/data/buylists/3083900.xml | 15 +- .../dist/game/data/buylists/3084000.xml | 2 +- .../dist/game/data/buylists/3084100.xml | 4 +- .../dist/game/data/buylists/3084101.xml | 4 +- .../dist/game/data/buylists/3084102.xml | 2 +- .../dist/game/data/buylists/3084200.xml | 4 +- .../dist/game/data/buylists/3086900.xml | 2 +- .../dist/game/data/buylists/3087900.xml | 2 +- .../dist/game/data/buylists/3089000.xml | 4 +- .../dist/game/data/buylists/3089001.xml | 4 +- .../dist/game/data/buylists/3089100.xml | 4 +- .../dist/game/data/buylists/3089101.xml | 4 +- .../dist/game/data/buylists/3089200.xml | 4 +- .../dist/game/data/buylists/3089300.xml | 14 +- .../dist/game/data/buylists/3089301.xml | 4 +- .../dist/game/data/buylists/3104500.xml | 135 +-- .../dist/game/data/buylists/3106700.xml | 4 +- .../dist/game/data/buylists/3125600.xml | 4 +- .../dist/game/data/buylists/3125601.xml | 4 +- .../dist/game/data/buylists/3125602.xml | 2 +- .../dist/game/data/buylists/3125603.xml | 2 +- .../dist/game/data/buylists/3125700.xml | 4 +- .../dist/game/data/buylists/3125701.xml | 4 +- .../dist/game/data/buylists/3125702.xml | 2 +- .../dist/game/data/buylists/3125703.xml | 2 +- .../dist/game/data/buylists/3125800.xml | 4 +- .../dist/game/data/buylists/3125801.xml | 4 +- .../dist/game/data/buylists/3125802.xml | 2 +- .../dist/game/data/buylists/3125803.xml | 2 +- .../dist/game/data/buylists/3125900.xml | 4 +- .../dist/game/data/buylists/3125901.xml | 4 +- .../dist/game/data/buylists/3125902.xml | 2 +- .../dist/game/data/buylists/3125903.xml | 2 +- .../dist/game/data/buylists/3126000.xml | 2 +- .../dist/game/data/buylists/3126001.xml | 2 +- .../dist/game/data/buylists/3126100.xml | 4 +- .../dist/game/data/buylists/3126101.xml | 2 +- .../dist/game/data/buylists/3126200.xml | 2 +- .../dist/game/data/buylists/3126300.xml | 4 +- .../dist/game/data/buylists/3126301.xml | 15 +- .../dist/game/data/buylists/3126500.xml | 2 +- .../dist/game/data/buylists/3127400.xml | 4 +- .../dist/game/data/buylists/3130000.xml | 4 +- .../dist/game/data/buylists/3130001.xml | 4 +- .../dist/game/data/buylists/3130100.xml | 4 +- .../dist/game/data/buylists/3130101.xml | 4 +- .../dist/game/data/buylists/3130200.xml | 4 +- .../dist/game/data/buylists/3130201.xml | 4 +- .../dist/game/data/buylists/3130300.xml | 4 +- .../dist/game/data/buylists/3130301.xml | 4 +- .../dist/game/data/buylists/3130400.xml | 4 +- .../dist/game/data/buylists/3130500.xml | 4 +- .../dist/game/data/buylists/3130600.xml | 2 +- .../dist/game/data/buylists/3130700.xml | 4 +- .../dist/game/data/buylists/3130701.xml | 15 +- .../dist/game/data/buylists/3130900.xml | 4 +- .../dist/game/data/buylists/3131800.xml | 2 +- .../dist/game/data/buylists/3131900.xml | 4 +- .../dist/game/data/buylists/3135100.xml | 2 +- .../dist/game/data/buylists/3136600.xml | 2 +- .../dist/game/data/buylists/3138600.xml | 4 +- .../dist/game/data/buylists/3141300.xml | 2 +- .../dist/game/data/buylists/3141400.xml | 2 +- .../dist/game/data/buylists/3141500.xml | 2 +- .../dist/game/data/buylists/3141600.xml | 2 +- .../dist/game/data/buylists/3141700.xml | 2 +- .../dist/game/data/buylists/3141800.xml | 2 +- .../dist/game/data/buylists/3141900.xml | 2 +- .../dist/game/data/buylists/3142000.xml | 2 +- .../dist/game/data/buylists/3142100.xml | 2 +- .../dist/game/data/buylists/3142200.xml | 2 +- .../dist/game/data/buylists/3142300.xml | 2 +- .../dist/game/data/buylists/3142400.xml | 2 +- .../dist/game/data/buylists/3142500.xml | 2 +- .../dist/game/data/buylists/3142600.xml | 2 +- .../dist/game/data/buylists/3142700.xml | 2 +- .../dist/game/data/buylists/3142800.xml | 2 +- .../dist/game/data/buylists/3142900.xml | 2 +- .../dist/game/data/buylists/3143000.xml | 2 +- .../dist/game/data/buylists/3143100.xml | 2 +- .../dist/game/data/buylists/3143200.xml | 2 +- .../dist/game/data/buylists/3143300.xml | 2 +- .../dist/game/data/buylists/3143400.xml | 2 +- .../dist/game/data/buylists/3143500.xml | 2 +- .../dist/game/data/buylists/3143600.xml | 2 +- .../dist/game/data/buylists/3143700.xml | 2 +- .../dist/game/data/buylists/3143800.xml | 2 +- .../dist/game/data/buylists/3143900.xml | 2 +- .../dist/game/data/buylists/3144000.xml | 4 +- .../dist/game/data/buylists/3144100.xml | 2 +- .../dist/game/data/buylists/3144200.xml | 26 +- .../dist/game/data/buylists/3144300.xml | 4 +- .../dist/game/data/buylists/3144400.xml | 4 +- .../dist/game/data/buylists/3144500.xml | 4 +- .../dist/game/data/buylists/3156300.xml | 2 +- .../dist/game/data/buylists/3156700.xml | 2 +- .../dist/game/data/buylists/3156800.xml | 2 +- .../dist/game/data/buylists/3157000.xml | 2 +- .../dist/game/data/buylists/3157100.xml | 2 +- .../dist/game/data/buylists/3157200.xml | 2 +- .../dist/game/data/buylists/3157300.xml | 2 +- .../dist/game/data/buylists/3157400.xml | 2 +- .../dist/game/data/buylists/3157500.xml | 2 +- .../dist/game/data/buylists/3157600.xml | 2 +- .../dist/game/data/buylists/3157700.xml | 2 +- .../dist/game/data/buylists/3157800.xml | 2 +- .../dist/game/data/buylists/3157900.xml | 2 +- .../dist/game/data/buylists/3166600.xml | 2 +- .../dist/game/data/buylists/3166700.xml | 2 +- .../dist/game/data/buylists/3166800.xml | 2 +- .../dist/game/data/buylists/3166900.xml | 4 +- .../dist/game/data/buylists/3167000.xml | 2 +- .../dist/game/data/buylists/3169600.xml | 2 +- .../dist/game/data/buylists/3169700.xml | 2 +- .../dist/game/data/buylists/3175601.xml | 338 ++++---- .../dist/game/data/buylists/3175602.xml | 78 +- .../dist/game/data/buylists/3175603.xml | 230 ++--- .../dist/game/data/buylists/3175604.xml | 312 +++---- .../dist/game/data/buylists/3175605.xml | 278 +++--- .../dist/game/data/buylists/3175606.xml | 300 +++---- .../dist/game/data/buylists/3175607.xml | 314 +++---- .../dist/game/data/buylists/3175608.xml | 228 ++--- .../dist/game/data/buylists/3194500.xml | 4 +- .../dist/game/data/buylists/3194501.xml | 4 +- .../dist/game/data/buylists/3194600.xml | 4 +- .../dist/game/data/buylists/3194601.xml | 4 +- .../dist/game/data/buylists/3194700.xml | 4 +- .../dist/game/data/buylists/3194701.xml | 4 +- .../dist/game/data/buylists/3194800.xml | 4 +- .../dist/game/data/buylists/3194801.xml | 4 +- .../dist/game/data/buylists/3194900.xml | 4 +- .../dist/game/data/buylists/3195000.xml | 4 +- .../dist/game/data/buylists/3195100.xml | 2 +- .../dist/game/data/buylists/3195200.xml | 4 +- .../dist/game/data/buylists/3195201.xml | 15 +- .../dist/game/data/buylists/3195400.xml | 2 +- .../dist/game/data/buylists/3196200.xml | 2 +- .../dist/game/data/buylists/3196300.xml | 4 +- .../dist/game/data/buylists/3197300.xml | 2 +- .../dist/game/data/buylists/3198000.xml | 2 +- .../dist/game/data/buylists/3198900.xml | 2 +- .../dist/game/data/buylists/3200700.xml | 19 +- .../dist/game/data/buylists/3210500.xml | 2 +- .../dist/game/data/buylists/3210600.xml | 2 +- .../dist/game/data/buylists/3216400.xml | 2 +- .../dist/game/data/buylists/3216401.xml | 2 +- .../dist/game/data/buylists/3216500.xml | 2 +- .../dist/game/data/buylists/3216501.xml | 2 +- .../dist/game/data/buylists/3216600.xml | 4 +- .../dist/game/data/buylists/3216700.xml | 2 +- .../dist/game/data/buylists/3216900.xml | 2 +- .../dist/game/data/buylists/3229800.xml | 3 +- .../dist/game/data/buylists/3287400.xml | 2 +- .../dist/game/data/buylists/3287500.xml | 2 +- .../dist/game/data/buylists/3287600.xml | 4 +- .../dist/game/data/buylists/3287700.xml | 2 +- .../dist/game/data/buylists/3287800.xml | 4 +- .../dist/game/data/buylists/3287900.xml | 2 +- .../dist/game/data/buylists/3288000.xml | 4 +- .../dist/game/data/buylists/3288100.xml | 4 +- .../dist/game/data/buylists/3288200.xml | 4 +- .../dist/game/data/buylists/3288300.xml | 4 +- .../dist/game/data/buylists/3288700.xml | 2 +- .../dist/game/data/buylists/3289700.xml | 15 +- .../dist/game/data/buylists/3357900.xml | 2 +- .../dist/game/data/buylists/3393400.xml | 2 +- .../dist/game/data/buylists/3393401.xml | 2 +- .../dist/game/data/buylists/3393500.xml | 2 +- .../dist/game/data/buylists/3393501.xml | 2 +- .../dist/game/data/buylists/3393600.xml | 2 +- .../dist/game/data/buylists/3393700.xml | 2 +- .../dist/game/data/buylists/3538400.xml | 4 +- .../dist/game/data/buylists/3538401.xml | 4 +- .../dist/game/data/buylists/3538402.xml | 4 +- .../dist/game/data/buylists/3538600.xml | 4 +- .../dist/game/data/buylists/3538601.xml | 4 +- .../dist/game/data/buylists/3538602.xml | 4 +- .../dist/game/data/buylists/3538800.xml | 4 +- .../dist/game/data/buylists/3538801.xml | 4 +- .../dist/game/data/buylists/3538802.xml | 4 +- .../dist/game/data/buylists/3539200.xml | 4 +- .../dist/game/data/buylists/3539201.xml | 4 +- .../dist/game/data/buylists/3539202.xml | 4 +- .../dist/game/data/buylists/3539400.xml | 4 +- .../dist/game/data/buylists/3539401.xml | 4 +- .../dist/game/data/buylists/3539402.xml | 4 +- .../dist/game/data/buylists/3539600.xml | 4 +- .../dist/game/data/buylists/3539601.xml | 4 +- .../dist/game/data/buylists/3539602.xml | 4 +- .../dist/game/data/buylists/3539800.xml | 4 +- .../dist/game/data/buylists/3539801.xml | 4 +- .../dist/game/data/buylists/3539802.xml | 4 +- .../dist/game/data/buylists/3540000.xml | 4 +- .../dist/game/data/buylists/3540001.xml | 4 +- .../dist/game/data/buylists/3540002.xml | 4 +- .../dist/game/data/buylists/3540300.xml | 4 +- .../dist/game/data/buylists/3540301.xml | 4 +- .../dist/game/data/buylists/3540302.xml | 4 +- .../dist/game/data/buylists/3540500.xml | 4 +- .../dist/game/data/buylists/3540501.xml | 4 +- .../dist/game/data/buylists/3540502.xml | 4 +- .../dist/game/data/buylists/3540700.xml | 4 +- .../dist/game/data/buylists/3540701.xml | 4 +- .../dist/game/data/buylists/3540702.xml | 4 +- .../dist/game/data/buylists/3543900.xml | 4 +- .../dist/game/data/buylists/3543901.xml | 4 +- .../dist/game/data/buylists/3543902.xml | 4 +- .../dist/game/data/buylists/3544100.xml | 4 +- .../dist/game/data/buylists/3544101.xml | 4 +- .../dist/game/data/buylists/3544102.xml | 4 +- .../dist/game/data/buylists/3544300.xml | 4 +- .../dist/game/data/buylists/3544301.xml | 4 +- .../dist/game/data/buylists/3544302.xml | 4 +- .../dist/game/data/buylists/3544500.xml | 4 +- .../dist/game/data/buylists/3544501.xml | 4 +- .../dist/game/data/buylists/3544502.xml | 4 +- .../dist/game/data/buylists/3544700.xml | 4 +- .../dist/game/data/buylists/3544701.xml | 4 +- .../dist/game/data/buylists/3544702.xml | 4 +- .../dist/game/data/buylists/3544900.xml | 4 +- .../dist/game/data/buylists/3544901.xml | 4 +- .../dist/game/data/buylists/3544902.xml | 4 +- .../dist/game/data/buylists/3545100.xml | 4 +- .../dist/game/data/buylists/3545101.xml | 4 +- .../dist/game/data/buylists/3545102.xml | 4 +- .../dist/game/data/buylists/3545300.xml | 4 +- .../dist/game/data/buylists/3545301.xml | 4 +- .../dist/game/data/buylists/3545302.xml | 4 +- .../dist/game/data/buylists/3545500.xml | 4 +- .../dist/game/data/buylists/3545501.xml | 4 +- .../dist/game/data/buylists/3545502.xml | 4 +- .../dist/game/data/buylists/3545700.xml | 4 +- .../dist/game/data/buylists/3545701.xml | 4 +- .../dist/game/data/buylists/3545702.xml | 4 +- .../dist/game/data/buylists/3545900.xml | 4 +- .../dist/game/data/buylists/3545901.xml | 4 +- .../dist/game/data/buylists/3545902.xml | 4 +- .../dist/game/data/buylists/3546100.xml | 4 +- .../dist/game/data/buylists/3546101.xml | 4 +- .../dist/game/data/buylists/3546102.xml | 4 +- .../dist/game/data/buylists/3546300.xml | 4 +- .../dist/game/data/buylists/3546301.xml | 4 +- .../dist/game/data/buylists/3546302.xml | 4 +- .../dist/game/data/buylists/3546500.xml | 4 +- .../dist/game/data/buylists/3546501.xml | 4 +- .../dist/game/data/buylists/3546502.xml | 4 +- .../dist/game/data/buylists/3546700.xml | 4 +- .../dist/game/data/buylists/3546701.xml | 4 +- .../dist/game/data/buylists/3546702.xml | 4 +- .../dist/game/data/buylists/3556600.xml | 4 +- .../dist/game/data/buylists/3556601.xml | 4 +- .../dist/game/data/buylists/3556602.xml | 4 +- .../dist/game/data/buylists/3556800.xml | 4 +- .../dist/game/data/buylists/3556801.xml | 4 +- .../dist/game/data/buylists/3556802.xml | 4 +- .../dist/game/data/buylists/3557000.xml | 4 +- .../dist/game/data/buylists/3557001.xml | 4 +- .../dist/game/data/buylists/3557002.xml | 4 +- .../dist/game/data/buylists/3557200.xml | 4 +- .../dist/game/data/buylists/3557201.xml | 4 +- .../dist/game/data/buylists/3557202.xml | 4 +- .../dist/game/data/buylists/3557400.xml | 4 +- .../dist/game/data/buylists/3557401.xml | 4 +- .../dist/game/data/buylists/3557402.xml | 4 +- .../dist/game/data/buylists/3557600.xml | 4 +- .../dist/game/data/buylists/3557601.xml | 4 +- .../dist/game/data/buylists/3557602.xml | 4 +- .../dist/game/data/buylists/3557800.xml | 4 +- .../dist/game/data/buylists/3557801.xml | 4 +- .../dist/game/data/buylists/3557802.xml | 4 +- .../dist/game/data/buylists/3672100.xml | 2 +- .../dist/game/data/buylists/3672101.xml | 2 +- .../dist/game/data/buylists/3672102.xml | 2 +- .../dist/game/data/buylists/3672300.xml | 2 +- .../dist/game/data/buylists/3672301.xml | 2 +- .../dist/game/data/buylists/3672302.xml | 2 +- .../dist/game/data/buylists/3672500.xml | 2 +- .../dist/game/data/buylists/3672501.xml | 2 +- .../dist/game/data/buylists/3672502.xml | 2 +- .../dist/game/data/buylists/3672700.xml | 2 +- .../dist/game/data/buylists/3672701.xml | 2 +- .../dist/game/data/buylists/3672702.xml | 2 +- .../dist/game/data/buylists/3672900.xml | 2 +- .../dist/game/data/buylists/3672901.xml | 2 +- .../dist/game/data/buylists/3672902.xml | 2 +- .../dist/game/data/buylists/3673100.xml | 2 +- .../dist/game/data/buylists/3673101.xml | 2 +- .../dist/game/data/buylists/3673102.xml | 2 +- .../dist/game/data/buylists/3673300.xml | 2 +- .../dist/game/data/buylists/3673301.xml | 2 +- .../dist/game/data/buylists/3673302.xml | 2 +- .../dist/game/data/buylists/3673500.xml | 2 +- .../dist/game/data/buylists/3673501.xml | 2 +- .../dist/game/data/buylists/3673502.xml | 2 +- .../dist/game/data/buylists/3673700.xml | 2 +- .../dist/game/data/buylists/3673701.xml | 2 +- .../dist/game/data/buylists/3673702.xml | 2 +- .../dist/game/data/buylists/3673900.xml | 2 +- .../dist/game/data/buylists/3673901.xml | 2 +- .../dist/game/data/buylists/3673902.xml | 2 +- .../dist/game/data/html/admin/zone.htm | 2 +- .../dist/game/data/multisell/1004.xml | 338 -------- .../dist/game/data/multisell/719.xml | 60 +- .../game/data/multisell/custom/600010.xml | 30 +- .../DelusionTeleport/DelusionTeleport.java | 26 +- .../admincommandhandlers/AdminElement.java | 2 +- .../admincommandhandlers/AdminShop.java | 38 +- .../admincommandhandlers/AdminZone.java | 2 +- .../scripts/handlers/bypasshandlers/Wear.java | 4 +- .../handlers/communityboard/HomeBoard.java | 2 +- .../handlers/communityboard/RegionBoard.java | 3 +- .../handlers/effecthandlers/ConvertItem.java | 2 +- .../scripts/handlers/itemhandlers/Seed.java | 6 +- .../game/data/stats/items/15400-15499.xml | 1 + .../dist/game/data/xsd/buylist.xsd | 2 + .../dist/game/data/xsd/multisell.xsd | 4 +- .../dist/game/data/zones/custom_town.xml | 639 -------------- .../dist/game/data/zones/tax.xml | 5 +- .../java/com/l2jmobius/Config.java | 2 - .../gameserver/data/xml/impl/BuyListData.java | 82 +- .../data/xml/impl/MultisellData.java | 411 +++------ .../gameserver/data/xml/impl/OptionData.java | 4 +- .../datatables/AugmentationData.java | 32 +- .../instancemanager/MapRegionManager.java | 20 +- .../instancemanager/TownManager.java | 121 --- .../gameserver/model/Augmentation.java | 202 +++-- .../model/CharSelectInfoPackage.java | 10 +- .../l2jmobius/gameserver/model/ItemInfo.java | 72 +- .../gameserver/model/L2MapRegion.java | 9 +- .../l2jmobius/gameserver/model/StatsSet.java | 14 + .../l2jmobius/gameserver/model/TradeItem.java | 8 +- .../l2jmobius/gameserver/model/TradeList.java | 29 +- .../gameserver/model/actor/L2Npc.java | 74 +- .../actor/instance/L2MerchantInstance.java | 30 +- .../model/actor/instance/L2PcInstance.java | 17 +- .../gameserver/model/buylist/Product.java | 29 +- .../gameserver/model/buylist/ProductList.java | 12 +- .../gameserver/model/ensoul/EnsoulOption.java | 6 + .../gameserver/model/entity/Castle.java | 16 +- .../model/events/AbstractScript.java | 2 +- .../character/player/OnPlayerAugment.java | 8 +- .../model/holders/ItemChanceHolder.java | 32 + .../model/holders/MultisellEntryHolder.java | 56 ++ .../model/holders/MultisellListHolder.java | 112 +++ .../holders/PreparedMultisellListHolder.java | 107 +++ .../model/itemauction/AuctionItem.java | 9 +- .../model/itemcontainer/Inventory.java | 5 +- .../model/itemcontainer/PcInventory.java | 44 - .../model/items/L2WarehouseItem.java | 26 +- .../model/items/instance/L2ItemInstance.java | 82 +- .../gameserver/model/multisell/Entry.java | 91 -- .../model/multisell/Ingredient.java | 151 ---- .../gameserver/model/multisell/ItemInfo.java | 104 --- .../model/multisell/ListContainer.java | 123 --- .../model/multisell/PreparedEntry.java | 107 --- .../multisell/PreparedListContainer.java | 104 --- .../gameserver/model/options/Options.java | 102 ++- .../model/variables/PlayerVariables.java | 1 + .../gameserver/model/zone/ZoneId.java | 4 +- .../gameserver/model/zone/type/L2TaxZone.java | 171 ++-- .../clientpackets/MultiSellChoose.java | 795 ++++++++++-------- .../network/clientpackets/RequestBuyItem.java | 17 +- .../RequestExEnchantItemAttribute.java | 3 +- .../clientpackets/RequestPreviewItem.java | 4 +- .../network/clientpackets/RequestRefine.java | 10 +- .../clientpackets/RequestRefundItem.java | 22 +- .../clientpackets/RequestSellItem.java | 30 +- .../RequestChangeAttributeItem.java | 2 +- .../serverpackets/AbstractItemPacket.java | 135 ++- .../network/serverpackets/BuyList.java | 27 +- .../network/serverpackets/CharInfo.java | 5 +- .../serverpackets/CharSelectionInfo.java | 9 +- .../network/serverpackets/ExBuySellList.java | 24 +- .../ExPutItemResultForVariationCancel.java | 8 +- .../serverpackets/ExUserInfoEquipSlot.java | 5 +- .../network/serverpackets/FakePlayerInfo.java | 3 +- .../serverpackets/GMViewCharacterInfo.java | 5 +- .../serverpackets/GMViewSkillInfo.java | 2 +- .../network/serverpackets/MultiSellList.java | 201 ++--- .../network/serverpackets/SellList.java | 111 --- .../serverpackets/ShopPreviewList.java | 4 +- .../network/serverpackets/TradeOtherAdd.java | 2 +- .../network/serverpackets/TradeOwnAdd.java | 2 +- .../network/serverpackets/TradeUpdate.java | 2 +- .../ExResponseCommissionBuyItem.java | 2 +- .../dist/game/config/Character.ini | 4 - .../dist/game/data/buylists/0000382.xml | 88 +- .../dist/game/data/buylists/0000383.xml | 88 +- .../dist/game/data/buylists/0335103.xml | 2 +- .../dist/game/data/buylists/0335145.xml | 2 +- .../dist/game/data/buylists/0335187.xml | 2 +- .../dist/game/data/buylists/0335229.xml | 2 +- .../dist/game/data/buylists/0335230.xml | 2 +- .../dist/game/data/buylists/0335231.xml | 2 +- .../dist/game/data/buylists/0335277.xml | 2 +- .../dist/game/data/buylists/0335319.xml | 2 +- .../dist/game/data/buylists/0335366.xml | 2 +- .../dist/game/data/buylists/0335383.xml | 2 +- .../dist/game/data/buylists/0335390.xml | 2 +- .../dist/game/data/buylists/0335421.xml | 2 +- .../dist/game/data/buylists/0335512.xml | 2 +- .../dist/game/data/buylists/0335558.xml | 2 +- .../dist/game/data/buylists/0335580.xml | 2 +- .../dist/game/data/buylists/0335582.xml | 2 +- .../dist/game/data/buylists/0335584.xml | 2 +- .../dist/game/data/buylists/0335586.xml | 2 +- .../dist/game/data/buylists/0335605.xml | 2 +- .../dist/game/data/buylists/0335644.xml | 2 +- .../dist/game/data/buylists/0335645.xml | 2 +- .../dist/game/data/buylists/0336456.xml | 2 +- .../dist/game/data/buylists/0351001.xml | 2 +- .../dist/game/data/buylists/0351021.xml | 22 +- .../dist/game/data/buylists/0351022.xml | 22 +- .../dist/game/data/buylists/0351023.xml | 8 +- .../dist/game/data/buylists/0351024.xml | 22 +- .../dist/game/data/buylists/0351025.xml | 6 +- .../dist/game/data/buylists/0351026.xml | 42 +- .../dist/game/data/buylists/0351421.xml | 4 +- .../dist/game/data/buylists/0351441.xml | 22 +- .../dist/game/data/buylists/0351442.xml | 22 +- .../dist/game/data/buylists/0351443.xml | 8 +- .../dist/game/data/buylists/0351444.xml | 22 +- .../dist/game/data/buylists/0351445.xml | 6 +- .../dist/game/data/buylists/0351446.xml | 42 +- .../dist/game/data/buylists/0351841.xml | 4 +- .../dist/game/data/buylists/0351861.xml | 22 +- .../dist/game/data/buylists/0351862.xml | 22 +- .../dist/game/data/buylists/0351863.xml | 8 +- .../dist/game/data/buylists/0351864.xml | 22 +- .../dist/game/data/buylists/0351865.xml | 6 +- .../dist/game/data/buylists/0351866.xml | 42 +- .../dist/game/data/buylists/0352261.xml | 2 +- .../dist/game/data/buylists/0352281.xml | 22 +- .../dist/game/data/buylists/0352282.xml | 22 +- .../dist/game/data/buylists/0352283.xml | 8 +- .../dist/game/data/buylists/0352284.xml | 22 +- .../dist/game/data/buylists/0352285.xml | 6 +- .../dist/game/data/buylists/0352286.xml | 42 +- .../dist/game/data/buylists/0352741.xml | 2 +- .../dist/game/data/buylists/0352761.xml | 22 +- .../dist/game/data/buylists/0352762.xml | 22 +- .../dist/game/data/buylists/0352763.xml | 12 +- .../dist/game/data/buylists/0352764.xml | 22 +- .../dist/game/data/buylists/0352765.xml | 6 +- .../dist/game/data/buylists/0352766.xml | 42 +- .../dist/game/data/buylists/0353161.xml | 2 +- .../dist/game/data/buylists/0353181.xml | 22 +- .../dist/game/data/buylists/0353182.xml | 22 +- .../dist/game/data/buylists/0353183.xml | 8 +- .../dist/game/data/buylists/0353184.xml | 22 +- .../dist/game/data/buylists/0353185.xml | 6 +- .../dist/game/data/buylists/0353186.xml | 42 +- .../dist/game/data/buylists/0353631.xml | 2 +- .../dist/game/data/buylists/0353651.xml | 22 +- .../dist/game/data/buylists/0353652.xml | 22 +- .../dist/game/data/buylists/0353653.xml | 8 +- .../dist/game/data/buylists/0353654.xml | 22 +- .../dist/game/data/buylists/0353655.xml | 6 +- .../dist/game/data/buylists/0353656.xml | 42 +- .../dist/game/data/buylists/0355091.xml | 2 +- .../dist/game/data/buylists/0355111.xml | 22 +- .../dist/game/data/buylists/0355112.xml | 22 +- .../dist/game/data/buylists/0355113.xml | 12 +- .../dist/game/data/buylists/0355114.xml | 22 +- .../dist/game/data/buylists/0355115.xml | 6 +- .../dist/game/data/buylists/0355116.xml | 42 +- .../dist/game/data/buylists/0355551.xml | 2 +- .../dist/game/data/buylists/0355571.xml | 22 +- .../dist/game/data/buylists/0355572.xml | 22 +- .../dist/game/data/buylists/0355573.xml | 8 +- .../dist/game/data/buylists/0355574.xml | 22 +- .../dist/game/data/buylists/0355575.xml | 6 +- .../dist/game/data/buylists/0355576.xml | 42 +- .../dist/game/data/buylists/0366531.xml | 2 +- .../dist/game/data/buylists/0366541.xml | 4 +- .../dist/game/data/buylists/0366551.xml | 4 +- .../dist/game/data/buylists/0366561.xml | 2 +- .../dist/game/data/buylists/0366571.xml | 2 +- .../dist/game/data/buylists/0366581.xml | 2 +- .../dist/game/data/buylists/0366591.xml | 2 +- .../dist/game/data/buylists/0366601.xml | 2 +- .../dist/game/data/buylists/0366611.xml | 2 +- .../dist/game/data/buylists/1312801.xml | 2 +- .../dist/game/data/buylists/3000100.xml | 4 +- .../dist/game/data/buylists/3000101.xml | 2 +- .../dist/game/data/buylists/3000200.xml | 4 +- .../dist/game/data/buylists/3000201.xml | 4 +- .../dist/game/data/buylists/3000300.xml | 2 +- .../dist/game/data/buylists/3000301.xml | 2 +- .../dist/game/data/buylists/3000400.xml | 5 +- .../dist/game/data/buylists/3004700.xml | 2 +- .../dist/game/data/buylists/3006000.xml | 4 +- .../dist/game/data/buylists/3006001.xml | 4 +- .../dist/game/data/buylists/3006100.xml | 4 +- .../dist/game/data/buylists/3006101.xml | 4 +- .../dist/game/data/buylists/3006200.xml | 4 +- .../dist/game/data/buylists/3006201.xml | 2 +- .../dist/game/data/buylists/3006202.xml | 2 +- .../dist/game/data/buylists/3006300.xml | 15 +- .../dist/game/data/buylists/3006301.xml | 4 +- .../dist/game/data/buylists/3007800.xml | 135 +-- .../dist/game/data/buylists/3008100.xml | 14 +- .../dist/game/data/buylists/3008101.xml | 4 +- .../dist/game/data/buylists/3008200.xml | 2 +- .../dist/game/data/buylists/3008201.xml | 2 +- .../dist/game/data/buylists/3008400.xml | 4 +- .../dist/game/data/buylists/3008401.xml | 2 +- .../dist/game/data/buylists/3008500.xml | 4 +- .../dist/game/data/buylists/3008701.xml | 4 +- .../dist/game/data/buylists/3008800.xml | 2 +- .../dist/game/data/buylists/3009000.xml | 4 +- .../dist/game/data/buylists/3009001.xml | 2 +- .../dist/game/data/buylists/3009100.xml | 4 +- .../dist/game/data/buylists/3009101.xml | 2 +- .../dist/game/data/buylists/3009300.xml | 4 +- .../dist/game/data/buylists/3009400.xml | 2 +- .../dist/game/data/buylists/3009401.xml | 2 +- .../dist/game/data/buylists/3009402.xml | 2 +- .../dist/game/data/buylists/3013500.xml | 2 +- .../dist/game/data/buylists/3013501.xml | 2 +- .../dist/game/data/buylists/3013600.xml | 2 +- .../dist/game/data/buylists/3013601.xml | 2 +- .../dist/game/data/buylists/3013700.xml | 4 +- .../dist/game/data/buylists/3013800.xml | 2 +- .../dist/game/data/buylists/3013801.xml | 2 +- .../dist/game/data/buylists/3014700.xml | 2 +- .../dist/game/data/buylists/3014701.xml | 2 +- .../dist/game/data/buylists/3014800.xml | 2 +- .../dist/game/data/buylists/3014801.xml | 2 +- .../dist/game/data/buylists/3014900.xml | 4 +- .../dist/game/data/buylists/3014901.xml | 2 +- .../dist/game/data/buylists/3015000.xml | 2 +- .../dist/game/data/buylists/3016300.xml | 2 +- .../dist/game/data/buylists/3016400.xml | 2 +- .../dist/game/data/buylists/3016500.xml | 2 +- .../dist/game/data/buylists/3016501.xml | 2 +- .../dist/game/data/buylists/3016601.xml | 2 +- .../dist/game/data/buylists/3017800.xml | 4 +- .../dist/game/data/buylists/3017801.xml | 4 +- .../dist/game/data/buylists/3017900.xml | 4 +- .../dist/game/data/buylists/3017901.xml | 4 +- .../dist/game/data/buylists/3018000.xml | 15 +- .../dist/game/data/buylists/3018001.xml | 4 +- .../dist/game/data/buylists/3018100.xml | 2 +- .../dist/game/data/buylists/3020700.xml | 2 +- .../dist/game/data/buylists/3020701.xml | 2 +- .../dist/game/data/buylists/3020800.xml | 2 +- .../dist/game/data/buylists/3020801.xml | 2 +- .../dist/game/data/buylists/3020802.xml | 2 +- .../dist/game/data/buylists/3020803.xml | 2 +- .../dist/game/data/buylists/3020900.xml | 2 +- .../dist/game/data/buylists/3023000.xml | 4 +- .../dist/game/data/buylists/3023001.xml | 4 +- .../dist/game/data/buylists/3023100.xml | 4 +- .../dist/game/data/buylists/3025300.xml | 4 +- .../dist/game/data/buylists/3025301.xml | 4 +- .../dist/game/data/buylists/3025400.xml | 15 +- .../dist/game/data/buylists/3025401.xml | 4 +- .../dist/game/data/buylists/3029400.xml | 4 +- .../dist/game/data/buylists/3030100.xml | 14 +- .../dist/game/data/buylists/3030101.xml | 4 +- .../dist/game/data/buylists/3031300.xml | 2 +- .../dist/game/data/buylists/3031400.xml | 2 +- .../dist/game/data/buylists/3031401.xml | 2 +- .../dist/game/data/buylists/3031402.xml | 2 +- .../dist/game/data/buylists/3031500.xml | 15 +- .../dist/game/data/buylists/3032100.xml | 4 +- .../dist/game/data/buylists/3032101.xml | 4 +- .../dist/game/data/buylists/3038700.xml | 2 +- .../dist/game/data/buylists/3042000.xml | 2 +- .../dist/game/data/buylists/3043600.xml | 4 +- .../dist/game/data/buylists/3043700.xml | 4 +- .../dist/game/data/buylists/3051600.xml | 2 +- .../dist/game/data/buylists/3051601.xml | 2 +- .../dist/game/data/buylists/3051700.xml | 2 +- .../dist/game/data/buylists/3051701.xml | 2 +- .../dist/game/data/buylists/3051800.xml | 2 +- .../dist/game/data/buylists/3051900.xml | 2 +- .../dist/game/data/buylists/3051901.xml | 2 +- .../dist/game/data/buylists/3055800.xml | 2 +- .../dist/game/data/buylists/3055801.xml | 2 +- .../dist/game/data/buylists/3055900.xml | 2 +- .../dist/game/data/buylists/3055901.xml | 2 +- .../dist/game/data/buylists/3056000.xml | 2 +- .../dist/game/data/buylists/3056001.xml | 2 +- .../dist/game/data/buylists/3056100.xml | 2 +- .../dist/game/data/buylists/3068400.xml | 4 +- .../dist/game/data/buylists/3068401.xml | 4 +- .../dist/game/data/buylists/3073100.xml | 2 +- .../dist/game/data/buylists/3082700.xml | 4 +- .../dist/game/data/buylists/3082800.xml | 2 +- .../dist/game/data/buylists/3082900.xml | 2 +- .../dist/game/data/buylists/3083000.xml | 4 +- .../dist/game/data/buylists/3083100.xml | 2 +- .../dist/game/data/buylists/3083400.xml | 4 +- .../dist/game/data/buylists/3083401.xml | 4 +- .../dist/game/data/buylists/3083700.xml | 4 +- .../dist/game/data/buylists/3083701.xml | 4 +- .../dist/game/data/buylists/3083800.xml | 4 +- .../dist/game/data/buylists/3083801.xml | 2 +- .../dist/game/data/buylists/3083900.xml | 15 +- .../dist/game/data/buylists/3084000.xml | 2 +- .../dist/game/data/buylists/3084100.xml | 4 +- .../dist/game/data/buylists/3084101.xml | 4 +- .../dist/game/data/buylists/3084102.xml | 2 +- .../dist/game/data/buylists/3084200.xml | 4 +- .../dist/game/data/buylists/3086900.xml | 2 +- .../dist/game/data/buylists/3087900.xml | 2 +- .../dist/game/data/buylists/3089000.xml | 4 +- .../dist/game/data/buylists/3089001.xml | 4 +- .../dist/game/data/buylists/3089100.xml | 4 +- .../dist/game/data/buylists/3089101.xml | 4 +- .../dist/game/data/buylists/3089200.xml | 4 +- .../dist/game/data/buylists/3089300.xml | 14 +- .../dist/game/data/buylists/3089301.xml | 4 +- .../dist/game/data/buylists/3104500.xml | 135 +-- .../dist/game/data/buylists/3106700.xml | 4 +- .../dist/game/data/buylists/3125600.xml | 4 +- .../dist/game/data/buylists/3125601.xml | 4 +- .../dist/game/data/buylists/3125602.xml | 2 +- .../dist/game/data/buylists/3125603.xml | 2 +- .../dist/game/data/buylists/3125700.xml | 4 +- .../dist/game/data/buylists/3125701.xml | 4 +- .../dist/game/data/buylists/3125702.xml | 2 +- .../dist/game/data/buylists/3125703.xml | 2 +- .../dist/game/data/buylists/3125800.xml | 4 +- .../dist/game/data/buylists/3125801.xml | 4 +- .../dist/game/data/buylists/3125802.xml | 2 +- .../dist/game/data/buylists/3125803.xml | 2 +- .../dist/game/data/buylists/3125900.xml | 4 +- .../dist/game/data/buylists/3125901.xml | 4 +- .../dist/game/data/buylists/3125902.xml | 2 +- .../dist/game/data/buylists/3125903.xml | 2 +- .../dist/game/data/buylists/3126000.xml | 2 +- .../dist/game/data/buylists/3126001.xml | 2 +- .../dist/game/data/buylists/3126100.xml | 4 +- .../dist/game/data/buylists/3126101.xml | 2 +- .../dist/game/data/buylists/3126200.xml | 2 +- .../dist/game/data/buylists/3126300.xml | 4 +- .../dist/game/data/buylists/3126301.xml | 15 +- .../dist/game/data/buylists/3126500.xml | 2 +- .../dist/game/data/buylists/3127400.xml | 4 +- .../dist/game/data/buylists/3130000.xml | 4 +- .../dist/game/data/buylists/3130001.xml | 4 +- .../dist/game/data/buylists/3130100.xml | 4 +- .../dist/game/data/buylists/3130101.xml | 4 +- .../dist/game/data/buylists/3130200.xml | 4 +- .../dist/game/data/buylists/3130201.xml | 4 +- .../dist/game/data/buylists/3130300.xml | 4 +- .../dist/game/data/buylists/3130301.xml | 4 +- .../dist/game/data/buylists/3130400.xml | 4 +- .../dist/game/data/buylists/3130500.xml | 4 +- .../dist/game/data/buylists/3130600.xml | 2 +- .../dist/game/data/buylists/3130700.xml | 4 +- .../dist/game/data/buylists/3130701.xml | 15 +- .../dist/game/data/buylists/3130900.xml | 4 +- .../dist/game/data/buylists/3131800.xml | 2 +- .../dist/game/data/buylists/3131900.xml | 4 +- .../dist/game/data/buylists/3135100.xml | 2 +- .../dist/game/data/buylists/3136600.xml | 2 +- .../dist/game/data/buylists/3138600.xml | 4 +- .../dist/game/data/buylists/3141300.xml | 2 +- .../dist/game/data/buylists/3141400.xml | 2 +- .../dist/game/data/buylists/3141500.xml | 2 +- .../dist/game/data/buylists/3141600.xml | 2 +- .../dist/game/data/buylists/3141700.xml | 2 +- .../dist/game/data/buylists/3141800.xml | 2 +- .../dist/game/data/buylists/3141900.xml | 2 +- .../dist/game/data/buylists/3142000.xml | 2 +- .../dist/game/data/buylists/3142100.xml | 2 +- .../dist/game/data/buylists/3142200.xml | 2 +- .../dist/game/data/buylists/3142300.xml | 2 +- .../dist/game/data/buylists/3142400.xml | 2 +- .../dist/game/data/buylists/3142500.xml | 2 +- .../dist/game/data/buylists/3142600.xml | 2 +- .../dist/game/data/buylists/3142700.xml | 2 +- .../dist/game/data/buylists/3142800.xml | 2 +- .../dist/game/data/buylists/3142900.xml | 2 +- .../dist/game/data/buylists/3143000.xml | 2 +- .../dist/game/data/buylists/3143100.xml | 2 +- .../dist/game/data/buylists/3143200.xml | 2 +- .../dist/game/data/buylists/3143300.xml | 2 +- .../dist/game/data/buylists/3143400.xml | 2 +- .../dist/game/data/buylists/3143500.xml | 2 +- .../dist/game/data/buylists/3143600.xml | 2 +- .../dist/game/data/buylists/3143700.xml | 2 +- .../dist/game/data/buylists/3143800.xml | 2 +- .../dist/game/data/buylists/3143900.xml | 2 +- .../dist/game/data/buylists/3144000.xml | 4 +- .../dist/game/data/buylists/3144100.xml | 2 +- .../dist/game/data/buylists/3144200.xml | 26 +- .../dist/game/data/buylists/3144300.xml | 4 +- .../dist/game/data/buylists/3144400.xml | 4 +- .../dist/game/data/buylists/3144500.xml | 4 +- .../dist/game/data/buylists/3156300.xml | 2 +- .../dist/game/data/buylists/3156700.xml | 2 +- .../dist/game/data/buylists/3156800.xml | 2 +- .../dist/game/data/buylists/3157000.xml | 2 +- .../dist/game/data/buylists/3157100.xml | 2 +- .../dist/game/data/buylists/3157200.xml | 2 +- .../dist/game/data/buylists/3157300.xml | 2 +- .../dist/game/data/buylists/3157400.xml | 2 +- .../dist/game/data/buylists/3157500.xml | 2 +- .../dist/game/data/buylists/3157600.xml | 2 +- .../dist/game/data/buylists/3157700.xml | 2 +- .../dist/game/data/buylists/3157800.xml | 2 +- .../dist/game/data/buylists/3157900.xml | 2 +- .../dist/game/data/buylists/3166600.xml | 2 +- .../dist/game/data/buylists/3166700.xml | 2 +- .../dist/game/data/buylists/3166800.xml | 2 +- .../dist/game/data/buylists/3166900.xml | 4 +- .../dist/game/data/buylists/3167000.xml | 2 +- .../dist/game/data/buylists/3169600.xml | 2 +- .../dist/game/data/buylists/3169700.xml | 2 +- .../dist/game/data/buylists/3175601.xml | 338 ++++---- .../dist/game/data/buylists/3175602.xml | 78 +- .../dist/game/data/buylists/3175603.xml | 230 ++--- .../dist/game/data/buylists/3175604.xml | 312 +++---- .../dist/game/data/buylists/3175605.xml | 278 +++--- .../dist/game/data/buylists/3175606.xml | 300 +++---- .../dist/game/data/buylists/3175607.xml | 314 +++---- .../dist/game/data/buylists/3175608.xml | 228 ++--- .../dist/game/data/buylists/3194500.xml | 4 +- .../dist/game/data/buylists/3194501.xml | 4 +- .../dist/game/data/buylists/3194600.xml | 4 +- .../dist/game/data/buylists/3194601.xml | 4 +- .../dist/game/data/buylists/3194700.xml | 4 +- .../dist/game/data/buylists/3194701.xml | 4 +- .../dist/game/data/buylists/3194800.xml | 4 +- .../dist/game/data/buylists/3194801.xml | 4 +- .../dist/game/data/buylists/3194900.xml | 4 +- .../dist/game/data/buylists/3195000.xml | 4 +- .../dist/game/data/buylists/3195100.xml | 2 +- .../dist/game/data/buylists/3195200.xml | 4 +- .../dist/game/data/buylists/3195201.xml | 15 +- .../dist/game/data/buylists/3195400.xml | 2 +- .../dist/game/data/buylists/3196200.xml | 2 +- .../dist/game/data/buylists/3196300.xml | 4 +- .../dist/game/data/buylists/3197300.xml | 2 +- .../dist/game/data/buylists/3198000.xml | 2 +- .../dist/game/data/buylists/3198900.xml | 2 +- .../dist/game/data/buylists/3200700.xml | 21 +- .../dist/game/data/buylists/3210500.xml | 2 +- .../dist/game/data/buylists/3210600.xml | 2 +- .../dist/game/data/buylists/3216400.xml | 2 +- .../dist/game/data/buylists/3216401.xml | 2 +- .../dist/game/data/buylists/3216500.xml | 2 +- .../dist/game/data/buylists/3216501.xml | 2 +- .../dist/game/data/buylists/3216600.xml | 4 +- .../dist/game/data/buylists/3216700.xml | 2 +- .../dist/game/data/buylists/3216900.xml | 2 +- .../dist/game/data/buylists/3229800.xml | 3 +- .../dist/game/data/buylists/3287400.xml | 2 +- .../dist/game/data/buylists/3287500.xml | 2 +- .../dist/game/data/buylists/3287600.xml | 4 +- .../dist/game/data/buylists/3287700.xml | 2 +- .../dist/game/data/buylists/3287800.xml | 4 +- .../dist/game/data/buylists/3287900.xml | 2 +- .../dist/game/data/buylists/3288000.xml | 4 +- .../dist/game/data/buylists/3288100.xml | 4 +- .../dist/game/data/buylists/3288200.xml | 4 +- .../dist/game/data/buylists/3288300.xml | 4 +- .../dist/game/data/buylists/3288700.xml | 2 +- .../dist/game/data/buylists/3289700.xml | 15 +- .../dist/game/data/buylists/3357900.xml | 2 +- .../dist/game/data/buylists/3393400.xml | 2 +- .../dist/game/data/buylists/3393401.xml | 2 +- .../dist/game/data/buylists/3393500.xml | 2 +- .../dist/game/data/buylists/3393501.xml | 2 +- .../dist/game/data/buylists/3393600.xml | 2 +- .../dist/game/data/buylists/3393700.xml | 2 +- .../dist/game/data/buylists/3538400.xml | 4 +- .../dist/game/data/buylists/3538401.xml | 4 +- .../dist/game/data/buylists/3538402.xml | 4 +- .../dist/game/data/buylists/3538600.xml | 4 +- .../dist/game/data/buylists/3538601.xml | 4 +- .../dist/game/data/buylists/3538602.xml | 4 +- .../dist/game/data/buylists/3538800.xml | 4 +- .../dist/game/data/buylists/3538801.xml | 4 +- .../dist/game/data/buylists/3538802.xml | 4 +- .../dist/game/data/buylists/3539200.xml | 4 +- .../dist/game/data/buylists/3539201.xml | 4 +- .../dist/game/data/buylists/3539202.xml | 4 +- .../dist/game/data/buylists/3539400.xml | 4 +- .../dist/game/data/buylists/3539401.xml | 4 +- .../dist/game/data/buylists/3539402.xml | 4 +- .../dist/game/data/buylists/3539600.xml | 4 +- .../dist/game/data/buylists/3539601.xml | 4 +- .../dist/game/data/buylists/3539602.xml | 4 +- .../dist/game/data/buylists/3539800.xml | 4 +- .../dist/game/data/buylists/3539801.xml | 4 +- .../dist/game/data/buylists/3539802.xml | 4 +- .../dist/game/data/buylists/3540000.xml | 4 +- .../dist/game/data/buylists/3540001.xml | 4 +- .../dist/game/data/buylists/3540002.xml | 4 +- .../dist/game/data/buylists/3540300.xml | 4 +- .../dist/game/data/buylists/3540301.xml | 4 +- .../dist/game/data/buylists/3540302.xml | 4 +- .../dist/game/data/buylists/3540500.xml | 4 +- .../dist/game/data/buylists/3540501.xml | 4 +- .../dist/game/data/buylists/3540502.xml | 4 +- .../dist/game/data/buylists/3540700.xml | 4 +- .../dist/game/data/buylists/3540701.xml | 4 +- .../dist/game/data/buylists/3540702.xml | 4 +- .../dist/game/data/buylists/3543900.xml | 4 +- .../dist/game/data/buylists/3543901.xml | 4 +- .../dist/game/data/buylists/3543902.xml | 4 +- .../dist/game/data/buylists/3544100.xml | 4 +- .../dist/game/data/buylists/3544101.xml | 4 +- .../dist/game/data/buylists/3544102.xml | 4 +- .../dist/game/data/buylists/3544300.xml | 4 +- .../dist/game/data/buylists/3544301.xml | 4 +- .../dist/game/data/buylists/3544302.xml | 4 +- .../dist/game/data/buylists/3544500.xml | 4 +- .../dist/game/data/buylists/3544501.xml | 4 +- .../dist/game/data/buylists/3544502.xml | 4 +- .../dist/game/data/buylists/3544700.xml | 4 +- .../dist/game/data/buylists/3544701.xml | 4 +- .../dist/game/data/buylists/3544702.xml | 4 +- .../dist/game/data/buylists/3544900.xml | 4 +- .../dist/game/data/buylists/3544901.xml | 4 +- .../dist/game/data/buylists/3544902.xml | 4 +- .../dist/game/data/buylists/3545100.xml | 4 +- .../dist/game/data/buylists/3545101.xml | 4 +- .../dist/game/data/buylists/3545102.xml | 4 +- .../dist/game/data/buylists/3545300.xml | 4 +- .../dist/game/data/buylists/3545301.xml | 4 +- .../dist/game/data/buylists/3545302.xml | 4 +- .../dist/game/data/buylists/3545500.xml | 4 +- .../dist/game/data/buylists/3545501.xml | 4 +- .../dist/game/data/buylists/3545502.xml | 4 +- .../dist/game/data/buylists/3545700.xml | 4 +- .../dist/game/data/buylists/3545701.xml | 4 +- .../dist/game/data/buylists/3545702.xml | 4 +- .../dist/game/data/buylists/3545900.xml | 4 +- .../dist/game/data/buylists/3545901.xml | 4 +- .../dist/game/data/buylists/3545902.xml | 4 +- .../dist/game/data/buylists/3546100.xml | 4 +- .../dist/game/data/buylists/3546101.xml | 4 +- .../dist/game/data/buylists/3546102.xml | 4 +- .../dist/game/data/buylists/3546300.xml | 4 +- .../dist/game/data/buylists/3546301.xml | 4 +- .../dist/game/data/buylists/3546302.xml | 4 +- .../dist/game/data/buylists/3546500.xml | 4 +- .../dist/game/data/buylists/3546501.xml | 4 +- .../dist/game/data/buylists/3546502.xml | 4 +- .../dist/game/data/buylists/3546700.xml | 4 +- .../dist/game/data/buylists/3546701.xml | 4 +- .../dist/game/data/buylists/3546702.xml | 4 +- .../dist/game/data/buylists/3556600.xml | 4 +- .../dist/game/data/buylists/3556601.xml | 4 +- .../dist/game/data/buylists/3556602.xml | 4 +- .../dist/game/data/buylists/3556800.xml | 4 +- .../dist/game/data/buylists/3556801.xml | 4 +- .../dist/game/data/buylists/3556802.xml | 4 +- .../dist/game/data/buylists/3557000.xml | 4 +- .../dist/game/data/buylists/3557001.xml | 4 +- .../dist/game/data/buylists/3557002.xml | 4 +- .../dist/game/data/buylists/3557200.xml | 4 +- .../dist/game/data/buylists/3557201.xml | 4 +- .../dist/game/data/buylists/3557202.xml | 4 +- .../dist/game/data/buylists/3557400.xml | 4 +- .../dist/game/data/buylists/3557401.xml | 4 +- .../dist/game/data/buylists/3557402.xml | 4 +- .../dist/game/data/buylists/3557600.xml | 4 +- .../dist/game/data/buylists/3557601.xml | 4 +- .../dist/game/data/buylists/3557602.xml | 4 +- .../dist/game/data/buylists/3557800.xml | 4 +- .../dist/game/data/buylists/3557801.xml | 4 +- .../dist/game/data/buylists/3557802.xml | 4 +- .../dist/game/data/buylists/3672100.xml | 2 +- .../dist/game/data/buylists/3672101.xml | 2 +- .../dist/game/data/buylists/3672102.xml | 2 +- .../dist/game/data/buylists/3672300.xml | 2 +- .../dist/game/data/buylists/3672301.xml | 2 +- .../dist/game/data/buylists/3672302.xml | 2 +- .../dist/game/data/buylists/3672500.xml | 2 +- .../dist/game/data/buylists/3672501.xml | 2 +- .../dist/game/data/buylists/3672502.xml | 2 +- .../dist/game/data/buylists/3672700.xml | 2 +- .../dist/game/data/buylists/3672701.xml | 2 +- .../dist/game/data/buylists/3672702.xml | 2 +- .../dist/game/data/buylists/3672900.xml | 2 +- .../dist/game/data/buylists/3672901.xml | 2 +- .../dist/game/data/buylists/3672902.xml | 2 +- .../dist/game/data/buylists/3673100.xml | 2 +- .../dist/game/data/buylists/3673101.xml | 2 +- .../dist/game/data/buylists/3673102.xml | 2 +- .../dist/game/data/buylists/3673300.xml | 2 +- .../dist/game/data/buylists/3673301.xml | 2 +- .../dist/game/data/buylists/3673302.xml | 2 +- .../dist/game/data/buylists/3673500.xml | 2 +- .../dist/game/data/buylists/3673501.xml | 2 +- .../dist/game/data/buylists/3673502.xml | 2 +- .../dist/game/data/buylists/3673700.xml | 2 +- .../dist/game/data/buylists/3673701.xml | 2 +- .../dist/game/data/buylists/3673702.xml | 2 +- .../dist/game/data/buylists/3673900.xml | 2 +- .../dist/game/data/buylists/3673901.xml | 2 +- .../dist/game/data/buylists/3673902.xml | 2 +- .../dist/game/data/html/admin/zone.htm | 2 +- .../dist/game/data/multisell/1004.xml | 338 -------- .../dist/game/data/multisell/719.xml | 60 +- .../game/data/multisell/custom/600010.xml | 30 +- .../DelusionTeleport/DelusionTeleport.java | 26 +- .../admincommandhandlers/AdminElement.java | 2 +- .../admincommandhandlers/AdminShop.java | 38 +- .../admincommandhandlers/AdminZone.java | 2 +- .../scripts/handlers/bypasshandlers/Wear.java | 4 +- .../handlers/communityboard/HomeBoard.java | 2 +- .../handlers/communityboard/RegionBoard.java | 3 +- .../handlers/effecthandlers/ConvertItem.java | 2 +- .../scripts/handlers/itemhandlers/Seed.java | 6 +- .../game/data/stats/items/15400-15499.xml | 1 + .../dist/game/data/xsd/buylist.xsd | 2 + .../dist/game/data/xsd/multisell.xsd | 4 +- .../dist/game/data/zones/custom_town.xml | 639 -------------- .../dist/game/data/zones/tax.xml | 5 +- .../java/com/l2jmobius/Config.java | 2 - .../gameserver/data/xml/impl/BuyListData.java | 82 +- .../data/xml/impl/MultisellData.java | 411 +++------ .../gameserver/data/xml/impl/OptionData.java | 4 +- .../datatables/AugmentationData.java | 32 +- .../instancemanager/MapRegionManager.java | 20 +- .../instancemanager/TownManager.java | 121 --- .../gameserver/model/Augmentation.java | 202 +++-- .../model/CharSelectInfoPackage.java | 10 +- .../l2jmobius/gameserver/model/ItemInfo.java | 72 +- .../gameserver/model/L2MapRegion.java | 9 +- .../l2jmobius/gameserver/model/StatsSet.java | 14 + .../l2jmobius/gameserver/model/TradeItem.java | 8 +- .../l2jmobius/gameserver/model/TradeList.java | 29 +- .../gameserver/model/actor/L2Npc.java | 74 +- .../actor/instance/L2MerchantInstance.java | 30 +- .../model/actor/instance/L2PcInstance.java | 17 +- .../gameserver/model/buylist/Product.java | 29 +- .../gameserver/model/buylist/ProductList.java | 12 +- .../gameserver/model/ensoul/EnsoulOption.java | 6 + .../gameserver/model/entity/Castle.java | 16 +- .../model/events/AbstractScript.java | 2 +- .../character/player/OnPlayerAugment.java | 8 +- .../model/holders/ItemChanceHolder.java | 32 + .../model/holders/MultisellEntryHolder.java | 56 ++ .../model/holders/MultisellListHolder.java | 112 +++ .../holders/PreparedMultisellListHolder.java | 107 +++ .../model/itemauction/AuctionItem.java | 9 +- .../model/itemcontainer/Inventory.java | 5 +- .../model/itemcontainer/PcInventory.java | 44 - .../model/items/L2WarehouseItem.java | 26 +- .../model/items/instance/L2ItemInstance.java | 82 +- .../gameserver/model/multisell/Entry.java | 91 -- .../model/multisell/Ingredient.java | 151 ---- .../gameserver/model/multisell/ItemInfo.java | 104 --- .../model/multisell/ListContainer.java | 123 --- .../model/multisell/PreparedEntry.java | 107 --- .../multisell/PreparedListContainer.java | 104 --- .../gameserver/model/options/Options.java | 102 ++- .../model/variables/PlayerVariables.java | 1 + .../gameserver/model/zone/ZoneId.java | 4 +- .../gameserver/model/zone/type/L2TaxZone.java | 171 ++-- .../clientpackets/MultiSellChoose.java | 795 ++++++++++-------- .../network/clientpackets/RequestBuyItem.java | 17 +- .../RequestExEnchantItemAttribute.java | 3 +- .../clientpackets/RequestPreviewItem.java | 4 +- .../network/clientpackets/RequestRefine.java | 10 +- .../clientpackets/RequestRefundItem.java | 22 +- .../clientpackets/RequestSellItem.java | 30 +- .../RequestChangeAttributeItem.java | 2 +- .../serverpackets/AbstractItemPacket.java | 94 ++- .../network/serverpackets/BuyList.java | 27 +- .../network/serverpackets/CharInfo.java | 5 +- .../serverpackets/CharSelectionInfo.java | 9 +- .../network/serverpackets/ExBuySellList.java | 24 +- .../ExPutItemResultForVariationCancel.java | 8 +- .../serverpackets/ExUserInfoEquipSlot.java | 5 +- .../network/serverpackets/FakePlayerInfo.java | 3 +- .../serverpackets/GMViewCharacterInfo.java | 5 +- .../serverpackets/GMViewSkillInfo.java | 2 +- .../network/serverpackets/MultiSellList.java | 205 ++--- .../network/serverpackets/SellList.java | 111 --- .../serverpackets/ShopPreviewList.java | 4 +- .../ExResponseCommissionBuyItem.java | 2 +- .../dist/game/config/Character.ini | 4 - .../dist/game/data/buylists/0000382.xml | 88 +- .../dist/game/data/buylists/0000383.xml | 88 +- .../dist/game/data/buylists/0335103.xml | 2 +- .../dist/game/data/buylists/0335145.xml | 2 +- .../dist/game/data/buylists/0335187.xml | 2 +- .../dist/game/data/buylists/0335229.xml | 2 +- .../dist/game/data/buylists/0335230.xml | 2 +- .../dist/game/data/buylists/0335231.xml | 2 +- .../dist/game/data/buylists/0335277.xml | 2 +- .../dist/game/data/buylists/0335319.xml | 2 +- .../dist/game/data/buylists/0335366.xml | 2 +- .../dist/game/data/buylists/0335383.xml | 2 +- .../dist/game/data/buylists/0335390.xml | 2 +- .../dist/game/data/buylists/0335421.xml | 2 +- .../dist/game/data/buylists/0335512.xml | 2 +- .../dist/game/data/buylists/0335558.xml | 2 +- .../dist/game/data/buylists/0335580.xml | 2 +- .../dist/game/data/buylists/0335582.xml | 2 +- .../dist/game/data/buylists/0335584.xml | 2 +- .../dist/game/data/buylists/0335586.xml | 2 +- .../dist/game/data/buylists/0335605.xml | 2 +- .../dist/game/data/buylists/0335644.xml | 2 +- .../dist/game/data/buylists/0335645.xml | 2 +- .../dist/game/data/buylists/0336456.xml | 2 +- .../dist/game/data/buylists/0351001.xml | 2 +- .../dist/game/data/buylists/0351021.xml | 22 +- .../dist/game/data/buylists/0351022.xml | 22 +- .../dist/game/data/buylists/0351023.xml | 8 +- .../dist/game/data/buylists/0351024.xml | 22 +- .../dist/game/data/buylists/0351025.xml | 6 +- .../dist/game/data/buylists/0351026.xml | 42 +- .../dist/game/data/buylists/0351421.xml | 4 +- .../dist/game/data/buylists/0351441.xml | 22 +- .../dist/game/data/buylists/0351442.xml | 22 +- .../dist/game/data/buylists/0351443.xml | 8 +- .../dist/game/data/buylists/0351444.xml | 22 +- .../dist/game/data/buylists/0351445.xml | 6 +- .../dist/game/data/buylists/0351446.xml | 42 +- .../dist/game/data/buylists/0351841.xml | 4 +- .../dist/game/data/buylists/0351861.xml | 22 +- .../dist/game/data/buylists/0351862.xml | 22 +- .../dist/game/data/buylists/0351863.xml | 8 +- .../dist/game/data/buylists/0351864.xml | 22 +- .../dist/game/data/buylists/0351865.xml | 6 +- .../dist/game/data/buylists/0351866.xml | 42 +- .../dist/game/data/buylists/0352261.xml | 2 +- .../dist/game/data/buylists/0352281.xml | 22 +- .../dist/game/data/buylists/0352282.xml | 22 +- .../dist/game/data/buylists/0352283.xml | 8 +- .../dist/game/data/buylists/0352284.xml | 22 +- .../dist/game/data/buylists/0352285.xml | 6 +- .../dist/game/data/buylists/0352286.xml | 42 +- .../dist/game/data/buylists/0352741.xml | 2 +- .../dist/game/data/buylists/0352761.xml | 22 +- .../dist/game/data/buylists/0352762.xml | 22 +- .../dist/game/data/buylists/0352763.xml | 12 +- .../dist/game/data/buylists/0352764.xml | 22 +- .../dist/game/data/buylists/0352765.xml | 6 +- .../dist/game/data/buylists/0352766.xml | 42 +- .../dist/game/data/buylists/0353161.xml | 2 +- .../dist/game/data/buylists/0353181.xml | 22 +- .../dist/game/data/buylists/0353182.xml | 22 +- .../dist/game/data/buylists/0353183.xml | 8 +- .../dist/game/data/buylists/0353184.xml | 22 +- .../dist/game/data/buylists/0353185.xml | 6 +- .../dist/game/data/buylists/0353186.xml | 42 +- .../dist/game/data/buylists/0353631.xml | 2 +- .../dist/game/data/buylists/0353651.xml | 22 +- .../dist/game/data/buylists/0353652.xml | 22 +- .../dist/game/data/buylists/0353653.xml | 8 +- .../dist/game/data/buylists/0353654.xml | 22 +- .../dist/game/data/buylists/0353655.xml | 6 +- .../dist/game/data/buylists/0353656.xml | 42 +- .../dist/game/data/buylists/0355091.xml | 2 +- .../dist/game/data/buylists/0355111.xml | 22 +- .../dist/game/data/buylists/0355112.xml | 22 +- .../dist/game/data/buylists/0355113.xml | 12 +- .../dist/game/data/buylists/0355114.xml | 22 +- .../dist/game/data/buylists/0355115.xml | 6 +- .../dist/game/data/buylists/0355116.xml | 42 +- .../dist/game/data/buylists/0355551.xml | 2 +- .../dist/game/data/buylists/0355571.xml | 22 +- .../dist/game/data/buylists/0355572.xml | 22 +- .../dist/game/data/buylists/0355573.xml | 8 +- .../dist/game/data/buylists/0355574.xml | 22 +- .../dist/game/data/buylists/0355575.xml | 6 +- .../dist/game/data/buylists/0355576.xml | 42 +- .../dist/game/data/buylists/0366531.xml | 2 +- .../dist/game/data/buylists/0366541.xml | 4 +- .../dist/game/data/buylists/0366551.xml | 4 +- .../dist/game/data/buylists/0366561.xml | 2 +- .../dist/game/data/buylists/0366571.xml | 2 +- .../dist/game/data/buylists/0366581.xml | 2 +- .../dist/game/data/buylists/0366591.xml | 2 +- .../dist/game/data/buylists/0366601.xml | 2 +- .../dist/game/data/buylists/0366611.xml | 2 +- .../dist/game/data/buylists/1312801.xml | 2 +- .../dist/game/data/buylists/3000100.xml | 4 +- .../dist/game/data/buylists/3000101.xml | 2 +- .../dist/game/data/buylists/3000200.xml | 4 +- .../dist/game/data/buylists/3000201.xml | 4 +- .../dist/game/data/buylists/3000300.xml | 2 +- .../dist/game/data/buylists/3000301.xml | 2 +- .../dist/game/data/buylists/3000400.xml | 5 +- .../dist/game/data/buylists/3004700.xml | 2 +- .../dist/game/data/buylists/3006000.xml | 4 +- .../dist/game/data/buylists/3006001.xml | 4 +- .../dist/game/data/buylists/3006100.xml | 4 +- .../dist/game/data/buylists/3006101.xml | 4 +- .../dist/game/data/buylists/3006200.xml | 4 +- .../dist/game/data/buylists/3006201.xml | 2 +- .../dist/game/data/buylists/3006202.xml | 2 +- .../dist/game/data/buylists/3006300.xml | 15 +- .../dist/game/data/buylists/3006301.xml | 4 +- .../dist/game/data/buylists/3007800.xml | 135 +-- .../dist/game/data/buylists/3008100.xml | 14 +- .../dist/game/data/buylists/3008101.xml | 4 +- .../dist/game/data/buylists/3008200.xml | 2 +- .../dist/game/data/buylists/3008201.xml | 2 +- .../dist/game/data/buylists/3008400.xml | 4 +- .../dist/game/data/buylists/3008401.xml | 2 +- .../dist/game/data/buylists/3008500.xml | 4 +- .../dist/game/data/buylists/3008701.xml | 4 +- .../dist/game/data/buylists/3008800.xml | 2 +- .../dist/game/data/buylists/3009000.xml | 4 +- .../dist/game/data/buylists/3009001.xml | 2 +- .../dist/game/data/buylists/3009100.xml | 4 +- .../dist/game/data/buylists/3009101.xml | 2 +- .../dist/game/data/buylists/3009300.xml | 4 +- .../dist/game/data/buylists/3009400.xml | 2 +- .../dist/game/data/buylists/3009401.xml | 2 +- .../dist/game/data/buylists/3009402.xml | 2 +- .../dist/game/data/buylists/3013500.xml | 2 +- .../dist/game/data/buylists/3013501.xml | 2 +- .../dist/game/data/buylists/3013600.xml | 2 +- .../dist/game/data/buylists/3013601.xml | 2 +- .../dist/game/data/buylists/3013700.xml | 4 +- .../dist/game/data/buylists/3013800.xml | 2 +- .../dist/game/data/buylists/3013801.xml | 2 +- .../dist/game/data/buylists/3014700.xml | 2 +- .../dist/game/data/buylists/3014701.xml | 2 +- .../dist/game/data/buylists/3014800.xml | 2 +- .../dist/game/data/buylists/3014801.xml | 2 +- .../dist/game/data/buylists/3014900.xml | 4 +- .../dist/game/data/buylists/3014901.xml | 2 +- .../dist/game/data/buylists/3015000.xml | 2 +- .../dist/game/data/buylists/3016300.xml | 2 +- .../dist/game/data/buylists/3016400.xml | 2 +- .../dist/game/data/buylists/3016500.xml | 2 +- .../dist/game/data/buylists/3016501.xml | 2 +- .../dist/game/data/buylists/3016601.xml | 2 +- .../dist/game/data/buylists/3017800.xml | 4 +- .../dist/game/data/buylists/3017801.xml | 4 +- .../dist/game/data/buylists/3017900.xml | 4 +- .../dist/game/data/buylists/3017901.xml | 4 +- .../dist/game/data/buylists/3018000.xml | 15 +- .../dist/game/data/buylists/3018001.xml | 4 +- .../dist/game/data/buylists/3018100.xml | 2 +- .../dist/game/data/buylists/3020700.xml | 2 +- .../dist/game/data/buylists/3020701.xml | 2 +- .../dist/game/data/buylists/3020800.xml | 2 +- .../dist/game/data/buylists/3020801.xml | 2 +- .../dist/game/data/buylists/3020802.xml | 2 +- .../dist/game/data/buylists/3020803.xml | 2 +- .../dist/game/data/buylists/3020900.xml | 2 +- .../dist/game/data/buylists/3023000.xml | 4 +- .../dist/game/data/buylists/3023001.xml | 4 +- .../dist/game/data/buylists/3023100.xml | 4 +- .../dist/game/data/buylists/3025300.xml | 4 +- .../dist/game/data/buylists/3025301.xml | 4 +- .../dist/game/data/buylists/3025400.xml | 15 +- .../dist/game/data/buylists/3025401.xml | 4 +- .../dist/game/data/buylists/3029400.xml | 4 +- .../dist/game/data/buylists/3030100.xml | 14 +- .../dist/game/data/buylists/3030101.xml | 4 +- .../dist/game/data/buylists/3031300.xml | 2 +- .../dist/game/data/buylists/3031400.xml | 2 +- .../dist/game/data/buylists/3031401.xml | 2 +- .../dist/game/data/buylists/3031402.xml | 2 +- .../dist/game/data/buylists/3031500.xml | 15 +- .../dist/game/data/buylists/3032100.xml | 4 +- .../dist/game/data/buylists/3032101.xml | 4 +- .../dist/game/data/buylists/3038700.xml | 2 +- .../dist/game/data/buylists/3042000.xml | 2 +- .../dist/game/data/buylists/3043600.xml | 4 +- .../dist/game/data/buylists/3043700.xml | 4 +- .../dist/game/data/buylists/3051600.xml | 2 +- .../dist/game/data/buylists/3051601.xml | 2 +- .../dist/game/data/buylists/3051700.xml | 2 +- .../dist/game/data/buylists/3051701.xml | 2 +- .../dist/game/data/buylists/3051800.xml | 2 +- .../dist/game/data/buylists/3051900.xml | 2 +- .../dist/game/data/buylists/3051901.xml | 2 +- .../dist/game/data/buylists/3055800.xml | 2 +- .../dist/game/data/buylists/3055801.xml | 2 +- .../dist/game/data/buylists/3055900.xml | 2 +- .../dist/game/data/buylists/3055901.xml | 2 +- .../dist/game/data/buylists/3056000.xml | 2 +- .../dist/game/data/buylists/3056001.xml | 2 +- .../dist/game/data/buylists/3056100.xml | 2 +- .../dist/game/data/buylists/3068400.xml | 4 +- .../dist/game/data/buylists/3068401.xml | 4 +- .../dist/game/data/buylists/3073100.xml | 2 +- .../dist/game/data/buylists/3082700.xml | 4 +- .../dist/game/data/buylists/3082800.xml | 2 +- .../dist/game/data/buylists/3082900.xml | 2 +- .../dist/game/data/buylists/3083000.xml | 4 +- .../dist/game/data/buylists/3083100.xml | 2 +- .../dist/game/data/buylists/3083400.xml | 4 +- .../dist/game/data/buylists/3083401.xml | 4 +- .../dist/game/data/buylists/3083700.xml | 4 +- .../dist/game/data/buylists/3083701.xml | 4 +- .../dist/game/data/buylists/3083800.xml | 4 +- .../dist/game/data/buylists/3083801.xml | 2 +- .../dist/game/data/buylists/3083900.xml | 15 +- .../dist/game/data/buylists/3084000.xml | 2 +- .../dist/game/data/buylists/3084100.xml | 4 +- .../dist/game/data/buylists/3084101.xml | 4 +- .../dist/game/data/buylists/3084102.xml | 2 +- .../dist/game/data/buylists/3084200.xml | 4 +- .../dist/game/data/buylists/3086900.xml | 2 +- .../dist/game/data/buylists/3087900.xml | 2 +- .../dist/game/data/buylists/3089000.xml | 4 +- .../dist/game/data/buylists/3089001.xml | 4 +- .../dist/game/data/buylists/3089100.xml | 4 +- .../dist/game/data/buylists/3089101.xml | 4 +- .../dist/game/data/buylists/3089200.xml | 4 +- .../dist/game/data/buylists/3089300.xml | 14 +- .../dist/game/data/buylists/3089301.xml | 4 +- .../dist/game/data/buylists/3104500.xml | 135 +-- .../dist/game/data/buylists/3106700.xml | 4 +- .../dist/game/data/buylists/3125600.xml | 4 +- .../dist/game/data/buylists/3125601.xml | 4 +- .../dist/game/data/buylists/3125602.xml | 2 +- .../dist/game/data/buylists/3125603.xml | 2 +- .../dist/game/data/buylists/3125700.xml | 4 +- .../dist/game/data/buylists/3125701.xml | 4 +- .../dist/game/data/buylists/3125702.xml | 2 +- .../dist/game/data/buylists/3125703.xml | 2 +- .../dist/game/data/buylists/3125800.xml | 4 +- .../dist/game/data/buylists/3125801.xml | 4 +- .../dist/game/data/buylists/3125802.xml | 2 +- .../dist/game/data/buylists/3125803.xml | 2 +- .../dist/game/data/buylists/3125900.xml | 4 +- .../dist/game/data/buylists/3125901.xml | 4 +- .../dist/game/data/buylists/3125902.xml | 2 +- .../dist/game/data/buylists/3125903.xml | 2 +- .../dist/game/data/buylists/3126000.xml | 2 +- .../dist/game/data/buylists/3126001.xml | 2 +- .../dist/game/data/buylists/3126100.xml | 4 +- .../dist/game/data/buylists/3126101.xml | 2 +- .../dist/game/data/buylists/3126200.xml | 2 +- .../dist/game/data/buylists/3126300.xml | 4 +- .../dist/game/data/buylists/3126301.xml | 15 +- .../dist/game/data/buylists/3126500.xml | 2 +- .../dist/game/data/buylists/3127400.xml | 4 +- .../dist/game/data/buylists/3130000.xml | 4 +- .../dist/game/data/buylists/3130001.xml | 4 +- .../dist/game/data/buylists/3130100.xml | 4 +- .../dist/game/data/buylists/3130101.xml | 4 +- .../dist/game/data/buylists/3130200.xml | 4 +- .../dist/game/data/buylists/3130201.xml | 4 +- .../dist/game/data/buylists/3130300.xml | 4 +- .../dist/game/data/buylists/3130301.xml | 4 +- .../dist/game/data/buylists/3130400.xml | 4 +- .../dist/game/data/buylists/3130500.xml | 4 +- .../dist/game/data/buylists/3130600.xml | 2 +- .../dist/game/data/buylists/3130700.xml | 4 +- .../dist/game/data/buylists/3130701.xml | 15 +- .../dist/game/data/buylists/3130900.xml | 4 +- .../dist/game/data/buylists/3131800.xml | 2 +- .../dist/game/data/buylists/3131900.xml | 4 +- .../dist/game/data/buylists/3135100.xml | 2 +- .../dist/game/data/buylists/3136600.xml | 2 +- .../dist/game/data/buylists/3138600.xml | 4 +- .../dist/game/data/buylists/3141300.xml | 2 +- .../dist/game/data/buylists/3141400.xml | 2 +- .../dist/game/data/buylists/3141500.xml | 2 +- .../dist/game/data/buylists/3141600.xml | 2 +- .../dist/game/data/buylists/3141700.xml | 2 +- .../dist/game/data/buylists/3141800.xml | 2 +- .../dist/game/data/buylists/3141900.xml | 2 +- .../dist/game/data/buylists/3142000.xml | 2 +- .../dist/game/data/buylists/3142100.xml | 2 +- .../dist/game/data/buylists/3142200.xml | 2 +- .../dist/game/data/buylists/3142300.xml | 2 +- .../dist/game/data/buylists/3142400.xml | 2 +- .../dist/game/data/buylists/3142500.xml | 2 +- .../dist/game/data/buylists/3142600.xml | 2 +- .../dist/game/data/buylists/3142700.xml | 2 +- .../dist/game/data/buylists/3142800.xml | 2 +- .../dist/game/data/buylists/3142900.xml | 2 +- .../dist/game/data/buylists/3143000.xml | 2 +- .../dist/game/data/buylists/3143100.xml | 2 +- .../dist/game/data/buylists/3143200.xml | 2 +- .../dist/game/data/buylists/3143300.xml | 2 +- .../dist/game/data/buylists/3143400.xml | 2 +- .../dist/game/data/buylists/3143500.xml | 2 +- .../dist/game/data/buylists/3143600.xml | 2 +- .../dist/game/data/buylists/3143700.xml | 2 +- .../dist/game/data/buylists/3143800.xml | 2 +- .../dist/game/data/buylists/3143900.xml | 2 +- .../dist/game/data/buylists/3144000.xml | 4 +- .../dist/game/data/buylists/3144100.xml | 2 +- .../dist/game/data/buylists/3144200.xml | 26 +- .../dist/game/data/buylists/3144300.xml | 4 +- .../dist/game/data/buylists/3144400.xml | 4 +- .../dist/game/data/buylists/3144500.xml | 4 +- .../dist/game/data/buylists/3156300.xml | 2 +- .../dist/game/data/buylists/3156700.xml | 2 +- .../dist/game/data/buylists/3156800.xml | 2 +- .../dist/game/data/buylists/3157000.xml | 2 +- .../dist/game/data/buylists/3157100.xml | 2 +- .../dist/game/data/buylists/3157200.xml | 2 +- .../dist/game/data/buylists/3157300.xml | 2 +- .../dist/game/data/buylists/3157400.xml | 2 +- .../dist/game/data/buylists/3157500.xml | 2 +- .../dist/game/data/buylists/3157600.xml | 2 +- .../dist/game/data/buylists/3157700.xml | 2 +- .../dist/game/data/buylists/3157800.xml | 2 +- .../dist/game/data/buylists/3157900.xml | 2 +- .../dist/game/data/buylists/3166600.xml | 2 +- .../dist/game/data/buylists/3166700.xml | 2 +- .../dist/game/data/buylists/3166800.xml | 2 +- .../dist/game/data/buylists/3166900.xml | 4 +- .../dist/game/data/buylists/3167000.xml | 2 +- .../dist/game/data/buylists/3169600.xml | 2 +- .../dist/game/data/buylists/3169700.xml | 2 +- .../dist/game/data/buylists/3175601.xml | 338 ++++---- .../dist/game/data/buylists/3175602.xml | 78 +- .../dist/game/data/buylists/3175603.xml | 230 ++--- .../dist/game/data/buylists/3175604.xml | 312 +++---- .../dist/game/data/buylists/3175605.xml | 278 +++--- .../dist/game/data/buylists/3175606.xml | 300 +++---- .../dist/game/data/buylists/3175607.xml | 314 +++---- .../dist/game/data/buylists/3175608.xml | 228 ++--- .../dist/game/data/buylists/3194500.xml | 4 +- .../dist/game/data/buylists/3194501.xml | 4 +- .../dist/game/data/buylists/3194600.xml | 4 +- .../dist/game/data/buylists/3194601.xml | 4 +- .../dist/game/data/buylists/3194700.xml | 4 +- .../dist/game/data/buylists/3194701.xml | 4 +- .../dist/game/data/buylists/3194800.xml | 4 +- .../dist/game/data/buylists/3194801.xml | 4 +- .../dist/game/data/buylists/3194900.xml | 4 +- .../dist/game/data/buylists/3195000.xml | 4 +- .../dist/game/data/buylists/3195100.xml | 2 +- .../dist/game/data/buylists/3195200.xml | 4 +- .../dist/game/data/buylists/3195201.xml | 15 +- .../dist/game/data/buylists/3195400.xml | 2 +- .../dist/game/data/buylists/3196200.xml | 2 +- .../dist/game/data/buylists/3196300.xml | 4 +- .../dist/game/data/buylists/3197300.xml | 2 +- .../dist/game/data/buylists/3198000.xml | 2 +- .../dist/game/data/buylists/3198900.xml | 2 +- .../dist/game/data/buylists/3200700.xml | 21 +- .../dist/game/data/buylists/3210500.xml | 2 +- .../dist/game/data/buylists/3210600.xml | 2 +- .../dist/game/data/buylists/3216400.xml | 2 +- .../dist/game/data/buylists/3216401.xml | 2 +- .../dist/game/data/buylists/3216500.xml | 2 +- .../dist/game/data/buylists/3216501.xml | 2 +- .../dist/game/data/buylists/3216600.xml | 4 +- .../dist/game/data/buylists/3216700.xml | 2 +- .../dist/game/data/buylists/3216900.xml | 2 +- .../dist/game/data/buylists/3229800.xml | 3 +- .../dist/game/data/buylists/3287400.xml | 2 +- .../dist/game/data/buylists/3287500.xml | 2 +- .../dist/game/data/buylists/3287600.xml | 4 +- .../dist/game/data/buylists/3287700.xml | 2 +- .../dist/game/data/buylists/3287800.xml | 4 +- .../dist/game/data/buylists/3287900.xml | 2 +- .../dist/game/data/buylists/3288000.xml | 4 +- .../dist/game/data/buylists/3288100.xml | 4 +- .../dist/game/data/buylists/3288200.xml | 4 +- .../dist/game/data/buylists/3288300.xml | 4 +- .../dist/game/data/buylists/3288700.xml | 2 +- .../dist/game/data/buylists/3289700.xml | 15 +- .../dist/game/data/buylists/3357900.xml | 2 +- .../dist/game/data/buylists/3393400.xml | 2 +- .../dist/game/data/buylists/3393401.xml | 2 +- .../dist/game/data/buylists/3393500.xml | 2 +- .../dist/game/data/buylists/3393501.xml | 2 +- .../dist/game/data/buylists/3393600.xml | 2 +- .../dist/game/data/buylists/3393700.xml | 2 +- .../dist/game/data/buylists/3538400.xml | 4 +- .../dist/game/data/buylists/3538401.xml | 4 +- .../dist/game/data/buylists/3538402.xml | 4 +- .../dist/game/data/buylists/3538600.xml | 4 +- .../dist/game/data/buylists/3538601.xml | 4 +- .../dist/game/data/buylists/3538602.xml | 4 +- .../dist/game/data/buylists/3538800.xml | 4 +- .../dist/game/data/buylists/3538801.xml | 4 +- .../dist/game/data/buylists/3538802.xml | 4 +- .../dist/game/data/buylists/3539200.xml | 4 +- .../dist/game/data/buylists/3539201.xml | 4 +- .../dist/game/data/buylists/3539202.xml | 4 +- .../dist/game/data/buylists/3539400.xml | 4 +- .../dist/game/data/buylists/3539401.xml | 4 +- .../dist/game/data/buylists/3539402.xml | 4 +- .../dist/game/data/buylists/3539600.xml | 4 +- .../dist/game/data/buylists/3539601.xml | 4 +- .../dist/game/data/buylists/3539602.xml | 4 +- .../dist/game/data/buylists/3539800.xml | 4 +- .../dist/game/data/buylists/3539801.xml | 4 +- .../dist/game/data/buylists/3539802.xml | 4 +- .../dist/game/data/buylists/3540000.xml | 4 +- .../dist/game/data/buylists/3540001.xml | 4 +- .../dist/game/data/buylists/3540002.xml | 4 +- .../dist/game/data/buylists/3540300.xml | 4 +- .../dist/game/data/buylists/3540301.xml | 4 +- .../dist/game/data/buylists/3540302.xml | 4 +- .../dist/game/data/buylists/3540500.xml | 4 +- .../dist/game/data/buylists/3540501.xml | 4 +- .../dist/game/data/buylists/3540502.xml | 4 +- .../dist/game/data/buylists/3540700.xml | 4 +- .../dist/game/data/buylists/3540701.xml | 4 +- .../dist/game/data/buylists/3540702.xml | 4 +- .../dist/game/data/buylists/3543900.xml | 4 +- .../dist/game/data/buylists/3543901.xml | 4 +- .../dist/game/data/buylists/3543902.xml | 4 +- .../dist/game/data/buylists/3544100.xml | 4 +- .../dist/game/data/buylists/3544101.xml | 4 +- .../dist/game/data/buylists/3544102.xml | 4 +- .../dist/game/data/buylists/3544300.xml | 4 +- .../dist/game/data/buylists/3544301.xml | 4 +- .../dist/game/data/buylists/3544302.xml | 4 +- .../dist/game/data/buylists/3544500.xml | 4 +- .../dist/game/data/buylists/3544501.xml | 4 +- .../dist/game/data/buylists/3544502.xml | 4 +- .../dist/game/data/buylists/3544700.xml | 4 +- .../dist/game/data/buylists/3544701.xml | 4 +- .../dist/game/data/buylists/3544702.xml | 4 +- .../dist/game/data/buylists/3544900.xml | 4 +- .../dist/game/data/buylists/3544901.xml | 4 +- .../dist/game/data/buylists/3544902.xml | 4 +- .../dist/game/data/buylists/3545100.xml | 4 +- .../dist/game/data/buylists/3545101.xml | 4 +- .../dist/game/data/buylists/3545102.xml | 4 +- .../dist/game/data/buylists/3545300.xml | 4 +- .../dist/game/data/buylists/3545301.xml | 4 +- .../dist/game/data/buylists/3545302.xml | 4 +- .../dist/game/data/buylists/3545500.xml | 4 +- .../dist/game/data/buylists/3545501.xml | 4 +- .../dist/game/data/buylists/3545502.xml | 4 +- .../dist/game/data/buylists/3545700.xml | 4 +- .../dist/game/data/buylists/3545701.xml | 4 +- .../dist/game/data/buylists/3545702.xml | 4 +- .../dist/game/data/buylists/3545900.xml | 4 +- .../dist/game/data/buylists/3545901.xml | 4 +- .../dist/game/data/buylists/3545902.xml | 4 +- .../dist/game/data/buylists/3546100.xml | 4 +- .../dist/game/data/buylists/3546101.xml | 4 +- .../dist/game/data/buylists/3546102.xml | 4 +- .../dist/game/data/buylists/3546300.xml | 4 +- .../dist/game/data/buylists/3546301.xml | 4 +- .../dist/game/data/buylists/3546302.xml | 4 +- .../dist/game/data/buylists/3546500.xml | 4 +- .../dist/game/data/buylists/3546501.xml | 4 +- .../dist/game/data/buylists/3546502.xml | 4 +- .../dist/game/data/buylists/3546700.xml | 4 +- .../dist/game/data/buylists/3546701.xml | 4 +- .../dist/game/data/buylists/3546702.xml | 4 +- .../dist/game/data/buylists/3556600.xml | 4 +- .../dist/game/data/buylists/3556601.xml | 4 +- .../dist/game/data/buylists/3556602.xml | 4 +- .../dist/game/data/buylists/3556800.xml | 4 +- .../dist/game/data/buylists/3556801.xml | 4 +- .../dist/game/data/buylists/3556802.xml | 4 +- .../dist/game/data/buylists/3557000.xml | 4 +- .../dist/game/data/buylists/3557001.xml | 4 +- .../dist/game/data/buylists/3557002.xml | 4 +- .../dist/game/data/buylists/3557200.xml | 4 +- .../dist/game/data/buylists/3557201.xml | 4 +- .../dist/game/data/buylists/3557202.xml | 4 +- .../dist/game/data/buylists/3557400.xml | 4 +- .../dist/game/data/buylists/3557401.xml | 4 +- .../dist/game/data/buylists/3557402.xml | 4 +- .../dist/game/data/buylists/3557600.xml | 4 +- .../dist/game/data/buylists/3557601.xml | 4 +- .../dist/game/data/buylists/3557602.xml | 4 +- .../dist/game/data/buylists/3557800.xml | 4 +- .../dist/game/data/buylists/3557801.xml | 4 +- .../dist/game/data/buylists/3557802.xml | 4 +- .../dist/game/data/buylists/3672100.xml | 2 +- .../dist/game/data/buylists/3672101.xml | 2 +- .../dist/game/data/buylists/3672102.xml | 2 +- .../dist/game/data/buylists/3672300.xml | 2 +- .../dist/game/data/buylists/3672301.xml | 2 +- .../dist/game/data/buylists/3672302.xml | 2 +- .../dist/game/data/buylists/3672500.xml | 2 +- .../dist/game/data/buylists/3672501.xml | 2 +- .../dist/game/data/buylists/3672502.xml | 2 +- .../dist/game/data/buylists/3672700.xml | 2 +- .../dist/game/data/buylists/3672701.xml | 2 +- .../dist/game/data/buylists/3672702.xml | 2 +- .../dist/game/data/buylists/3672900.xml | 2 +- .../dist/game/data/buylists/3672901.xml | 2 +- .../dist/game/data/buylists/3672902.xml | 2 +- .../dist/game/data/buylists/3673100.xml | 2 +- .../dist/game/data/buylists/3673101.xml | 2 +- .../dist/game/data/buylists/3673102.xml | 2 +- .../dist/game/data/buylists/3673300.xml | 2 +- .../dist/game/data/buylists/3673301.xml | 2 +- .../dist/game/data/buylists/3673302.xml | 2 +- .../dist/game/data/buylists/3673500.xml | 2 +- .../dist/game/data/buylists/3673501.xml | 2 +- .../dist/game/data/buylists/3673502.xml | 2 +- .../dist/game/data/buylists/3673700.xml | 2 +- .../dist/game/data/buylists/3673701.xml | 2 +- .../dist/game/data/buylists/3673702.xml | 2 +- .../dist/game/data/buylists/3673900.xml | 2 +- .../dist/game/data/buylists/3673901.xml | 2 +- .../dist/game/data/buylists/3673902.xml | 2 +- .../dist/game/data/html/admin/zone.htm | 2 +- .../dist/game/data/multisell/1004.xml | 338 -------- .../dist/game/data/multisell/719.xml | 60 +- .../game/data/multisell/custom/600010.xml | 30 +- .../DelusionTeleport/DelusionTeleport.java | 26 +- .../admincommandhandlers/AdminElement.java | 2 +- .../admincommandhandlers/AdminShop.java | 38 +- .../admincommandhandlers/AdminZone.java | 2 +- .../scripts/handlers/bypasshandlers/Wear.java | 4 +- .../handlers/communityboard/HomeBoard.java | 2 +- .../handlers/communityboard/RegionBoard.java | 3 +- .../handlers/effecthandlers/ConvertItem.java | 2 +- .../scripts/handlers/itemhandlers/Seed.java | 6 +- .../game/data/stats/items/15400-15499.xml | 1 + .../dist/game/data/xsd/buylist.xsd | 2 + .../dist/game/data/xsd/multisell.xsd | 4 +- .../dist/game/data/zones/custom_town.xml | 639 -------------- .../dist/game/data/zones/tax.xml | 5 +- .../java/com/l2jmobius/Config.java | 2 - .../gameserver/data/xml/impl/BuyListData.java | 82 +- .../data/xml/impl/MultisellData.java | 411 +++------ .../gameserver/data/xml/impl/OptionData.java | 4 +- .../datatables/AugmentationData.java | 32 +- .../instancemanager/MapRegionManager.java | 20 +- .../instancemanager/TownManager.java | 121 --- .../gameserver/model/Augmentation.java | 202 +++-- .../model/CharSelectInfoPackage.java | 10 +- .../l2jmobius/gameserver/model/ItemInfo.java | 72 +- .../gameserver/model/L2MapRegion.java | 9 +- .../l2jmobius/gameserver/model/StatsSet.java | 14 + .../l2jmobius/gameserver/model/TradeItem.java | 8 +- .../l2jmobius/gameserver/model/TradeList.java | 29 +- .../gameserver/model/actor/L2Npc.java | 74 +- .../actor/instance/L2MerchantInstance.java | 30 +- .../model/actor/instance/L2PcInstance.java | 10 +- .../gameserver/model/buylist/Product.java | 29 +- .../{L2BuyList.java => ProductList.java} | 12 +- .../gameserver/model/ensoul/EnsoulOption.java | 6 + .../gameserver/model/entity/Castle.java | 16 +- .../model/events/AbstractScript.java | 2 +- .../character/player/OnPlayerAugment.java | 8 +- .../model/holders/ItemChanceHolder.java | 32 + .../model/holders/MultisellEntryHolder.java | 56 ++ .../model/holders/MultisellListHolder.java | 112 +++ .../holders/PreparedMultisellListHolder.java | 107 +++ .../model/itemauction/AuctionItem.java | 9 +- .../model/itemcontainer/Inventory.java | 5 +- .../model/itemcontainer/PcInventory.java | 44 - .../model/items/L2WarehouseItem.java | 26 +- .../model/items/instance/L2ItemInstance.java | 82 +- .../gameserver/model/multisell/Entry.java | 91 -- .../model/multisell/Ingredient.java | 151 ---- .../gameserver/model/multisell/ItemInfo.java | 104 --- .../model/multisell/ListContainer.java | 123 --- .../model/multisell/PreparedEntry.java | 107 --- .../multisell/PreparedListContainer.java | 104 --- .../gameserver/model/options/Options.java | 102 ++- .../model/variables/PlayerVariables.java | 1 + .../gameserver/model/zone/ZoneId.java | 4 +- .../gameserver/model/zone/type/L2TaxZone.java | 59 +- .../clientpackets/MultiSellChoose.java | 795 ++++++++++-------- .../network/clientpackets/RequestBuyItem.java | 17 +- .../RequestExEnchantItemAttribute.java | 3 +- .../clientpackets/RequestPreviewItem.java | 4 +- .../network/clientpackets/RequestRefine.java | 10 +- .../clientpackets/RequestRefundItem.java | 22 +- .../clientpackets/RequestSellItem.java | 30 +- .../RequestChangeAttributeItem.java | 2 +- .../serverpackets/AbstractItemPacket.java | 94 ++- .../network/serverpackets/BuyList.java | 27 +- .../network/serverpackets/CharInfo.java | 5 +- .../serverpackets/CharSelectionInfo.java | 9 +- .../network/serverpackets/ExBuySellList.java | 24 +- .../ExPutItemResultForVariationCancel.java | 8 +- .../serverpackets/ExUserInfoEquipSlot.java | 5 +- .../network/serverpackets/FakePlayerInfo.java | 3 +- .../serverpackets/GMViewCharacterInfo.java | 5 +- .../serverpackets/GMViewSkillInfo.java | 2 +- .../network/serverpackets/MultiSellList.java | 205 ++--- .../network/serverpackets/SellList.java | 111 --- .../serverpackets/ShopPreviewList.java | 4 +- .../ExResponseCommissionBuyItem.java | 2 +- .../dist/game/config/Character.ini | 4 - .../dist/game/data/html/admin/zone.htm | 2 +- .../dist/game/data/multisell/1108.xml | 258 ------ .../game/data/multisell/custom/600010.xml | 6 +- .../admincommandhandlers/AdminElement.java | 2 +- .../admincommandhandlers/AdminShop.java | 38 +- .../admincommandhandlers/AdminZone.java | 2 +- .../scripts/handlers/bypasshandlers/Wear.java | 4 +- .../handlers/communityboard/HomeBoard.java | 2 +- .../handlers/communityboard/RegionBoard.java | 3 +- .../handlers/effecthandlers/ConvertItem.java | 2 +- .../scripts/handlers/itemhandlers/Seed.java | 6 +- .../dist/game/data/xsd/buylist.xsd | 2 + .../dist/game/data/xsd/multisell.xsd | 4 +- .../dist/game/data/zones/custom_town.xml | 639 -------------- .../dist/game/data/zones/tax.xml | 5 +- .../java/com/l2jmobius/Config.java | 2 - .../gameserver/data/xml/impl/BuyListData.java | 82 +- .../data/xml/impl/MultisellData.java | 411 +++------ .../gameserver/data/xml/impl/OptionData.java | 4 +- .../datatables/AugmentationData.java | 34 +- .../instancemanager/MapRegionManager.java | 20 +- .../instancemanager/TownManager.java | 121 --- .../gameserver/model/Augmentation.java | 95 +++ .../model/CharSelectInfoPackage.java | 10 +- .../l2jmobius/gameserver/model/ItemInfo.java | 72 +- .../gameserver/model/L2MapRegion.java | 9 +- .../l2jmobius/gameserver/model/StatsSet.java | 14 + .../l2jmobius/gameserver/model/TradeItem.java | 8 +- .../l2jmobius/gameserver/model/TradeList.java | 29 +- .../gameserver/model/actor/L2Npc.java | 74 +- .../actor/instance/L2MerchantInstance.java | 30 +- .../model/actor/instance/L2PcInstance.java | 17 +- .../gameserver/model/buylist/L2BuyList.java | 77 -- .../gameserver/model/buylist/Product.java | 29 +- .../gameserver/model/buylist/ProductList.java | 77 ++ .../gameserver/model/ensoul/EnsoulOption.java | 6 + .../gameserver/model/entity/Castle.java | 16 +- .../model/events/AbstractScript.java | 2 +- .../character/player/OnPlayerAugment.java | 8 +- .../model/holders/ItemChanceHolder.java | 32 + .../model/holders/MultisellEntryHolder.java | 56 ++ .../model/holders/MultisellListHolder.java | 112 +++ .../holders/PreparedMultisellListHolder.java | 107 +++ .../model/itemauction/AuctionItem.java | 9 +- .../model/itemcontainer/Inventory.java | 5 +- .../model/itemcontainer/PcInventory.java | 44 - .../model/items/L2WarehouseItem.java | 26 +- .../model/items/instance/L2ItemInstance.java | 82 +- .../gameserver/model/multisell/Entry.java | 91 -- .../model/multisell/Ingredient.java | 151 ---- .../gameserver/model/multisell/ItemInfo.java | 104 --- .../model/multisell/ListContainer.java | 123 --- .../model/multisell/PreparedEntry.java | 107 --- .../multisell/PreparedListContainer.java | 104 --- .../gameserver/model/options/Options.java | 102 ++- .../model/variables/PlayerVariables.java | 1 + .../gameserver/model/zone/ZoneId.java | 4 +- .../gameserver/model/zone/type/L2TaxZone.java | 86 ++ .../model/zone/type/L2TownZone.java | 85 -- .../clientpackets/MultiSellChoose.java | 795 ++++++++++-------- .../network/clientpackets/RequestBuyItem.java | 17 +- .../RequestExEnchantItemAttribute.java | 3 +- .../clientpackets/RequestPreviewItem.java | 4 +- .../network/clientpackets/RequestRefine.java | 10 +- .../clientpackets/RequestRefundItem.java | 22 +- .../clientpackets/RequestSellItem.java | 30 +- .../RequestChangeAttributeItem.java | 2 +- .../serverpackets/AbstractItemPacket.java | 94 ++- .../network/serverpackets/BuyList.java | 27 +- .../network/serverpackets/CharInfo.java | 5 +- .../serverpackets/CharSelectionInfo.java | 9 +- .../network/serverpackets/ExBuySellList.java | 24 +- .../ExPutItemResultForVariationCancel.java | 8 +- .../serverpackets/ExUserInfoEquipSlot.java | 5 +- .../network/serverpackets/FakePlayerInfo.java | 3 +- .../serverpackets/GMViewCharacterInfo.java | 5 +- .../serverpackets/GMViewSkillInfo.java | 2 +- .../network/serverpackets/MultiSellList.java | 205 ++--- .../network/serverpackets/SellList.java | 111 --- .../serverpackets/ShopPreviewList.java | 4 +- .../ExResponseCommissionBuyItem.java | 2 +- 2474 files changed, 19097 insertions(+), 27190 deletions(-) delete mode 100644 L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/1004.xml delete mode 100644 L2J_Mobius_1.0_Ertheia/dist/game/data/zones/custom_town.xml delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/TownManager.java rename L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2Augmentation.java => L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/Augmentation.java (68%) delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2Augmentation.java rename L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/{L2BuyList.java => ProductList.java} (88%) create mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java create mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java create mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/Entry.java delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java rename L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java => L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java (54%) delete mode 100644 L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java delete mode 100644 L2J_Mobius_2.5_Underground/dist/game/data/multisell/1004.xml delete mode 100644 L2J_Mobius_2.5_Underground/dist/game/data/zones/custom_town.xml delete mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/TownManager.java rename L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2Augmentation.java => L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/Augmentation.java (68%) rename L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java => L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/ProductList.java (88%) create mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java create mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java create mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java delete mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/Entry.java delete mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java delete mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java delete mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java delete mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java delete mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java rename L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java => L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java (54%) delete mode 100644 L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java delete mode 100644 L2J_Mobius_3.0_Helios/dist/game/data/multisell/1004.xml delete mode 100644 L2J_Mobius_3.0_Helios/dist/game/data/zones/custom_town.xml delete mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/TownManager.java rename L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2Augmentation.java => L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/Augmentation.java (68%) rename L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java => L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/ProductList.java (88%) create mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java create mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java create mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java delete mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/Entry.java delete mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java delete mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java delete mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java delete mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java delete mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java rename L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java => L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java (54%) delete mode 100644 L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java delete mode 100644 L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/1004.xml delete mode 100644 L2J_Mobius_4.0_GrandCrusade/dist/game/data/zones/custom_town.xml delete mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/TownManager.java rename L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2Augmentation.java => L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/Augmentation.java (68%) rename L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/{L2BuyList.java => ProductList.java} (88%) create mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java create mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java create mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java delete mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/Entry.java delete mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java delete mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java delete mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java delete mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java delete mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java rename L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java => L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java (56%) delete mode 100644 L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/dist/game/data/multisell/1108.xml delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/dist/game/data/zones/custom_town.xml delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/TownManager.java create mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/Augmentation.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java create mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/ProductList.java create mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java create mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java create mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/Entry.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java create mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java delete mode 100644 L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/config/Character.ini b/L2J_Mobius_1.0_Ertheia/dist/game/config/Character.ini index 5146157c60..e0600fe8ba 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/config/Character.ini +++ b/L2J_Mobius_1.0_Ertheia/dist/game/config/Character.ini @@ -553,10 +553,6 @@ AltGameCreationSpRate = 1 # Default: 2 AltGameCreationRareXpSpRate = 2 -# If set to False, blacksmiths don't take recipes from players inventory when crafting. -# Default: True -AltBlacksmithUseRecipes = True - # Store/Restore Dwarven Manufacture list # Keep manufacture shoplist after relog # Default: False diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0000382.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0000382.xml index d05356a23d..6070582cb9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0000382.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0000382.xml @@ -1,53 +1,53 @@ - + 31380 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0000383.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0000383.xml index 36e3fdba19..f9a1b4452e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0000383.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0000383.xml @@ -1,53 +1,53 @@ - + 31373 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335103.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335103.xml index c69a0adc37..5fba711e83 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335103.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335103.xml @@ -3,5 +3,5 @@ 35103 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335145.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335145.xml index ec17e22fb8..ae0307b2da 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335145.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335145.xml @@ -3,5 +3,5 @@ 35145 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335187.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335187.xml index ef525be37d..d080daa732 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335187.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335187.xml @@ -3,5 +3,5 @@ 35187 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335229.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335229.xml index acc22eeee1..ad8c2e1cc6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335229.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335229.xml @@ -3,5 +3,5 @@ 35229 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335230.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335230.xml index b90c9a4c22..a8adffc4b2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335230.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335230.xml @@ -3,5 +3,5 @@ 35230 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335231.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335231.xml index 1f7e23bf67..428fcd426c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335231.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335231.xml @@ -3,5 +3,5 @@ 35231 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335277.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335277.xml index 4e6c636983..ff25d9c7c0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335277.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335277.xml @@ -3,5 +3,5 @@ 35277 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335319.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335319.xml index f38fb0bf71..c20daba2b7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335319.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335319.xml @@ -3,5 +3,5 @@ 35319 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335366.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335366.xml index a3485c3efc..eb803c4097 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335366.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335366.xml @@ -3,5 +3,5 @@ 35366 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335383.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335383.xml index 5d8f360dee..9c74254a37 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335383.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335383.xml @@ -1,5 +1,5 @@ - + 35383 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335390.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335390.xml index b219307c04..7b23db5b63 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335390.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335390.xml @@ -1,5 +1,5 @@ - + 35390 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335421.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335421.xml index a7ae058c57..8e80c9d384 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335421.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335421.xml @@ -1,5 +1,5 @@ - + 35421 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335512.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335512.xml index 4b7f195288..618b8e9e97 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335512.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335512.xml @@ -3,5 +3,5 @@ 35512 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335558.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335558.xml index 61e5a9f0b3..5486e14ac4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335558.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335558.xml @@ -3,5 +3,5 @@ 35558 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335580.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335580.xml index 6ba9991715..427c6c2ace 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335580.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335580.xml @@ -1,5 +1,5 @@ - + 35580 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335582.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335582.xml index dcdaea99a4..2849a9823c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335582.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335582.xml @@ -1,5 +1,5 @@ - + 35582 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335584.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335584.xml index bc8e2fec98..6219e4c46c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335584.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335584.xml @@ -1,5 +1,5 @@ - + 35584 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335586.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335586.xml index 30e7bcc9cb..7aac1cf84d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335586.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335586.xml @@ -1,5 +1,5 @@ - + 35586 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335605.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335605.xml index 2a82ec8d75..16eccc7ddd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335605.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335605.xml @@ -1,5 +1,5 @@ - + 35605 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335644.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335644.xml index 97e9fc41dc..b6a51814be 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335644.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335644.xml @@ -3,5 +3,5 @@ 35644 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335645.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335645.xml index 205bbb24e0..eacf338808 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335645.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0335645.xml @@ -3,5 +3,5 @@ 35645 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0336456.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0336456.xml index 43e790cad0..7f926f898a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0336456.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0336456.xml @@ -3,5 +3,5 @@ 36456 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351001.xml index 2f7769194a..e88995d140 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351001.xml @@ -1,5 +1,5 @@ - + 35100 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351021.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351021.xml index f7adf3875a..6cc4206a6d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351021.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351021.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351022.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351022.xml index a5cb088853..85c2d9d62e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351022.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351022.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351023.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351023.xml index 7eead4f7dc..df952cfde0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351023.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351023.xml @@ -1,9 +1,9 @@ - + 35102 - - - + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351024.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351024.xml index bef9a9f1ff..7e19e6ae42 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351024.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351024.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351025.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351025.xml index 69c6f6af6d..32900e60e8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351025.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351025.xml @@ -1,8 +1,8 @@ - + 35102 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351026.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351026.xml index 58a26d4236..3f34104bef 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351026.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351026.xml @@ -1,26 +1,26 @@ - + 35102 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351421.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351421.xml index 3a640491b4..f4e85a2f4c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351421.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351421.xml @@ -1,5 +1,5 @@ - + 35142 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351441.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351441.xml index f32e38c86a..a21b2554f4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351441.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351441.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351442.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351442.xml index 0a671d4945..906455eb28 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351442.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351442.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351443.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351443.xml index ab83cdb179..c7211c5446 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351443.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351443.xml @@ -1,9 +1,9 @@ - + 35144 - - - + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351444.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351444.xml index 92b6372d8c..030931665f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351444.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351444.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351445.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351445.xml index 0958d4a81a..a48e7237f6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351445.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351445.xml @@ -1,8 +1,8 @@ - + 35144 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351446.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351446.xml index 8af7ec3f21..f5c6d54df3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351446.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351446.xml @@ -1,26 +1,26 @@ - + 35144 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351841.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351841.xml index 38b74dda2d..252563d558 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351841.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351841.xml @@ -1,5 +1,5 @@ - + 35184 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351861.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351861.xml index 36f1a4cfa6..93de34adc3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351861.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351861.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351862.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351862.xml index 0ac8eecd93..ace30c766a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351862.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351862.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351863.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351863.xml index 80dc328719..a5ee6ff042 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351863.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351863.xml @@ -1,9 +1,9 @@ - + 35186 - - - + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351864.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351864.xml index 06682728b6..64b579db8f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351864.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351864.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351865.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351865.xml index 83bf9e6402..9331ba7193 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351865.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351865.xml @@ -1,8 +1,8 @@ - + 35186 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351866.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351866.xml index 55fce9970e..4273c35718 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351866.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0351866.xml @@ -1,26 +1,26 @@ - + 35186 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352261.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352261.xml index f66eaa1615..0db97eea93 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352261.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352261.xml @@ -1,5 +1,5 @@ - + 35226 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352281.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352281.xml index 2b222fa598..c8da11c37b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352281.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352281.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352282.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352282.xml index 8bad8b7f88..e45b1db923 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352282.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352282.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352283.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352283.xml index 87cd9481f6..5fa6a8b8bc 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352283.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352283.xml @@ -1,9 +1,9 @@ - + 35228 - - - + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352284.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352284.xml index 62b8f1d41c..ec2af80da6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352284.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352284.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352285.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352285.xml index d389f8f520..e576154fc1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352285.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352285.xml @@ -1,8 +1,8 @@ - + 35228 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352286.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352286.xml index e85594e6d9..371594c8c0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352286.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352286.xml @@ -1,26 +1,26 @@ - + 35228 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352741.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352741.xml index 4550c3ce3c..9023bccee1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352741.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352741.xml @@ -1,5 +1,5 @@ - + 35274 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352761.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352761.xml index 3ebd07be31..a188befa2b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352761.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352761.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352762.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352762.xml index aced7ec0e5..7d81046cbc 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352762.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352762.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352763.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352763.xml index 035facf7b8..d5b5478d7a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352763.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352763.xml @@ -1,11 +1,11 @@ - + 35276 - - - - - + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352764.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352764.xml index 7dbe8182fa..0f6c2e61e5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352764.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352764.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352765.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352765.xml index 6a73e43392..2fc44382da 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352765.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352765.xml @@ -1,8 +1,8 @@ - + 35276 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352766.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352766.xml index dbf5b62a57..ac21e757f1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352766.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0352766.xml @@ -1,26 +1,26 @@ - + 35276 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353161.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353161.xml index 1acc907ae9..97cd7ab588 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353161.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353161.xml @@ -1,5 +1,5 @@ - + 35316 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353181.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353181.xml index 89e932a264..b9cac93a9b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353181.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353181.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353182.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353182.xml index 4a3bd8f461..fd8d084a9f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353182.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353182.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353183.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353183.xml index a0981c52b7..b4e6c0d00f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353183.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353183.xml @@ -1,9 +1,9 @@ - + 35318 - - - + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353184.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353184.xml index b8024cc5e5..e8986cc0b2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353184.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353184.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353185.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353185.xml index c270f3e916..36f9000538 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353185.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353185.xml @@ -1,8 +1,8 @@ - + 35318 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353186.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353186.xml index 1f5b86df6b..ef5fc103d5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353186.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353186.xml @@ -1,26 +1,26 @@ - + 35318 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353631.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353631.xml index 6cd0f9f83b..f0e259d7f6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353631.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353631.xml @@ -1,5 +1,5 @@ - + 35363 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353651.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353651.xml index e67fc3ff27..8361af5bd6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353651.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353651.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353652.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353652.xml index 08bdb3e69f..8d271d9b5a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353652.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353652.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353653.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353653.xml index a60c33027d..c199fd9a91 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353653.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353653.xml @@ -1,9 +1,9 @@ - + 35365 - - - + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353654.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353654.xml index 8f263e6076..34410877d3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353654.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353654.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353655.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353655.xml index 30483fb4eb..e5ddc20ed8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353655.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353655.xml @@ -1,8 +1,8 @@ - + 35365 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353656.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353656.xml index 47f61a5f8d..83db764b45 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353656.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0353656.xml @@ -1,26 +1,26 @@ - + 35365 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355091.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355091.xml index 64ce916c79..3cb72086ef 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355091.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355091.xml @@ -1,5 +1,5 @@ - + 35509 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355111.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355111.xml index d301023aab..224cc0331c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355111.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355111.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355112.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355112.xml index dde4df5a06..1af568b999 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355112.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355112.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355113.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355113.xml index f3d7809706..19aaf0588f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355113.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355113.xml @@ -1,11 +1,11 @@ - + 35511 - - - - - + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355114.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355114.xml index 082dde48cc..759597ddd0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355114.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355114.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355115.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355115.xml index 0662473717..546391b703 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355115.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355115.xml @@ -1,8 +1,8 @@ - + 35511 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355116.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355116.xml index 4c5e229488..36b173d77f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355116.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355116.xml @@ -1,26 +1,26 @@ - + 35511 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355551.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355551.xml index 8dfce69017..9da26ac5df 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355551.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355551.xml @@ -1,5 +1,5 @@ - + 35555 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355571.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355571.xml index 8baf9d5daa..c7f4be0fd3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355571.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355571.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355572.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355572.xml index 643f113a5a..a899f3e0f2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355572.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355572.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355573.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355573.xml index 0a686f4e94..3c4ea6cf29 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355573.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355573.xml @@ -1,9 +1,9 @@ - + 35557 - - - + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355574.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355574.xml index 91d2143aeb..6f1dac7286 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355574.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355574.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355575.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355575.xml index 64cbf11f50..632bcab90f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355575.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355575.xml @@ -1,8 +1,8 @@ - + 35557 - - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355576.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355576.xml index 03e5256308..7e2ba73d71 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355576.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0355576.xml @@ -1,26 +1,26 @@ - + 35557 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366531.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366531.xml index f124552697..9f21593f19 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366531.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366531.xml @@ -1,5 +1,5 @@ - + 36653 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366541.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366541.xml index b17cd76ac9..4c559b6ff1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366541.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366541.xml @@ -1,5 +1,5 @@ - + 36654 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366551.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366551.xml index e2af00ff71..f7b4c8cc88 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366551.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366551.xml @@ -1,5 +1,5 @@ - + 36655 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366561.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366561.xml index 28b7c008ea..d19e30ec6b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366561.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366561.xml @@ -1,5 +1,5 @@ - + 36656 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366571.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366571.xml index 459785aade..7a7fe9e445 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366571.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366571.xml @@ -1,5 +1,5 @@ - + 36657 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366581.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366581.xml index a6e07f5bd4..e845a51d46 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366581.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366581.xml @@ -1,5 +1,5 @@ - + 36658 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366591.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366591.xml index da24213c75..9159b2a59a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366591.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366591.xml @@ -1,5 +1,5 @@ - + 36659 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366601.xml index 71326ac100..6be90ac82f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366601.xml @@ -1,5 +1,5 @@ - + 36660 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366611.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366611.xml index 0855deaa00..c95462bee0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366611.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/0366611.xml @@ -1,5 +1,5 @@ - + 36661 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/1312801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/1312801.xml index e551478d59..244b670c3f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/1312801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/1312801.xml @@ -1,5 +1,5 @@ - + 13128 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000100.xml index 309643b83f..3020bec80b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000100.xml @@ -1,5 +1,5 @@ - + 30001 @@ -30,4 +30,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000101.xml index a4cbc0278f..355fd56dba 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000101.xml @@ -1,5 +1,5 @@ - + 30001 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000200.xml index 7944ea4f44..367b78f6f1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000200.xml @@ -1,5 +1,5 @@ - + 30002 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000201.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000201.xml index 77467ca3e8..a5dab01833 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000201.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000201.xml @@ -1,5 +1,5 @@ - + 30002 @@ -34,4 +34,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000300.xml index 799ac4784e..98f72b7a3b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000300.xml @@ -1,5 +1,5 @@ - + 30003 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000301.xml index 574fb6e530..d8fe4e34c6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000301.xml @@ -1,5 +1,5 @@ - + 30003 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000400.xml index fbe7c5dfd5..dd1f6c38b0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3000400.xml @@ -1,5 +1,5 @@ - + 30004 @@ -27,7 +27,6 @@ - @@ -52,4 +51,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3004700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3004700.xml index 8a5b084ce1..2d0b270e9c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3004700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3004700.xml @@ -1,5 +1,5 @@ - + 30047 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006000.xml index 5526b07ccd..23c01f239a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006000.xml @@ -1,5 +1,5 @@ - + 30060 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006001.xml index 59b4bec0f0..df6e62e5f5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006001.xml @@ -1,5 +1,5 @@ - + 30060 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006100.xml index 430ba9f8e4..3645494858 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006100.xml @@ -1,5 +1,5 @@ - + 30061 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006101.xml index 74250f09e4..e8267e3455 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006101.xml @@ -1,5 +1,5 @@ - + 30061 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006200.xml index 9510b6f513..b7fd95644d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006200.xml @@ -1,5 +1,5 @@ - + 30062 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006201.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006201.xml index 8d3a7b20ce..d594c7d9a7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006201.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006201.xml @@ -1,5 +1,5 @@ - + 30062 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006202.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006202.xml index 5bf9240df1..12cc6b5587 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006202.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006202.xml @@ -1,5 +1,5 @@ - + 30062 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006300.xml index 50520f9c68..0da7a583be 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006300.xml @@ -1,5 +1,5 @@ - + 30063 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006301.xml index 17fb26291d..0f7d8b8214 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3006301.xml @@ -1,5 +1,5 @@ - + 30063 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3007800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3007800.xml index 9ca9664c11..05eb3cb16a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3007800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3007800.xml @@ -1,81 +1,116 @@ - + 30078 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008100.xml index 49c5ac8c31..7b5968703c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008100.xml @@ -1,8 +1,7 @@ - + 30081 - 34190 @@ -10,11 +9,13 @@ + + @@ -47,7 +48,12 @@ - + + + + + + @@ -77,7 +83,6 @@ - @@ -98,7 +103,6 @@ - diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008101.xml index aa91428d67..b77e878362 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008101.xml @@ -1,5 +1,5 @@ - + 30081 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008200.xml index 5d7b07dbea..a127b556cf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008200.xml @@ -1,5 +1,5 @@ - + 30082 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008201.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008201.xml index b6a5b102af..1c4e759596 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008201.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008201.xml @@ -1,5 +1,5 @@ - + 30082 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008400.xml index 6e0c19b256..352ae71092 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008400.xml @@ -1,5 +1,5 @@ - + 30084 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008401.xml index 55d6aa9265..542b338565 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008401.xml @@ -1,5 +1,5 @@ - + 30084 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008500.xml index b0db68ddf9..78b2d1a7cf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008500.xml @@ -1,5 +1,5 @@ - + 30085 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008701.xml index ab088e77cd..6a58148cd2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008701.xml @@ -1,5 +1,5 @@ - + 30087 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008800.xml index d30b44e5de..0a005c2190 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3008800.xml @@ -1,5 +1,5 @@ - + 30088 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009000.xml index b596da225e..5e68eb6ef9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009000.xml @@ -1,5 +1,5 @@ - + 30090 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009001.xml index 2a9789db15..c37825efcd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009001.xml @@ -1,5 +1,5 @@ - + 30090 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009100.xml index 975660df9e..c6d5ae5550 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009100.xml @@ -1,5 +1,5 @@ - + 30091 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009101.xml index 59fb3b84e3..85f1ff1b4d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009101.xml @@ -1,5 +1,5 @@ - + 30091 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009300.xml index 3f56bafab4..76696df49c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009300.xml @@ -1,5 +1,5 @@ - + 30093 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009400.xml index 0021fd0bdf..12dbdb3977 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009400.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009401.xml index 8bed85e5d1..86e29204b6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009401.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009402.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009402.xml index cda9d39e1a..66ebbac372 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009402.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3009402.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013500.xml index 82877098bd..7c60c99b0f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013500.xml @@ -1,5 +1,5 @@ - + 30135 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013501.xml index 9b42b7f241..06f769d895 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013501.xml @@ -1,5 +1,5 @@ - + 30135 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013600.xml index 7ce171122a..8924cc4f14 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013600.xml @@ -1,5 +1,5 @@ - + 30136 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013601.xml index 9be0509e76..00d4bebb92 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013601.xml @@ -1,5 +1,5 @@ - + 30136 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013700.xml index 3d30071388..9bff93e506 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013700.xml @@ -1,5 +1,5 @@ - + 30137 @@ -108,4 +108,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013800.xml index 26c101a01d..3c1c47ac8d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013800.xml @@ -1,5 +1,5 @@ - + 30138 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013801.xml index 60e5e499f9..9796701e83 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3013801.xml @@ -1,5 +1,5 @@ - + 30138 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014700.xml index bccf348037..240b37c575 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014700.xml @@ -1,5 +1,5 @@ - + 30147 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014701.xml index 6da2295ae7..73fbe9848d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014701.xml @@ -1,5 +1,5 @@ - + 30147 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014800.xml index 8678bde7bb..e5a6bf931f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014800.xml @@ -1,5 +1,5 @@ - + 30148 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014801.xml index 977eedeab2..12d1f30036 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014801.xml @@ -1,5 +1,5 @@ - + 30148 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014900.xml index 4ad0978496..a46c7ecfe8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014900.xml @@ -1,5 +1,5 @@ - + 30149 @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014901.xml index 5e1395208c..5cbf611f38 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3014901.xml @@ -1,5 +1,5 @@ - + 30149 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3015000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3015000.xml index 92e65e15f2..b58949ce4c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3015000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3015000.xml @@ -1,5 +1,5 @@ - + 30150 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016300.xml index 077f1876a1..dbda979b38 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016300.xml @@ -1,5 +1,5 @@ - + 30163 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016400.xml index 1454cfb5ac..1f0df91229 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016400.xml @@ -1,5 +1,5 @@ - + 30164 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016500.xml index aca772d787..48ee4af133 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016500.xml @@ -1,5 +1,5 @@ - + 30165 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016501.xml index 7dba4e131b..32b2a5cf41 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016501.xml @@ -1,5 +1,5 @@ - + 30165 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016601.xml index bfb3e3d1ef..0d750ea8b6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3016601.xml @@ -1,5 +1,5 @@ - + 30166 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017800.xml index 505544d5bc..2c12406e46 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017800.xml @@ -1,5 +1,5 @@ - + 30178 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017801.xml index 3c7ea675c2..b136f17dce 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017801.xml @@ -1,5 +1,5 @@ - + 30178 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017900.xml index d73620d8a8..1285bf5c04 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017900.xml @@ -1,5 +1,5 @@ - + 30179 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017901.xml index cbcb623260..b57367e413 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3017901.xml @@ -1,5 +1,5 @@ - + 30179 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018000.xml index b01148851d..58fd785bf8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018000.xml @@ -1,5 +1,5 @@ - + 30180 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018001.xml index ecaeab10f4..c0e75f739e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018001.xml @@ -1,5 +1,5 @@ - + 30180 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018100.xml index 6bfe46e4a0..d1dacdaf27 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3018100.xml @@ -1,5 +1,5 @@ - + 30181 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020700.xml index a99aeb36d6..2f8ab58ee6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020700.xml @@ -1,5 +1,5 @@ - + 30207 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020701.xml index b415d6d4e3..3a8856b5d9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020701.xml @@ -1,5 +1,5 @@ - + 30207 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020800.xml index 4750f26a53..7f9f5c2a84 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020800.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020801.xml index 94149acb40..5d661cc641 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020801.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020802.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020802.xml index ebdbf6d3e8..e2912593e2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020802.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020802.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020803.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020803.xml index e285dbd868..33d617f651 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020803.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020803.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020900.xml index 72eb021070..f8f4d8822d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3020900.xml @@ -1,5 +1,5 @@ - + 30209 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023000.xml index e1676775e2..3a74565ab5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023000.xml @@ -1,5 +1,5 @@ - + 30230 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023001.xml index 3901f20315..f2bd84932c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023001.xml @@ -1,5 +1,5 @@ - + 30230 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023100.xml index ee38959bcd..39b448efdd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3023100.xml @@ -1,5 +1,5 @@ - + 30231 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025300.xml index e8f292cef7..89ee9799e8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025300.xml @@ -1,5 +1,5 @@ - + 30253 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025301.xml index b9f7e27133..4603a5a685 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025301.xml @@ -1,5 +1,5 @@ - + 30253 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025400.xml index f3bd028fe4..b25f7c2634 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025400.xml @@ -1,5 +1,5 @@ - + 30254 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025401.xml index a01a0d95ff..5870b5c91a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3025401.xml @@ -1,5 +1,5 @@ - + 30254 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3029400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3029400.xml index 88339b5469..47bb430e22 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3029400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3029400.xml @@ -1,5 +1,5 @@ - + 30294 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3030100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3030100.xml index e8a7ccd563..625930ba63 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3030100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3030100.xml @@ -1,5 +1,5 @@ - + 30301 @@ -9,11 +9,13 @@ + + @@ -46,6 +48,12 @@ + + + + + + @@ -75,7 +83,6 @@ - @@ -96,7 +103,6 @@ - @@ -107,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3030101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3030101.xml index 5f9f186327..cfbde210ef 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3030101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3030101.xml @@ -1,5 +1,5 @@ - + 30301 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031300.xml index d2c41b945c..f12b52dbc0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031300.xml @@ -1,5 +1,5 @@ - + 30313 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031400.xml index bef42ee4a4..a70bd2a68f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031400.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031401.xml index ce92ec84e7..c55eb598d0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031401.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031402.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031402.xml index a8f069398a..cc46756624 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031402.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031402.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031500.xml index b3ddb7eadb..bef1c865f8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3031500.xml @@ -1,5 +1,5 @@ - + 30315 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3032100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3032100.xml index cd33aa8c92..98a5e4598a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3032100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3032100.xml @@ -1,5 +1,5 @@ - + 30321 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3032101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3032101.xml index 45f097bc50..79c0ef6f34 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3032101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3032101.xml @@ -1,5 +1,5 @@ - + 30321 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3038700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3038700.xml index 6b2346e650..fd30e9fc4f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3038700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3038700.xml @@ -1,5 +1,5 @@ - + 30387 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3042000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3042000.xml index 8ebf130017..3122f0cc74 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3042000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3042000.xml @@ -1,5 +1,5 @@ - + 30420 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3043600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3043600.xml index 972b0ddc1b..5ede4b6022 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3043600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3043600.xml @@ -1,5 +1,5 @@ - + 30436 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3043700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3043700.xml index f96fcacec9..2ad6c59ff9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3043700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3043700.xml @@ -1,5 +1,5 @@ - + 30437 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051600.xml index 1034512a0d..7a107bb9d5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051600.xml @@ -1,5 +1,5 @@ - + 30516 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051601.xml index 36ac194b8a..6f83fdc514 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051601.xml @@ -1,5 +1,5 @@ - + 30516 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051700.xml index 1f47fb7d37..3b8d6f504f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051700.xml @@ -1,5 +1,5 @@ - + 30517 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051701.xml index 4d9eb38ab6..cfa2ce8508 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051701.xml @@ -1,5 +1,5 @@ - + 30517 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051800.xml index 4fbd11c07f..fdd8e62cdf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051800.xml @@ -1,5 +1,5 @@ - + 30518 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051900.xml index 348a20045d..d3d077b818 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051900.xml @@ -1,5 +1,5 @@ - + 30519 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051901.xml index 46a7179721..adac7cb3dc 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3051901.xml @@ -1,5 +1,5 @@ - + 30519 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055800.xml index 6286969148..b5d017f4a5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055800.xml @@ -1,5 +1,5 @@ - + 30558 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055801.xml index 4138155ceb..dcaae0ac98 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055801.xml @@ -1,5 +1,5 @@ - + 30558 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055900.xml index 65a015d431..77c46b2332 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055900.xml @@ -1,5 +1,5 @@ - + 30559 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055901.xml index 11f2ccad75..a42aba6e8a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3055901.xml @@ -1,5 +1,5 @@ - + 30559 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056000.xml index 978cab75ac..eab17fabea 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056000.xml @@ -1,5 +1,5 @@ - + 30560 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056001.xml index 27682a5b80..b6dd48ba73 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056001.xml @@ -1,5 +1,5 @@ - + 30560 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056100.xml index 1d40dc6d86..4a4f97713b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3056100.xml @@ -1,5 +1,5 @@ - + 30561 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3068400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3068400.xml index 9b5ab9cf56..01c59e4bda 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3068400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3068400.xml @@ -1,5 +1,5 @@ - + 30684 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3068401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3068401.xml index 4aaa8276ee..b763e8d2b0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3068401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3068401.xml @@ -1,5 +1,5 @@ - + 30684 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3073100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3073100.xml index ce0b4fd50c..4d397fa66e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3073100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3073100.xml @@ -1,5 +1,5 @@ - + 30731 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082700.xml index 25dc623035..3843f3fd38 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082700.xml @@ -1,5 +1,5 @@ - + 30827 @@ -68,4 +68,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082800.xml index 048f8c0e93..3adb732baa 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082800.xml @@ -1,5 +1,5 @@ - + 30828 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082900.xml index 587aa02de3..2d89a5d83e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3082900.xml @@ -1,5 +1,5 @@ - + 30829 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083000.xml index 72d67fe651..a0c62f1561 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083000.xml @@ -1,5 +1,5 @@ - + 30830 @@ -68,4 +68,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083100.xml index 46a65ac813..c5f8677a5f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083100.xml @@ -1,5 +1,5 @@ - + 30831 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083400.xml index d5e024cd18..86eadb9ebf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083400.xml @@ -1,5 +1,5 @@ - + 30834 @@ -91,4 +91,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083401.xml index b3d26ae56f..317ef34a8c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083401.xml @@ -1,5 +1,5 @@ - + 30834 @@ -52,4 +52,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083700.xml index 7eb1b461f0..cc9b286ba0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083700.xml @@ -1,5 +1,5 @@ - + 30837 @@ -81,4 +81,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083701.xml index 0c263f977a..0c42bc0d8e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083701.xml @@ -1,5 +1,5 @@ - + 30837 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083800.xml index 8fc56ae2d9..6b4f527bb7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083800.xml @@ -1,5 +1,5 @@ - + 30838 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083801.xml index 28f58759de..0a698f11f0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083801.xml @@ -1,5 +1,5 @@ - + 30838 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083900.xml index f5fd34e39d..7d16233aee 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3083900.xml @@ -1,5 +1,5 @@ - + 30839 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084000.xml index 72b0181aec..dc996387e8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084000.xml @@ -1,5 +1,5 @@ - + 30840 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084100.xml index dd4cf41363..e25ea42b3e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084100.xml @@ -1,5 +1,5 @@ - + 30841 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084101.xml index 528d8ed788..d78fa5ba0f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084101.xml @@ -1,5 +1,5 @@ - + 30841 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084102.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084102.xml index e452b9ca59..10da2eebdd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084102.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084102.xml @@ -1,5 +1,5 @@ - + 30841 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084200.xml index b1be2e7915..30481b42ee 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3084200.xml @@ -1,5 +1,5 @@ - + 30842 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3086900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3086900.xml index 89ba97c589..9a538a35e0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3086900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3086900.xml @@ -1,5 +1,5 @@ - + 30869 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3087900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3087900.xml index a95959510d..bbdf7f37bc 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3087900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3087900.xml @@ -1,5 +1,5 @@ - + 30879 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089000.xml index a558c92485..aa26a4cdc8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089000.xml @@ -1,5 +1,5 @@ - + 30890 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089001.xml index a6896a55c5..e2821435e8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089001.xml @@ -1,5 +1,5 @@ - + 30890 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089100.xml index 2cfc65b77e..7682a4f779 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089100.xml @@ -1,5 +1,5 @@ - + 30891 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089101.xml index 3de65307ed..cb6dc779ab 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089101.xml @@ -1,5 +1,5 @@ - + 30891 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089200.xml index b849a81903..3109ed3df3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089200.xml @@ -1,5 +1,5 @@ - + 30892 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089300.xml index d4f90facde..055dcd499a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089300.xml @@ -1,5 +1,5 @@ - + 30893 @@ -9,11 +9,13 @@ + + @@ -46,6 +48,12 @@ + + + + + + @@ -75,7 +83,6 @@ - @@ -96,7 +103,6 @@ - @@ -107,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089301.xml index 5f22a3f64a..662fe1af0c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3089301.xml @@ -1,5 +1,5 @@ - + 30893 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3104500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3104500.xml index 819e516fc0..a010eabc4d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3104500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3104500.xml @@ -1,81 +1,116 @@ - + 31045 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3106700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3106700.xml index 361daa056d..17d929e580 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3106700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3106700.xml @@ -1,5 +1,5 @@ - + 31067 @@ -86,4 +86,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125600.xml index e83a2ccfe8..ed51c2d6e5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125600.xml @@ -1,5 +1,5 @@ - + 31256 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125601.xml index 658690aadc..d19b106aca 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125601.xml @@ -1,5 +1,5 @@ - + 31256 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125602.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125602.xml index 34a0c96e1a..5a0284dd2e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125602.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125602.xml @@ -1,5 +1,5 @@ - + 31256 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125603.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125603.xml index fa522e73a5..e308fcddf0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125603.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125603.xml @@ -1,5 +1,5 @@ - + 31256 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125700.xml index 554ea9d37b..76af30c423 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125700.xml @@ -1,5 +1,5 @@ - + 31257 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125701.xml index b53d14ba4d..c88702e68f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125701.xml @@ -1,5 +1,5 @@ - + 31257 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125702.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125702.xml index 24e0ec13bc..40835089c1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125702.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125702.xml @@ -1,5 +1,5 @@ - + 31257 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125703.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125703.xml index 759ee3170e..e0bfa28ece 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125703.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125703.xml @@ -1,5 +1,5 @@ - + 31257 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125800.xml index 76a7c1c46e..0aafd5e660 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125800.xml @@ -1,5 +1,5 @@ - + 31258 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125801.xml index 9bdba27a05..f0d3e4065b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125801.xml @@ -1,5 +1,5 @@ - + 31258 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125802.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125802.xml index 8f5bf9ca08..e88c3c1bff 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125802.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125802.xml @@ -1,5 +1,5 @@ - + 31258 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125803.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125803.xml index a1fc8f5256..d4a0515338 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125803.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125803.xml @@ -1,5 +1,5 @@ - + 31258 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125900.xml index ffc2acdb5d..d717f65dc4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125900.xml @@ -1,5 +1,5 @@ - + 31259 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125901.xml index 353f910744..e0500de022 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125901.xml @@ -1,5 +1,5 @@ - + 31259 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125902.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125902.xml index 0d0ad94603..c423f23bd0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125902.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125902.xml @@ -1,5 +1,5 @@ - + 31259 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125903.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125903.xml index cabdd801b2..6ea4724bc5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125903.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3125903.xml @@ -1,5 +1,5 @@ - + 31259 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126000.xml index f9c04ce381..4dd2c64fb3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126000.xml @@ -1,5 +1,5 @@ - + 31260 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126001.xml index de434b8efe..9561e91efe 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126001.xml @@ -1,5 +1,5 @@ - + 31260 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126100.xml index cac307a7e5..c89726c2e7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126100.xml @@ -1,5 +1,5 @@ - + 31261 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126101.xml index 6c893b04d6..d8054cb689 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126101.xml @@ -1,5 +1,5 @@ - + 31261 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126200.xml index 74b25beb63..8b2185b6df 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126200.xml @@ -1,5 +1,5 @@ - + 31262 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126300.xml index 72d320f4b6..348cf06868 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126300.xml @@ -1,5 +1,5 @@ - + 31263 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126301.xml index ba7034bdf2..def9ecc072 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126301.xml @@ -1,5 +1,5 @@ - + 31263 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126500.xml index b1c2e0bf5f..d7c73889cb 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3126500.xml @@ -1,5 +1,5 @@ - + 31265 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3127400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3127400.xml index b354fd9eb4..8b6925221a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3127400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3127400.xml @@ -1,5 +1,5 @@ - + 31274 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130000.xml index 340a30e4a4..9bb77060b4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130000.xml @@ -1,5 +1,5 @@ - + 31300 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130001.xml index 99669c3a71..d8d9dbb755 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130001.xml @@ -1,5 +1,5 @@ - + 31300 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130100.xml index fc3e9d1622..7be1df6352 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130100.xml @@ -1,5 +1,5 @@ - + 31301 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130101.xml index 1528dc42dc..687912cbaf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130101.xml @@ -1,5 +1,5 @@ - + 31301 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130200.xml index 5f7dd538ab..c2a06d75bd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130200.xml @@ -1,5 +1,5 @@ - + 31302 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130201.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130201.xml index 738118f186..3057144246 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130201.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130201.xml @@ -1,5 +1,5 @@ - + 31302 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130300.xml index a5ff2459b8..73fd46bef4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130300.xml @@ -1,5 +1,5 @@ - + 31303 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130301.xml index 8d61da58f6..a80a82cd4f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130301.xml @@ -1,5 +1,5 @@ - + 31303 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130400.xml index 1396ba019d..315d202b36 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130400.xml @@ -1,5 +1,5 @@ - + 31304 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130500.xml index 03804356fe..8fead7714a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130500.xml @@ -1,5 +1,5 @@ - + 31305 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130600.xml index 4774f3d4ab..22deacb502 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130600.xml @@ -1,5 +1,5 @@ - + 31306 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130700.xml index 6a424c58ea..3fcfecfdcd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130700.xml @@ -1,5 +1,5 @@ - + 31307 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130701.xml index 1281659b95..4b0463093c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130701.xml @@ -1,5 +1,5 @@ - + 31307 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130900.xml index e8014e8971..83c89722c6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3130900.xml @@ -1,5 +1,5 @@ - + 31309 @@ -86,4 +86,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3131800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3131800.xml index 079526d9e6..31e46fdbb6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3131800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3131800.xml @@ -1,5 +1,5 @@ - + 31318 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3131900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3131900.xml index ae2bf84aef..cdf8a9f934 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3131900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3131900.xml @@ -1,5 +1,5 @@ - + 31319 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3135100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3135100.xml index 4dd1278d97..caf5d20205 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3135100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3135100.xml @@ -1,5 +1,5 @@ - + 31351 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3136600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3136600.xml index a87904816d..bcc26fa7cf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3136600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3136600.xml @@ -1,5 +1,5 @@ - + 31366 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3138600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3138600.xml index a9a9541489..47823de404 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3138600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3138600.xml @@ -1,5 +1,5 @@ - + 31386 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141300.xml index 21d84fbab6..7bf08c2b82 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141300.xml @@ -1,5 +1,5 @@ - + 31413 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141400.xml index 3d1229325c..b6df861de7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141400.xml @@ -1,5 +1,5 @@ - + 31414 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141500.xml index 63e2ca7fdc..aa31f97c3e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141500.xml @@ -1,5 +1,5 @@ - + 31415 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141600.xml index 1bec460006..bcd60c83c4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141600.xml @@ -1,5 +1,5 @@ - + 31416 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141700.xml index 60e4778dd6..96300413f1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141700.xml @@ -1,5 +1,5 @@ - + 31417 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141800.xml index 8ab2138e78..f390f89f3e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141800.xml @@ -1,5 +1,5 @@ - + 31418 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141900.xml index 7b6941f4d1..f8afc28bf0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3141900.xml @@ -1,5 +1,5 @@ - + 31419 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142000.xml index 5d3899e9f7..7a5d1ceedd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142000.xml @@ -1,5 +1,5 @@ - + 31420 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142100.xml index c35a2b3ab7..236aad2a43 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142100.xml @@ -1,5 +1,5 @@ - + 31421 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142200.xml index 1d122950e4..6858b456ec 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142200.xml @@ -1,5 +1,5 @@ - + 31422 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142300.xml index cf243f261b..a4bfdcfcd7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142300.xml @@ -1,5 +1,5 @@ - + 31423 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142400.xml index f0eef17f26..1f727940d2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142400.xml @@ -1,5 +1,5 @@ - + 31424 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142500.xml index 77f79efc3a..9580ad707d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142500.xml @@ -1,5 +1,5 @@ - + 31425 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142600.xml index fab5b386b3..6796c56597 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142600.xml @@ -1,5 +1,5 @@ - + 31426 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142700.xml index a44fc322ab..b4ae4053e6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142700.xml @@ -1,5 +1,5 @@ - + 31427 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142800.xml index e5539d5238..95510cf96c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142800.xml @@ -1,5 +1,5 @@ - + 31428 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142900.xml index fc06a66383..57f63b53b1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3142900.xml @@ -1,5 +1,5 @@ - + 31429 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143000.xml index 063f61fb37..4cc499ca88 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143000.xml @@ -1,5 +1,5 @@ - + 31430 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143100.xml index 50cc465abc..14add57056 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143100.xml @@ -1,5 +1,5 @@ - + 31431 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143200.xml index 194f0b87a3..07bb9b3512 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143200.xml @@ -1,5 +1,5 @@ - + 31432 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143300.xml index 21ebbc9ba8..7082b56454 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143300.xml @@ -1,5 +1,5 @@ - + 31433 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143400.xml index fe67847877..a503222fa5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143400.xml @@ -1,5 +1,5 @@ - + 31434 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143500.xml index a256a32890..b0265fa5ef 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143500.xml @@ -1,5 +1,5 @@ - + 31435 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143600.xml index bef64fb21c..0fab588ef1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143600.xml @@ -1,5 +1,5 @@ - + 31436 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143700.xml index dbdd1a1738..686360370d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143700.xml @@ -1,5 +1,5 @@ - + 31437 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143800.xml index 87cc571e71..3333c26636 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143800.xml @@ -1,5 +1,5 @@ - + 31438 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143900.xml index 6e36408c86..32bbce1b32 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3143900.xml @@ -1,5 +1,5 @@ - + 31439 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144000.xml index e45a96ca11..32e1a2d935 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144000.xml @@ -1,5 +1,5 @@ - + 31440 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144100.xml index a915fe79f8..5cb91a2d08 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144100.xml @@ -1,5 +1,5 @@ - + 31441 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144200.xml index 3146bf7dc6..654fd41101 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144200.xml @@ -1,17 +1,17 @@ - + 31442 - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144300.xml index 42c0113a09..7101dc7ca9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144300.xml @@ -1,5 +1,5 @@ - + 31443 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144400.xml index 0fb5fa1de5..d743f68e6c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144400.xml @@ -1,5 +1,5 @@ - + 31444 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144500.xml index c2fce59cd3..de938e45de 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3144500.xml @@ -1,5 +1,5 @@ - + 31445 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156300.xml index ea3f99ad45..8daa3e35d2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156300.xml @@ -1,5 +1,5 @@ - + 31563 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156700.xml index 6d0ee28811..c213b286ba 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156700.xml @@ -1,5 +1,5 @@ - + 31567 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156800.xml index fdb1b568ba..8110e7135a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3156800.xml @@ -1,5 +1,5 @@ - + 31568 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157000.xml index 5484b76ab8..ac69379fcf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157000.xml @@ -1,5 +1,5 @@ - + 31570 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157100.xml index d8fa2029a3..c070491193 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157100.xml @@ -1,5 +1,5 @@ - + 31571 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157200.xml index 4e8398b9fe..83dc91f2ff 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157200.xml @@ -1,5 +1,5 @@ - + 31572 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157300.xml index 69cafd073a..14313bd208 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157300.xml @@ -1,5 +1,5 @@ - + 31573 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157400.xml index 1ac63f46dd..2052f17a66 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157400.xml @@ -1,5 +1,5 @@ - + 31574 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157500.xml index fcf62bee8c..e62610f8ac 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157500.xml @@ -1,5 +1,5 @@ - + 31575 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157600.xml index 9d9447b933..532fd49209 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157600.xml @@ -1,5 +1,5 @@ - + 31576 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157700.xml index b7b667ece6..2cbcd82911 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157700.xml @@ -1,5 +1,5 @@ - + 31577 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157800.xml index 739b5dc625..95f15512e3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157800.xml @@ -1,5 +1,5 @@ - + 31578 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157900.xml index 7446d877cd..b3b990905f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3157900.xml @@ -1,5 +1,5 @@ - + 31579 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166600.xml index b326f8222c..bc22d13140 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166600.xml @@ -1,5 +1,5 @@ - + 31666 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166700.xml index db105df248..ae62f73b31 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166700.xml @@ -1,5 +1,5 @@ - + 31667 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166800.xml index a53bc3746c..dc44cebca3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166800.xml @@ -1,5 +1,5 @@ - + 31668 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166900.xml index 521962b456..dc1a50c4da 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3166900.xml @@ -1,5 +1,5 @@ - + 31669 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3167000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3167000.xml index e610f9c0e2..23abfe3c48 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3167000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3167000.xml @@ -1,5 +1,5 @@ - + 31670 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3169600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3169600.xml index 034e1a9975..ecc1433ab0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3169600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3169600.xml @@ -1,5 +1,5 @@ - + 31696 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3169700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3169700.xml index e2db54a589..62e1b5f2e5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3169700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3169700.xml @@ -1,5 +1,5 @@ - + 31697 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175601.xml index 746b4dc1c0..6c0a1b7326 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175601.xml @@ -1,174 +1,174 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175602.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175602.xml index bab8fc8800..5493371fb3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175602.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175602.xml @@ -1,44 +1,44 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175603.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175603.xml index a0b0f1f789..7a63460eac 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175603.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175603.xml @@ -1,120 +1,120 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175604.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175604.xml index 3f2f3f2bb1..7b4a19573c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175604.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175604.xml @@ -1,161 +1,161 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175605.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175605.xml index d3f9c025d4..c756f4ec23 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175605.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175605.xml @@ -1,144 +1,144 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175606.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175606.xml index f5f4030195..e121d0f96e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175606.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175606.xml @@ -1,155 +1,155 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175607.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175607.xml index 376023d33e..4f51da5d22 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175607.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175607.xml @@ -1,162 +1,162 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175608.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175608.xml index d063b94daa..19661dcecf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175608.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3175608.xml @@ -1,119 +1,119 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194500.xml index fb1f967e70..77f8dadd26 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194500.xml @@ -1,5 +1,5 @@ - + 31945 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194501.xml index 4df13d9752..961716e0a5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194501.xml @@ -1,5 +1,5 @@ - + 31945 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194600.xml index b2317a6383..6c2507af23 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194600.xml @@ -1,5 +1,5 @@ - + 31946 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194601.xml index f0a36e6d77..b345720e23 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194601.xml @@ -1,5 +1,5 @@ - + 31946 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194700.xml index a48a031a06..e52d2ea6ca 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194700.xml @@ -1,5 +1,5 @@ - + 31947 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194701.xml index 921039e71a..eda5f96cc9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194701.xml @@ -1,5 +1,5 @@ - + 31947 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194800.xml index 87904ecd0c..7fe536361e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194800.xml @@ -1,5 +1,5 @@ - + 31948 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194801.xml index 5624af6231..7f1450010d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194801.xml @@ -1,5 +1,5 @@ - + 31948 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194900.xml index d0796103e1..458666118a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3194900.xml @@ -1,5 +1,5 @@ - + 31949 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195000.xml index 625aab2e35..2f20e43391 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195000.xml @@ -1,5 +1,5 @@ - + 31950 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195100.xml index c3891aa8f6..15adde8709 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195100.xml @@ -1,5 +1,5 @@ - + 31951 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195200.xml index c05ffefaae..d530d8fe80 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195200.xml @@ -1,5 +1,5 @@ - + 31952 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195201.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195201.xml index 720e5dfb11..b28a9d5661 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195201.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195201.xml @@ -1,5 +1,5 @@ - + 31952 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195400.xml index 38355f1962..171cb4bf22 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3195400.xml @@ -1,5 +1,5 @@ - + 31954 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3196200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3196200.xml index f11d4d2fa4..d5528660ee 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3196200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3196200.xml @@ -1,5 +1,5 @@ - + 31962 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3196300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3196300.xml index 2f15dc2a44..8d7e80be97 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3196300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3196300.xml @@ -1,5 +1,5 @@ - + 31963 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3197300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3197300.xml index aff89d5009..ab1a5fb358 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3197300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3197300.xml @@ -1,5 +1,5 @@ - + 31973 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3198000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3198000.xml index 869a43a333..d089bac38f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3198000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3198000.xml @@ -1,5 +1,5 @@ - + 31980 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3198900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3198900.xml index 8c31c0dc94..b35e6b2864 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3198900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3198900.xml @@ -1,5 +1,5 @@ - + 31989 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3200700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3200700.xml index 167dd290d3..90e5921c59 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3200700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3200700.xml @@ -1,9 +1,24 @@ - + + 31563 + 31567 + 31568 + 31570 + 31571 + 31572 + 31573 + 31574 + 31575 + 31576 + 31577 + 31578 + 31579 + 31696 + 31697 + 31989 32007 - diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3210500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3210500.xml index 70bb097553..5becbd6dfb 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3210500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3210500.xml @@ -1,5 +1,5 @@ - + 32105 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3210600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3210600.xml index ab3c21eb2d..9fb0fd6422 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3210600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3210600.xml @@ -1,5 +1,5 @@ - + 32106 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216400.xml index 165958fabc..de56b0e3f7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216400.xml @@ -1,5 +1,5 @@ - + 32164 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216401.xml index e79df3304f..b804eaec0f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216401.xml @@ -1,5 +1,5 @@ - + 32164 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216500.xml index a4f9aa2fdf..70d0a1e8af 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216500.xml @@ -1,5 +1,5 @@ - + 32165 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216501.xml index e46c516d1f..6101e3ce26 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216501.xml @@ -1,5 +1,5 @@ - + 32165 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216600.xml index cb69d3405a..9b021b6711 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216600.xml @@ -1,5 +1,5 @@ - + 32166 @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216700.xml index 909c21f5de..4fdb5e34a1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216700.xml @@ -1,5 +1,5 @@ - + 32167 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216900.xml index ceb575e21f..f86951d7d4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3216900.xml @@ -1,5 +1,5 @@ - + 32169 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3229800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3229800.xml index 36d3f0f827..98040eb41f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3229800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3229800.xml @@ -1,5 +1,6 @@ - + + 32298 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287400.xml index aac7c17549..086cffdf82 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287400.xml @@ -1,5 +1,5 @@ - + 32874 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287500.xml index 7f150cf221..40e5723230 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287500.xml @@ -1,5 +1,5 @@ - + 32875 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287600.xml index ca62ca560f..b35acefc5f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287600.xml @@ -1,5 +1,5 @@ - + 32876 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287700.xml index 6b2ad15882..8c4bb05784 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287700.xml @@ -1,5 +1,5 @@ - + 32877 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287800.xml index 3f406d6f48..398ce99ea1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287800.xml @@ -1,5 +1,5 @@ - + 32878 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287900.xml index b4c46a58c9..826882200d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3287900.xml @@ -1,5 +1,5 @@ - + 32879 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288000.xml index 57c8c44bce..202c50d88f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288000.xml @@ -1,5 +1,5 @@ - + 32880 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288100.xml index 250b028e17..7d8b887d74 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288100.xml @@ -1,5 +1,5 @@ - + 32881 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288200.xml index a3e269826e..b05b7d5fb9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288200.xml @@ -1,5 +1,5 @@ - + 32882 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288300.xml index 1e8c25b2fc..9001118f78 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288300.xml @@ -1,5 +1,5 @@ - + 32883 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288700.xml index 251429e17f..82c98cc6d9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3288700.xml @@ -1,5 +1,5 @@ - + 32887 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3289700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3289700.xml index 00afc82b74..36cd1a2ca7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3289700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3289700.xml @@ -1,5 +1,5 @@ - + 32897 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3357900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3357900.xml index 406de80c04..3a196449a1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3357900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3357900.xml @@ -1,5 +1,5 @@ - + 33579 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393400.xml index 5524722b09..a4c1ace51f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393400.xml @@ -1,5 +1,5 @@ - + 33934 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393401.xml index b248104a25..1d36c1d793 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393401.xml @@ -1,5 +1,5 @@ - + 33934 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393500.xml index e2716bb9e0..207aa40511 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393500.xml @@ -1,5 +1,5 @@ - + 33935 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393501.xml index 7743cb0c45..3965dd5b9b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393501.xml @@ -1,5 +1,5 @@ - + 33935 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393600.xml index 500205f360..b379393935 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393600.xml @@ -1,5 +1,5 @@ - + 33936 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393700.xml index a9673e1580..8204b13e41 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3393700.xml @@ -1,5 +1,5 @@ - + 33937 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538400.xml index ee50f8f855..50dbb71d5c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538400.xml @@ -1,9 +1,9 @@ - + 35384 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538401.xml index 70b600ec4d..0c6700f1ee 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538401.xml @@ -1,5 +1,5 @@ - + 35384 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538402.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538402.xml index 46a8a7cb2c..023ef09f09 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538402.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538402.xml @@ -1,5 +1,5 @@ - + 35384 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538600.xml index 35e71f6de5..6c83b22671 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538600.xml @@ -1,9 +1,9 @@ - + 35386 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538601.xml index f50562cbe2..ada5fb486d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538601.xml @@ -1,5 +1,5 @@ - + 35386 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538602.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538602.xml index 52b3570e56..b4468d3806 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538602.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538602.xml @@ -1,5 +1,5 @@ - + 35386 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538800.xml index 6f1e7a4e2d..94fa0f35f2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538800.xml @@ -1,9 +1,9 @@ - + 35388 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538801.xml index ef01e41384..c616612ad1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538801.xml @@ -1,5 +1,5 @@ - + 35388 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538802.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538802.xml index 2472dd6ce4..57440ba594 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538802.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3538802.xml @@ -1,5 +1,5 @@ - + 35388 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539200.xml index 1869a99f44..e54354d05f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539200.xml @@ -1,9 +1,9 @@ - + 35392 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539201.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539201.xml index 947e416108..77413ff2a9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539201.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539201.xml @@ -1,5 +1,5 @@ - + 35392 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539202.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539202.xml index 7cd4ab31d6..029f7918d8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539202.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539202.xml @@ -1,5 +1,5 @@ - + 35392 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539400.xml index 8fd555c2d4..af0a2e400b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539400.xml @@ -1,9 +1,9 @@ - + 35394 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539401.xml index 5663046576..a1a215804f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539401.xml @@ -1,5 +1,5 @@ - + 35394 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539402.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539402.xml index 73a041fbbb..f8c31378e5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539402.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539402.xml @@ -1,5 +1,5 @@ - + 35394 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539600.xml index d1627e1839..7300df9790 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539600.xml @@ -1,9 +1,9 @@ - + 35396 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539601.xml index 4dfea49275..37a1ff0b7d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539601.xml @@ -1,5 +1,5 @@ - + 35396 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539602.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539602.xml index b0ae647a05..232a1c60db 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539602.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539602.xml @@ -1,5 +1,5 @@ - + 35396 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539800.xml index 4035f3199b..1a1d6fbfd9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539800.xml @@ -1,9 +1,9 @@ - + 35398 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539801.xml index 4b160e42be..b005e91fc0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539801.xml @@ -1,5 +1,5 @@ - + 35398 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539802.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539802.xml index 1f4c981fd1..4e27d60315 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539802.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3539802.xml @@ -1,5 +1,5 @@ - + 35398 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540000.xml index 5eb2550eea..7e7dff5c9e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540000.xml @@ -1,9 +1,9 @@ - + 35400 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540001.xml index 5e3b1ed812..56f709aeaa 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540001.xml @@ -1,5 +1,5 @@ - + 35400 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540002.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540002.xml index df8449fbf9..91664c4540 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540002.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540002.xml @@ -1,5 +1,5 @@ - + 35400 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540300.xml index 1b7598cc0f..02d575638c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540300.xml @@ -1,9 +1,9 @@ - + 35403 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540301.xml index 603f859c09..b45fee7699 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540301.xml @@ -1,5 +1,5 @@ - + 35403 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540302.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540302.xml index e6a076ed8c..0b4daa2792 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540302.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540302.xml @@ -1,5 +1,5 @@ - + 35403 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540500.xml index 1e5dd9cd7a..1e3b6b7b1c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540500.xml @@ -1,9 +1,9 @@ - + 35405 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540501.xml index 97c9cd08b4..29b8d2f981 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540501.xml @@ -1,5 +1,5 @@ - + 35405 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540502.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540502.xml index 3e91ce6d2b..5c0cd06f48 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540502.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540502.xml @@ -1,5 +1,5 @@ - + 35405 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540700.xml index 8d43cb672d..f1e2cb9403 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540700.xml @@ -1,9 +1,9 @@ - + 35407 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540701.xml index 2583b6a38a..db2d697f7b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540701.xml @@ -1,5 +1,5 @@ - + 35407 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540702.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540702.xml index 6d426e2483..223ace3856 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540702.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3540702.xml @@ -1,5 +1,5 @@ - + 35407 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543900.xml index ef77885181..3f94d66939 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543900.xml @@ -1,9 +1,9 @@ - + 35439 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543901.xml index 39f13ee2ac..1136de24fd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543901.xml @@ -1,5 +1,5 @@ - + 35439 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543902.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543902.xml index 26069b941a..8d77b4b9ec 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543902.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3543902.xml @@ -1,5 +1,5 @@ - + 35439 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544100.xml index f22b3a29da..02bd80580a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544100.xml @@ -1,9 +1,9 @@ - + 35441 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544101.xml index 468d29021f..0e29dcd193 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544101.xml @@ -1,5 +1,5 @@ - + 35441 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544102.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544102.xml index 52f32828d4..cd5266edb1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544102.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544102.xml @@ -1,5 +1,5 @@ - + 35441 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544300.xml index c979f1aebb..116d282b61 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544300.xml @@ -1,9 +1,9 @@ - + 35443 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544301.xml index 0c4edf9a31..b3d96407ed 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544301.xml @@ -1,5 +1,5 @@ - + 35443 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544302.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544302.xml index 25306ab486..5eb1294acd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544302.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544302.xml @@ -1,5 +1,5 @@ - + 35443 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544500.xml index 4c9186dc9b..53afa9685b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544500.xml @@ -1,9 +1,9 @@ - + 35445 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544501.xml index 8640569f3d..6d02dca477 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544501.xml @@ -1,5 +1,5 @@ - + 35445 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544502.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544502.xml index ec40cc64de..264626f1fc 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544502.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544502.xml @@ -1,5 +1,5 @@ - + 35445 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544700.xml index 17e8bd00e3..e8195ff43b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544700.xml @@ -1,9 +1,9 @@ - + 35447 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544701.xml index 1a3dcfd2ef..dcda2135f5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544701.xml @@ -1,5 +1,5 @@ - + 35447 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544702.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544702.xml index 19fe5aeccd..40a40c0c41 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544702.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544702.xml @@ -1,5 +1,5 @@ - + 35447 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544900.xml index 0adb8a2b30..8cdb0740a3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544900.xml @@ -1,9 +1,9 @@ - + 35449 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544901.xml index 0528b75878..e8fa1086d8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544901.xml @@ -1,5 +1,5 @@ - + 35449 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544902.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544902.xml index b42c87c3a0..191a3af046 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544902.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3544902.xml @@ -1,5 +1,5 @@ - + 35449 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545100.xml index 1cd1aaa4a7..757e4e3022 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545100.xml @@ -1,9 +1,9 @@ - + 35451 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545101.xml index 3ca1ace28e..e73a5a039a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545101.xml @@ -1,5 +1,5 @@ - + 35451 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545102.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545102.xml index bc183bd9be..9531082d92 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545102.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545102.xml @@ -1,5 +1,5 @@ - + 35451 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545300.xml index bd75af7679..ffd091f8a5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545300.xml @@ -1,9 +1,9 @@ - + 35453 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545301.xml index 1879bef821..49958cc001 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545301.xml @@ -1,5 +1,5 @@ - + 35453 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545302.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545302.xml index 7d87c620cf..6e7fa0cd15 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545302.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545302.xml @@ -1,5 +1,5 @@ - + 35453 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545500.xml index 392619e352..343ec97ad2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545500.xml @@ -1,9 +1,9 @@ - + 35455 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545501.xml index 963ad988c1..8280c0a99a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545501.xml @@ -1,5 +1,5 @@ - + 35455 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545502.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545502.xml index e7b9bab43d..02d33fdef7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545502.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545502.xml @@ -1,5 +1,5 @@ - + 35455 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545700.xml index b62a44d7ab..a6b392ce7b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545700.xml @@ -1,9 +1,9 @@ - + 35457 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545701.xml index 17e12e4a6c..ba5813d069 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545701.xml @@ -1,5 +1,5 @@ - + 35457 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545702.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545702.xml index 1b0dfb721e..0e56127b54 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545702.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545702.xml @@ -1,5 +1,5 @@ - + 35457 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545900.xml index 17b28d399a..b723f46803 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545900.xml @@ -1,9 +1,9 @@ - + 35459 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545901.xml index 8b87bb8d96..e761f09bbf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545901.xml @@ -1,5 +1,5 @@ - + 35459 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545902.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545902.xml index 8f6cae0ed1..3c3fe6f3e8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545902.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3545902.xml @@ -1,5 +1,5 @@ - + 35459 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546100.xml index 5075b488df..753e0a7579 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546100.xml @@ -1,9 +1,9 @@ - + 35461 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546101.xml index f85ef9e588..608ec55b5d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546101.xml @@ -1,5 +1,5 @@ - + 35461 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546102.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546102.xml index 67e4a54af6..c8b332b435 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546102.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546102.xml @@ -1,5 +1,5 @@ - + 35461 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546300.xml index 408f6c8d9d..8dc912e3e2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546300.xml @@ -1,9 +1,9 @@ - + 35463 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546301.xml index e8cb2abc0f..435d212576 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546301.xml @@ -1,5 +1,5 @@ - + 35463 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546302.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546302.xml index a2496f4eee..9170a51817 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546302.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546302.xml @@ -1,5 +1,5 @@ - + 35463 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546500.xml index 18357b91d1..76c62e3cf5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546500.xml @@ -1,9 +1,9 @@ - + 35465 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546501.xml index 68ff755bf1..98b5bd359b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546501.xml @@ -1,5 +1,5 @@ - + 35465 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546502.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546502.xml index de82f242d3..ed8306e9ea 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546502.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546502.xml @@ -1,5 +1,5 @@ - + 35465 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546700.xml index cbf63aadf8..ba8159e65c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546700.xml @@ -1,9 +1,9 @@ - + 35467 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546701.xml index 41cac8a0c4..b6fe2eafcf 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546701.xml @@ -1,5 +1,5 @@ - + 35467 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546702.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546702.xml index f3d464cbdf..27b63ce264 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546702.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3546702.xml @@ -1,5 +1,5 @@ - + 35467 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556600.xml index ffe706469b..e05cd5a14b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556600.xml @@ -1,9 +1,9 @@ - + 35566 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556601.xml index c7b5d2d45d..36443d9392 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556601.xml @@ -1,5 +1,5 @@ - + 35566 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556602.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556602.xml index 22a77702f0..8deb389256 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556602.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556602.xml @@ -1,5 +1,5 @@ - + 35566 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556800.xml index bb75834da6..22b5cc9911 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556800.xml @@ -1,9 +1,9 @@ - + 35568 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556801.xml index 209872b603..5bea0a549e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556801.xml @@ -1,5 +1,5 @@ - + 35568 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556802.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556802.xml index c383cbc628..cd9247c904 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556802.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3556802.xml @@ -1,5 +1,5 @@ - + 35568 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557000.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557000.xml index 80557c9571..5f52b282d9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557000.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557000.xml @@ -1,9 +1,9 @@ - + 35570 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557001.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557001.xml index e79dddb192..0dbfab1fed 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557001.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557001.xml @@ -1,5 +1,5 @@ - + 35570 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557002.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557002.xml index 0ccb32be94..50a1a5c8f3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557002.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557002.xml @@ -1,5 +1,5 @@ - + 35570 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557200.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557200.xml index 2f78b6d2f3..de4e798050 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557200.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557200.xml @@ -1,9 +1,9 @@ - + 35572 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557201.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557201.xml index 156066ccf4..14acd30412 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557201.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557201.xml @@ -1,5 +1,5 @@ - + 35572 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557202.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557202.xml index fbb6ada0ef..8532267bc9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557202.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557202.xml @@ -1,5 +1,5 @@ - + 35572 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557400.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557400.xml index b3281ad3de..40d891d9b8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557400.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557400.xml @@ -1,9 +1,9 @@ - + 35574 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557401.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557401.xml index 0b1e3b9821..96744ad937 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557401.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557401.xml @@ -1,5 +1,5 @@ - + 35574 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557402.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557402.xml index 25a9a721de..e633f058c4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557402.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557402.xml @@ -1,5 +1,5 @@ - + 35574 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557600.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557600.xml index 827c7a9302..1bf2b20fae 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557600.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557600.xml @@ -1,9 +1,9 @@ - + 35576 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557601.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557601.xml index b64ff1fe65..ff932dc94c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557601.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557601.xml @@ -1,5 +1,5 @@ - + 35576 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557602.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557602.xml index af54f7275f..6a2d49663b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557602.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557602.xml @@ -1,5 +1,5 @@ - + 35576 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557800.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557800.xml index 54702e0036..f6d615a3e5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557800.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557800.xml @@ -1,9 +1,9 @@ - + 35578 - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557801.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557801.xml index 08156b377b..7a04af2d7e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557801.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557801.xml @@ -1,5 +1,5 @@ - + 35578 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557802.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557802.xml index 9f7a09f8ed..27637ed7af 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557802.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3557802.xml @@ -1,5 +1,5 @@ - + 35578 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672100.xml index 3f451a717e..3325982c6a 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672100.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672101.xml index c03c623470..c90d15f3af 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672101.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672102.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672102.xml index 050f8aad74..1dc0569b7e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672102.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672102.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672300.xml index 310123b491..8402c24d50 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672300.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672301.xml index c0675987e7..eed821b6fa 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672301.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672302.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672302.xml index fbae3053b0..57fd05555f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672302.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672302.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672500.xml index cd69a4d152..279366c886 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672500.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672501.xml index 38957f1317..a44266b326 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672501.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672502.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672502.xml index eb167dfa6b..904fe752d9 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672502.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672502.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672700.xml index 1451249349..8353518970 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672700.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672701.xml index 6777b33168..dd494e389c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672701.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672702.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672702.xml index 0f11e81451..9699d4b69c 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672702.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672702.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672900.xml index 431a45d293..493f7671f0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672900.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672901.xml index b1bf700e64..8ec803287b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672901.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672902.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672902.xml index 1c86e28ae8..49f6a174ed 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672902.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3672902.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673100.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673100.xml index ac390e3487..0a3e95adf4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673100.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673100.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673101.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673101.xml index 597b8b7636..144ef10545 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673101.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673101.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673102.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673102.xml index 199d26a901..a0919c5f22 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673102.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673102.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673300.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673300.xml index 8648b1abde..6f1b72a3bb 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673300.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673300.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673301.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673301.xml index 721d28750a..05911ed2fa 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673301.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673301.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673302.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673302.xml index 0243ff4d28..24b3ec9ba0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673302.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673302.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673500.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673500.xml index 0a6199fb86..115adfb7e6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673500.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673500.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673501.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673501.xml index c9b2613e67..7a3b5f7655 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673501.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673501.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673502.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673502.xml index b5abe67078..e022ac516d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673502.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673502.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673700.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673700.xml index c6c91b2c5a..03214db660 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673700.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673700.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673701.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673701.xml index af3738b2e0..50ca337f69 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673701.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673701.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673702.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673702.xml index e36d3d5e61..809bd6cb74 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673702.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673702.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673900.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673900.xml index f9c3700a88..ab9a0c3ebc 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673900.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673900.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673901.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673901.xml index 9cdd79e334..69395e9fb1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673901.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673901.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673902.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673902.xml index 7d13911629..1e2fdfd3da 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673902.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/buylists/3673902.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/zone.htm b/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/zone.htm index 8fabc38c8b..4db84a7ac1 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/zone.htm +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/html/admin/zone.htm @@ -14,7 +14,7 @@
Peace:%PEACE%
Pvp:%PVP%
Siege:%SIEGE%
-
Town:%TOWN%
+
Tax:%TAX%
Castle:%CASTLE%
Fort:%FORT%
HQ:%HQ%
diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/1004.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/1004.xml deleted file mode 100644 index 0e82576b63..0000000000 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/1004.xml +++ /dev/null @@ -1,338 +0,0 @@ - - - - 30283 - 30298 - 30300 - 30307 - 30317 - 30363 - 30458 - 30471 - 30526 - 30527 - 30564 - 30678 - 30688 - 30846 - 30898 - 31271 - 31316 - 31583 - 31960 - 31990 - 32159 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/719.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/719.xml index 2e80baacdf..8dd350e3e5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/719.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/719.xml @@ -24,11 +24,11 @@ - - - - - + + + + +
@@ -40,11 +40,11 @@ - - - - - + + + + + @@ -56,11 +56,11 @@ - - - - - + + + + + @@ -72,11 +72,11 @@ - - - - - + + + + + @@ -88,11 +88,11 @@ - - - - - + + + + + @@ -104,10 +104,10 @@ - - - - - + + + + +
\ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/custom/600010.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/custom/600010.xml index 779216e9b3..e9e30d206b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/custom/600010.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/multisell/custom/600010.xml @@ -7,9 +7,11 @@ - + + - + +
@@ -17,9 +19,11 @@ - + + - + +
@@ -29,9 +33,11 @@ - + + - + +
@@ -39,17 +45,21 @@ - + + - + + - + + - + + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java index 735f4492f7..a23bedab7d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java @@ -19,11 +19,10 @@ package ai.others.DelusionTeleport; import java.util.HashMap; import java.util.Map; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; +import com.l2jmobius.gameserver.model.variables.PlayerVariables; import ai.AbstractNpcAI; @@ -50,20 +49,18 @@ public final class DelusionTeleport extends AbstractNpcAI new Location(-114597, -152501, -6750), new Location(-114589, -154162, -6750) }; - // Player Variables - private static final String DELUSION_RETURN = "DELUSION_RETURN"; private static final Map RETURN_LOCATIONS = new HashMap<>(); static { RETURN_LOCATIONS.put(0, new Location(43835, -47749, -792)); // Undefined origin, return to Rune - RETURN_LOCATIONS.put(7, new Location(-14023, 123677, -3112)); // Gludio - RETURN_LOCATIONS.put(8, new Location(18101, 145936, -3088)); // Dion - RETURN_LOCATIONS.put(10, new Location(80905, 56361, -1552)); // Oren - RETURN_LOCATIONS.put(14, new Location(42772, -48062, -792)); // Rune - RETURN_LOCATIONS.put(15, new Location(108469, 221690, -3592)); // Heine - RETURN_LOCATIONS.put(17, new Location(85991, -142234, -1336)); // Schuttgart + RETURN_LOCATIONS.put(20, new Location(-14023, 123677, -3112)); // Gludio + RETURN_LOCATIONS.put(30, new Location(18101, 145936, -3088)); // Dion + RETURN_LOCATIONS.put(40, new Location(80905, 56361, -1552)); // Heine + RETURN_LOCATIONS.put(50, new Location(108469, 221690, -3592)); // Oren + RETURN_LOCATIONS.put(60, new Location(85991, -142234, -1336)); // Schuttgart + RETURN_LOCATIONS.put(70, new Location(42772, -48062, -792)); // Rune } private DelusionTeleport() @@ -77,16 +74,15 @@ public final class DelusionTeleport extends AbstractNpcAI { if (npc.getId() == NPCS[0]) // Pathfinder Worker { - final L2TownZone town = TownManager.getTown(npc.getX(), npc.getY(), npc.getZ()); - final int townId = ((town == null) ? 0 : town.getTownId()); - player.getVariables().set(DELUSION_RETURN, townId); + final int locId = npc.getParameters().getInt("Level", -1); + player.getVariables().set(PlayerVariables.DELUSION_RETURN, RETURN_LOCATIONS.containsKey(locId) ? locId : 0); player.teleToLocation(HALL_LOCATIONS[getRandom(HALL_LOCATIONS.length)], false); } else { - final int townId = player.getVariables().getInt(DELUSION_RETURN, 0); + final int townId = player.getVariables().getInt(PlayerVariables.DELUSION_RETURN, 0); player.teleToLocation(RETURN_LOCATIONS.get(townId), true); - player.getVariables().remove(DELUSION_RETURN); + player.getVariables().remove(PlayerVariables.DELUSION_RETURN); } return super.onTalk(npc, player); } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java index 967d248bff..480462fea7 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java @@ -162,7 +162,7 @@ public class AdminElement implements IAdminCommandHandler } else { - itemInstance.setAttribute(new AttributeHolder(type, value)); + itemInstance.setAttribute(new AttributeHolder(type, value), true); } player.getInventory().equipItem(itemInstance); diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java index dde2ae8058..dfd8ab322b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java @@ -19,9 +19,10 @@ package handlers.admincommandhandlers; import java.util.logging.Logger; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; +import com.l2jmobius.gameserver.data.xml.impl.MultisellData; import com.l2jmobius.gameserver.handler.IAdminCommandHandler; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -40,7 +41,9 @@ public class AdminShop implements IAdminCommandHandler private static final String[] ADMIN_COMMANDS = { "admin_buy", - "admin_gmshop" + "admin_gmshop", + "admin_multisell", + "admin_exc_multisell" }; @Override @@ -61,6 +64,30 @@ public class AdminShop implements IAdminCommandHandler { AdminHtml.showAdminHtml(activeChar, "gmshops.htm"); } + else if (command.startsWith("admin_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(16).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } + else if (command.toLowerCase().startsWith("admin_exc_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(20).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, true); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } return true; } @@ -82,17 +109,16 @@ public class AdminShop implements IAdminCommandHandler _log.warning("admin buylist failed:" + command); } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); - + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList != null) { - activeChar.sendPacket(new BuyList(buyList, activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(buyList, activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else { _log.warning("no buylist with id:" + val); + activeChar.sendPacket(ActionFailed.STATIC_PACKET); } - activeChar.sendPacket(ActionFailed.STATIC_PACKET); } } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java index cfe7ee4957..d17921338b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java @@ -114,7 +114,6 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%PEACE%", activeChar.isInsideZone(ZoneId.PEACE) ? "YES" : "NO"); adminReply.replace("%PVP%", activeChar.isInsideZone(ZoneId.PVP) ? "YES" : "NO"); adminReply.replace("%SIEGE%", activeChar.isInsideZone(ZoneId.SIEGE) ? "YES" : "NO"); - adminReply.replace("%TOWN%", activeChar.isInsideZone(ZoneId.TOWN) ? "YES" : "NO"); adminReply.replace("%CASTLE%", activeChar.isInsideZone(ZoneId.CASTLE) ? "YES" : "NO"); adminReply.replace("%FORT%", activeChar.isInsideZone(ZoneId.FORT) ? "YES" : "NO"); adminReply.replace("%HQ%", activeChar.isInsideZone(ZoneId.HQ) ? "YES" : "NO"); @@ -128,6 +127,7 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%DANGER%", activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "YES" : "NO"); adminReply.replace("%NOSTORE%", activeChar.isInsideZone(ZoneId.NO_STORE) ? "YES" : "NO"); adminReply.replace("%SCRIPT%", activeChar.isInsideZone(ZoneId.SCRIPT) ? "YES" : "NO"); + adminReply.replace("%TAX%", (activeChar.isInsideZone(ZoneId.TAX) ? "YES" : "NO")); final StringBuilder zones = new StringBuilder(100); for (L2ZoneType zone : ZoneManager.getInstance().getZones(activeChar)) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/bypasshandlers/Wear.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/bypasshandlers/Wear.java index 9291747b2a..40de431ce5 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/bypasshandlers/Wear.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/bypasshandlers/Wear.java @@ -24,7 +24,7 @@ import com.l2jmobius.gameserver.data.xml.impl.BuyListData; import com.l2jmobius.gameserver.handler.IBypassHandler; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.ShopPreviewList; @@ -70,7 +70,7 @@ public class Wear implements IBypassHandler private static void showWearWindow(L2PcInstance player, int val) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/communityboard/HomeBoard.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/communityboard/HomeBoard.java index b39b9f0b38..9f7d9fb2f8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/communityboard/HomeBoard.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/communityboard/HomeBoard.java @@ -154,7 +154,7 @@ public final class HomeBoard implements IParseBoardHandler { final String page = command.replace("_bbssell;", ""); returnHtml = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/Custom/" + page + ".html"); - activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else if (command.startsWith("_bbsteleport")) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/communityboard/RegionBoard.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/communityboard/RegionBoard.java index 7a9b5fd57d..ffb50fbf7b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/communityboard/RegionBoard.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/communityboard/RegionBoard.java @@ -18,6 +18,7 @@ package handlers.communityboard; import com.l2jmobius.gameserver.cache.HtmCache; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.handler.CommunityBoardHandler; import com.l2jmobius.gameserver.handler.IWriteBoardHandler; import com.l2jmobius.gameserver.instancemanager.CastleManager; @@ -64,7 +65,7 @@ public class RegionBoard implements IWriteBoardHandler link = link.replace("%region_name%", String.valueOf(REGIONS[i])); link = link.replace("%region_owning_clan%", (clan != null ? clan.getName() : "NPC")); link = link.replace("%region_owning_clan_alliance%", ((clan != null) && (clan.getAllyName() != null) ? clan.getAllyName() : "")); - link = link.replace("%region_tax_rate%", (castle.getTaxRate() * 100) + "%"); + link = link.replace("%region_tax_rate%", castle.getTaxPercent(TaxType.BUY) + "%"); sb.append(link); } diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java index 9e555bb17c..fb13b89a3e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java @@ -139,7 +139,7 @@ public final class ConvertItem extends AbstractEffect if (elementals != null) { - newItem.setAttribute(elementals); + newItem.setAttribute(elementals, true); } newItem.setEnchantLevel(enchantLevel); player.getInventory().equipItem(newItem); diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/itemhandlers/Seed.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/itemhandlers/Seed.java index b2a011e238..a5c7d19397 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/itemhandlers/Seed.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/handlers/itemhandlers/Seed.java @@ -22,13 +22,13 @@ import com.l2jmobius.Config; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.handler.IItemHandler; import com.l2jmobius.gameserver.instancemanager.CastleManorManager; -import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Seed; import com.l2jmobius.gameserver.model.actor.L2Playable; import com.l2jmobius.gameserver.model.actor.instance.L2ChestInstance; import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.entity.Castle; import com.l2jmobius.gameserver.model.holders.ItemSkillHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -81,7 +81,9 @@ public class Seed implements IItemHandler { return false; } - else if (seed.getCastleId() != MapRegionManager.getInstance().getAreaCastle(playable)) // TODO: replace me with tax zone + + final Castle taxCastle = target.getTaxCastle(); + if ((taxCastle == null) || (seed.getCastleId() != taxCastle.getResidenceId())) { playable.sendPacket(SystemMessageId.THIS_SEED_MAY_NOT_BE_SOWN_HERE); return false; diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/items/15400-15499.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/items/15400-15499.xml index ec80a15ddd..2ba5530041 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/items/15400-15499.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/items/15400-15499.xml @@ -1361,6 +1361,7 @@ + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/buylist.xsd b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/buylist.xsd index e89cbf146d..6e842a25a6 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/buylist.xsd +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/buylist.xsd @@ -30,9 +30,11 @@ + + \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/multisell.xsd index 196695f377..99107d2612 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/multisell.xsd +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/multisell.xsd @@ -22,7 +22,6 @@ - @@ -40,7 +39,8 @@ - + + \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/zones/custom_town.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/zones/custom_town.xml deleted file mode 100644 index 716130acf4..0000000000 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/zones/custom_town.xml +++ /dev/null @@ -1,639 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/zones/tax.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/zones/tax.xml index 7a8eb7d1f9..79393d8e7f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/zones/tax.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/zones/tax.xml @@ -1,6 +1,5 @@ - - + @@ -313,7 +312,7 @@ - + diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/Config.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/Config.java index c4ea987b4d..0dbcc65d18 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/Config.java @@ -237,7 +237,6 @@ public final class Config public static double ALT_GAME_CREATION_XP_RATE; public static double ALT_GAME_CREATION_RARE_XPSP_RATE; public static double ALT_GAME_CREATION_SP_RATE; - public static boolean ALT_BLACKSMITH_USE_RECIPES; public static boolean ALT_CLAN_LEADER_INSTANT_ACTIVATION; public static int ALT_CLAN_JOIN_DAYS; public static int ALT_CLAN_CREATE_DAYS; @@ -1650,7 +1649,6 @@ public final class Config ALT_GAME_CREATION_XP_RATE = Character.getDouble("AltGameCreationXpRate", 1); ALT_GAME_CREATION_SP_RATE = Character.getDouble("AltGameCreationSpRate", 1); ALT_GAME_CREATION_RARE_XPSP_RATE = Character.getDouble("AltGameCreationRareXpSpRate", 2); - ALT_BLACKSMITH_USE_RECIPES = Character.getBoolean("AltBlacksmithUseRecipes", true); ALT_CLAN_LEADER_INSTANT_ACTIVATION = Character.getBoolean("AltClanLeaderInstantActivation", false); ALT_CLAN_JOIN_DAYS = Character.getInt("DaysBeforeJoinAClan", 1); ALT_CLAN_CREATE_DAYS = Character.getInt("DaysBeforeCreateAClan", 10); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java index 8c25ec2846..33e2d0df1d 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java @@ -28,15 +28,14 @@ import java.util.logging.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; /** @@ -47,7 +46,7 @@ public final class BuyListData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(BuyListData.class.getName()); - private final Map _buyLists = new HashMap<>(); + private final Map _buyLists = new HashMap<>(); private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); protected BuyListData() @@ -77,7 +76,7 @@ public final class BuyListData implements IGameXmlReader final int itemId = rs.getInt("item_id"); final long count = rs.getLong("count"); final long nextRestockTime = rs.getLong("next_restock_time"); - final L2BuyList buyList = getBuyList(buyListId); + final ProductList buyList = getBuyList(buyListId); if (buyList == null) { LOGGER.warning("BuyList found in database but not loaded from xml! BuyListId: " + buyListId); @@ -108,71 +107,44 @@ public final class BuyListData implements IGameXmlReader try { final int buyListId = Integer.parseInt(f.getName().replaceAll(".xml", "")); - - for (Node node = doc.getFirstChild(); node != null; node = node.getNextSibling()) + forEach(doc, "list", (list) -> { - if ("list".equalsIgnoreCase(node.getNodeName())) + final int defaultBaseTax = parseInteger(list.getAttributes(), "baseTax", 0); + final ProductList buyList = new ProductList(buyListId); + forEach(list, (node) -> { - final L2BuyList buyList = new L2BuyList(buyListId); - for (Node list_node = node.getFirstChild(); list_node != null; list_node = list_node.getNextSibling()) + switch (node.getNodeName()) { - if ("item".equalsIgnoreCase(list_node.getNodeName())) + case "item": { - int itemId = -1; - long price = -1; - long restockDelay = -1; - long count = -1; - final NamedNodeMap attrs = list_node.getAttributes(); - Node attr = attrs.getNamedItem("id"); - itemId = Integer.parseInt(attr.getNodeValue()); - attr = attrs.getNamedItem("price"); - if (attr != null) - { - price = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("restock_delay"); - if (attr != null) - { - restockDelay = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("count"); - if (attr != null) - { - count = Long.parseLong(attr.getNodeValue()); - } + final NamedNodeMap attrs = node.getAttributes(); + + final int itemId = parseInteger(attrs, "id"); final L2Item item = ItemTable.getInstance().getTemplate(itemId); if (item != null) { - if ((price > -1) && (item.getReferencePrice() > price) && (buyList.getNpcsAllowed() != null)) - { - LOGGER.warning("Item price is too low. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); - LOGGER.warning("Setting price to reference price " + item.getReferencePrice() + " instead of " + price + "."); - buyList.addProduct(new Product(buyList.getListId(), item, item.getReferencePrice(), restockDelay, count)); - } - else - { - buyList.addProduct(new Product(buyList.getListId(), item, price, restockDelay, count)); - } + final long price = parseLong(attrs, "price", -1L); + final long restockDelay = parseLong(attrs, "restock_delay", -1L); + final long count = parseLong(attrs, "count", -1L); + final int baseTax = parseInteger(attrs, "baseTax", defaultBaseTax); + + buyList.addProduct(new Product(buyListId, item, price, restockDelay, count, baseTax)); } else { - LOGGER.warning("Item not found. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); + LOGGER.warning("Item not found. BuyList:" + buyListId + " ItemID:" + itemId + " File:" + f); } + break; } - else if ("npcs".equalsIgnoreCase(list_node.getNodeName())) + case "npcs": { - for (Node npcs_node = list_node.getFirstChild(); npcs_node != null; npcs_node = npcs_node.getNextSibling()) - { - if ("npc".equalsIgnoreCase(npcs_node.getNodeName())) - { - buyList.addAllowedNpc(Integer.parseInt(npcs_node.getTextContent())); - } - } + forEach(node, "npc", (npcNode) -> buyList.addAllowedNpc(Integer.parseInt(npcNode.getTextContent()))); + break; } } - _buyLists.put(buyList.getListId(), buyList); - } - } + }); + _buyLists.put(buyListId, buyList); + }); } catch (Exception e) { @@ -186,7 +158,7 @@ public final class BuyListData implements IGameXmlReader return NUMERIC_FILTER; } - public L2BuyList getBuyList(int listId) + public ProductList getBuyList(int listId) { return _buyLists.get(listId); } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 01bd5c5942..8f4f7463aa 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -18,50 +18,44 @@ package com.l2jmobius.gameserver.data.xml.impl; import java.io.File; import java.io.FileFilter; +import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import org.w3c.dom.DOMException; import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.SpecialItemType; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ListContainer; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.ExPCCafePointInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.MultisellListHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.serverpackets.MultiSellList; -import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; import com.l2jmobius.gameserver.util.Util; public final class MultisellData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(MultisellData.class.getName()); - private final Map _entries = new HashMap<>(); - public static final int PAGE_SIZE = 40; - // Special IDs. - public static final int PC_CAFE_POINTS = -100; - public static final int CLAN_REPUTATION = -200; - public static final int FAME = -300; - public static final int FIELD_CYCLE_POINTS = -400; - public static final int RAIDBOSS_POINTS = -500; - // Misc private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); + private final Map _multisells = new HashMap<>(); + protected MultisellData() { load(); @@ -70,15 +64,14 @@ public final class MultisellData implements IGameXmlReader @Override public void load() { - _entries.clear(); + _multisells.clear(); parseDatapackDirectory("data/multisell", false); if (Config.CUSTOM_MULTISELL_LOAD) { parseDatapackDirectory("data/multisell/custom", false); } - verify(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _entries.size() + " multisell lists."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _multisells.size() + " multisell lists."); } @Override @@ -86,73 +79,88 @@ public final class MultisellData implements IGameXmlReader { try { - final int id = Integer.parseInt(f.getName().replaceAll(".xml", "")); - int entryId = 1; - Node att; - final ListContainer list = new ListContainer(id); - - for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) + forEach(doc, "list", listNode -> { - if ("list".equalsIgnoreCase(n.getNodeName())) + final StatsSet set = new StatsSet(parseAttributes(listNode)); + final int listId = Integer.parseInt(f.getName().substring(0, f.getName().length() - 4)); + final List entries = new ArrayList<>(listNode.getChildNodes().getLength()); + + forEach(listNode, itemNode -> { - list.setApplyTaxes(parseBoolean(n.getAttributes(), "applyTaxes", false)); - list.setIsChanceMultisell(parseBoolean(n.getAttributes(), "isChanceMultisell", false)); - list.setMaintainEnchantment(parseBoolean(n.getAttributes(), "maintainEnchantment", false)); - - att = n.getAttributes().getNamedItem("useRate"); - if (att != null) + if ("item".equalsIgnoreCase(itemNode.getNodeName())) { - try + final List ingredients = new ArrayList<>(1); + final List products = new ArrayList<>(1); + final MultisellEntryHolder entry = new MultisellEntryHolder(ingredients, products); + + for (Node d = itemNode.getFirstChild(); d != null; d = d.getNextSibling()) { - - list.setUseRate(Double.valueOf(att.getNodeValue())); - if (list.getUseRate() <= 1e-6) + if ("ingredient".equalsIgnoreCase(d.getNodeName())) { - throw new NumberFormatException("The value cannot be 0"); // threat 0 as invalid value - } - } - catch (NumberFormatException e) - { - try - { - list.setUseRate(Config.class.getField(att.getNodeValue()).getDouble(Config.class)); - } - catch (Exception e1) - { - LOGGER.warning(e1.getMessage() + doc.getLocalName()); - list.setUseRate(1.0); - } - } - catch (DOMException e) - { - LOGGER.warning(e.getMessage() + doc.getLocalName()); - } - } - - for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) - { - if ("item".equalsIgnoreCase(d.getNodeName())) - { - final Entry e = parseEntry(d, entryId++, list); - list.getEntries().add(e); - } - else if ("npcs".equalsIgnoreCase(d.getNodeName())) - { - for (Node b = d.getFirstChild(); b != null; b = b.getNextSibling()) - { - if ("npc".equalsIgnoreCase(b.getNodeName())) + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final ItemHolder ingredient = new ItemHolder(id, count); + + if (itemExists(ingredient)) { - if (Util.isDigit(b.getTextContent())) + ingredients.add(ingredient); + } + else + { + LOGGER.warning("Invalid ingredient id or count for itemId: " + ingredient.getId() + ", count: " + ingredient.getCount() + " in list: " + listId); + continue; + } + } + else if ("production".equalsIgnoreCase(d.getNodeName())) + { + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count); + + if (itemExists(product)) + { + // Check chance only of items that have set chance. Items without chance (NaN) are used for displaying purposes. + if ((!Double.isNaN(chance) && (chance < 0)) || (chance > 100)) { - list.allowNpc(Integer.parseInt(b.getTextContent())); + LOGGER.warning("Invalid chance for itemId: " + product.getId() + ", count: " + product.getCount() + ", chance: " + chance + " in list: " + listId); + continue; } + + products.add(product); + } + else + { + LOGGER.warning("Invalid product id or count for itemId: " + product.getId() + ", count: " + product.getCount() + " in list: " + listId); + continue; } } } + + final double totalChance = products.stream().filter(i -> !Double.isNaN(i.getChance())).mapToDouble(ItemChanceHolder::getChance).sum(); + if (totalChance > 100) + { + LOGGER.warning("Products' total chance of " + totalChance + "% exceeds 100% for list: " + listId + " at entry " + entries.size() + 1 + "."); + } + + entries.add(entry); } - } - } - _entries.put(id, list); + else if ("npcs".equalsIgnoreCase(itemNode.getNodeName())) + { + // Initialize NPCs with the size of child nodes. + final Set allowNpc = new HashSet<>(itemNode.getChildNodes().getLength()); + forEach(itemNode, n -> "npc".equalsIgnoreCase(n.getNodeName()) && Util.isDigit(n.getTextContent()), n -> allowNpc.add(Integer.parseInt(n.getTextContent()))); + + // Add npcs to stats set. + set.set("allowNpc", allowNpc); + } + }); + + set.set("listId", listId); + set.set("entries", entries); + + _multisells.put(listId, new MultisellListHolder(set)); + }); } catch (Exception e) { @@ -166,44 +174,6 @@ public final class MultisellData implements IGameXmlReader return NUMERIC_FILTER; } - private final Entry parseEntry(Node n, int entryId, ListContainer list) - { - final Node first = n.getFirstChild(); - final Entry entry = new Entry(entryId); - - NamedNodeMap attrs; - Node att; - StatsSet set; - - for (n = first; n != null; n = n.getNextSibling()) - { - if ("ingredient".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addIngredient(new Ingredient(set)); - } - else if ("production".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addProduct(new Ingredient(set)); - } - } - - return entry; - } - /** * This will generate the multisell list for the items.
* There exist various parameters in multisells that affect the way they will appear: @@ -230,38 +200,36 @@ public final class MultisellData implements IGameXmlReader * @param player * @param npc * @param inventoryOnly - * @param productMultiplier * @param ingredientMultiplier + * @param productMultiplier */ - public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double productMultiplier, double ingredientMultiplier) + public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double ingredientMultiplier, double productMultiplier) { - final ListContainer template = _entries.get(listId); + final MultisellListHolder template = _multisells.get(listId); if (template == null) { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find list ID: " + listId + " requested by player: " + player.getName() + ", NPC ID:" + (npc != null ? npc.getId() : 0)); + LOGGER.warning("Can't find list id: " + listId + " requested by player: " + player.getName() + ", npcId: " + (npc != null ? npc.getId() : 0)); return; } - if (!template.isNpcAllowed(-1) && (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly()))) + if (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly())) { - LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); - return; - } - - final PreparedListContainer list = new PreparedListContainer(template, inventoryOnly, player, npc); - - // Pass through this only when multipliers are different from 1 - if ((productMultiplier != 1) || (ingredientMultiplier != 1)) - { - list.getEntries().forEach(entry -> + if (player.isGM()) { - // Math.max used here to avoid dropping count to 0 - entry.getProducts().forEach(product -> product.setItemCount((long) Math.max(product.getItemCount() * productMultiplier, 1))); - - // Math.max used here to avoid dropping count to 0 - entry.getIngredients().forEach(ingredient -> ingredient.setItemCount((long) Math.max(ingredient.getItemCount() * ingredientMultiplier, 1))); - }); + player.sendMessage("Multisell " + listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); + return; + } } + + // Check if ingredient/product multipliers are set, if not, set them to the template value. + ingredientMultiplier = (Double.isNaN(ingredientMultiplier) ? template.getIngredientMultiplier() : ingredientMultiplier); + productMultiplier = (Double.isNaN(productMultiplier) ? template.getProductMultiplier() : productMultiplier); + + final PreparedMultisellListHolder list = new PreparedMultisellListHolder(template, inventoryOnly, player.getInventory(), npc, ingredientMultiplier, productMultiplier); int index = 0; do { @@ -276,172 +244,19 @@ public final class MultisellData implements IGameXmlReader public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly) { - separateAndSend(listId, player, npc, inventoryOnly, 1, 1); + separateAndSend(listId, player, npc, inventoryOnly, Double.NaN, Double.NaN); } - public static boolean hasSpecialIngredient(int id, long amount, L2PcInstance player) + private final boolean itemExists(ItemHolder holder) { - switch (id) + final SpecialItemType specialItem = SpecialItemType.getByClientId(holder.getId()); + if (specialItem != null) { - case PC_CAFE_POINTS: - { - if (player.getPcCafePoints() >= amount) - { - return true; - } - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); - break; - } - case CLAN_REPUTATION: - { - if (player.getClan() == null) - { - player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); - return false; - } - if (!player.isClanLeader()) - { - player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); - return false; - } - if (player.getClan().getReputationScore() < amount) - { - player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); - return false; - } - return true; - } - case FAME: - { - if (player.getFame() < amount) - { - player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); - return false; - } - return true; - } - case RAIDBOSS_POINTS: - { - if (player.getRaidbossPoints() < amount) - { - player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); - return false; - } - return true; - } - } - return false; - } - - public static boolean takeSpecialIngredient(int id, long amount, L2PcInstance player) - { - switch (id) - { - case PC_CAFE_POINTS: - { - final int cost = player.getPcCafePoints() - (int) amount; - player.setPcCafePoints(cost); - final SystemMessage smsgpc = SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_USING_S1_POINT); - smsgpc.addLong((int) amount); - player.sendPacket(smsgpc); - player.sendPacket(new ExPCCafePointInfo(player.getPcCafePoints(), (int) amount, 1)); - return true; - } - case CLAN_REPUTATION: - { - player.getClan().takeReputationScore((int) amount, true); - final SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); - smsg.addLong(amount); - player.sendPacket(smsg); - return true; - } - case FAME: - { - player.setFame(player.getFame() - (int) amount); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - return true; - } - case RAIDBOSS_POINTS: - { - player.setRaidbossPoints(player.getRaidbossPoints() - (int) amount); - player.sendPacket(new UserInfo(player)); - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(amount)); - return true; - } - } - return false; - } - - public static void giveSpecialProduct(int id, long amount, L2PcInstance player) - { - switch (id) - { - case CLAN_REPUTATION: - { - player.getClan().addReputationScore((int) amount, true); - break; - } - case FAME: - { - player.setFame((int) (player.getFame() + amount)); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - break; - } - case RAIDBOSS_POINTS: - { - player.increaseRaidbossPoints((int) amount); - player.sendPacket(new UserInfo(player)); - break; - } - } - } - - private final void verify() - { - ListContainer list; - final Iterator iter = _entries.values().iterator(); - while (iter.hasNext()) - { - list = iter.next(); - - for (Entry ent : list.getEntries()) - { - for (Ingredient ing : ent.getIngredients()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find ingredient with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - for (Ingredient ing : ent.getProducts()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find product with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - } - } - } - - private final boolean verifyIngredient(Ingredient ing) - { - switch (ing.getItemId()) - { - case PC_CAFE_POINTS: - case CLAN_REPUTATION: - case FAME: - case RAIDBOSS_POINTS: - { - return true; - } - default: - { - return ing.getTemplate() != null; - } + return true; } + + final L2Item template = ItemTable.getInstance().getTemplate(holder.getId()); + return (template != null) && (template.isStackable() ? (holder.getCount() >= 1) : (holder.getCount() == 1)); } public static MultisellData getInstance() diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java index 3706b281b4..bffa2b107c 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java @@ -83,12 +83,12 @@ public class OptionData implements IGameXmlReader } case "active_skill": { - option.setActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "passive_skill": { - option.setPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "attack_skill": diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/datatables/AugmentationData.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/datatables/AugmentationData.java index 82a79af4c1..8582c38326 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/datatables/AugmentationData.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/datatables/AugmentationData.java @@ -33,8 +33,7 @@ import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.L2Augmentation; -import com.l2jmobius.gameserver.model.holders.SkillHolder; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.options.Options; @@ -86,12 +85,11 @@ public class AugmentationData private final List> _redSkills = new ArrayList<>(); private final List> _yellowSkills = new ArrayList<>(); + private final Map _augmentations = new HashMap<>(); private final List _augmentationChances = new ArrayList<>(); private final List _augmentationChancesAcc = new ArrayList<>(); private final List _augmentationStones = new ArrayList<>(); - private final Map _allSkills = new HashMap<>(); - protected AugmentationData() { for (int i = 0; i < 10; i++) @@ -297,8 +295,6 @@ public class AugmentationData { _redSkills.get(k).add(augmentationId); } - - _allSkills.put(augmentationId, new SkillHolder(skillId, skillLvL)); } } } @@ -520,6 +516,11 @@ public class AugmentationData } } + public Augmentation getAugmentation(int id) + { + return _augmentations.computeIfAbsent(id, k -> new Augmentation(k)); + } + /** * Generate a new random augmentation * @param lifeStoneLevel @@ -529,7 +530,7 @@ public class AugmentationData * @param targetItem * @return */ - public L2Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) + public Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) { switch (bodyPart) { @@ -546,7 +547,7 @@ public class AugmentationData } } - private L2Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) + private Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) { int stat12 = 0; int stat34 = 0; @@ -739,7 +740,8 @@ public class AugmentationData } } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } boolean generateSkill = false; boolean generateGlow = false; @@ -916,10 +918,10 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; resultColor=" + resultColor + "; level=" + lifeStoneLevel + "; grade=" + lifeStoneGrade); } - return new L2Augmentation(((stat34 << 16) + stat12)); + return new Augmentation(((stat34 << 16) + stat12)); } - private L2Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) + private Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) { int stat12 = 0; int stat34 = 0; @@ -987,7 +989,8 @@ public class AugmentationData } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } lifeStoneLevel = Math.min(lifeStoneLevel, 9); int base = 0; @@ -1031,7 +1034,7 @@ public class AugmentationData op = OptionData.getInstance().getOptions(stat34); } - if ((op == null) || (!op.hasActiveSkill() && !op.hasPassiveSkill() && !op.hasActivationSkills())) + if ((op == null) || (!op.hasActiveSkills() && !op.hasPassiveSkills() && !op.hasActivationSkills())) { // second augmentation (stats) // calculating any different from stat12 value inside sub-block @@ -1048,7 +1051,8 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Accessory augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; level=" + lifeStoneLevel); } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } public boolean isAugmentaionStoneValid(int stoneId) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java index 5294f6f231..6a3e232a26 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java @@ -74,7 +74,6 @@ public final class MapRegionManager implements IGameXmlReader String name; String town; int locId; - int castle; int bbs; for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) @@ -89,10 +88,9 @@ public final class MapRegionManager implements IGameXmlReader name = attrs.getNamedItem("name").getNodeValue(); town = attrs.getNamedItem("town").getNodeValue(); locId = parseInteger(attrs, "locId"); - castle = parseInteger(attrs, "castle"); bbs = parseInteger(attrs, "bbs"); - final L2MapRegion region = new L2MapRegion(name, town, locId, castle, bbs); + final L2MapRegion region = new L2MapRegion(name, town, locId, bbs); for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) { attrs = c.getAttributes(); @@ -224,22 +222,6 @@ public final class MapRegionManager implements IGameXmlReader return region.getTown(); } - /** - * @param activeChar - * @return - */ - public int getAreaCastle(L2Character activeChar) - { - final L2MapRegion region = getMapRegion(activeChar); - - if (region == null) - { - return 0; - } - - return region.getCastle(); - } - /** * @param activeChar * @param teleportWhere diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/TownManager.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/TownManager.java deleted file mode 100644 index b0543eb11a..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/instancemanager/TownManager.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.instancemanager; - -import com.l2jmobius.gameserver.model.entity.Castle; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; - -public final class TownManager -{ - public static int getTownCastle(int townId) - { - switch (townId) - { - case 912: - { - return 1; - } - case 916: - { - return 2; - } - case 918: - { - return 3; - } - case 922: - { - return 4; - } - case 924: - { - return 5; - } - case 926: - { - return 6; - } - case 1538: - { - return 7; - } - case 1537: - { - return 8; - } - case 1714: - { - return 9; - } - default: - { - return 0; - } - } - } - - public static boolean townHasCastleInSiege(int townId) - { - final int castleId = getTownCastle(townId); - if (castleId > 0) - { - final Castle castle = CastleManager.getInstance().getCastleById(castleId); - if (castle != null) - { - return castle.getSiege().isInProgress(); - } - } - return false; - } - - public static boolean townHasCastleInSiege(int x, int y) - { - return townHasCastleInSiege(MapRegionManager.getInstance().getMapRegionLocId(x, y)); - } - - public static L2TownZone getTown(int townId) - { - for (L2TownZone temp : ZoneManager.getInstance().getAllZones(L2TownZone.class)) - { - if (temp.getTownId() == townId) - { - return temp; - } - } - return null; - } - - /** - * Returns the town at that position (if any) - * @param x - * @param y - * @param z - * @return - */ - public static L2TownZone getTown(int x, int y, int z) - { - for (L2ZoneType temp : ZoneManager.getInstance().getZones(x, y, z)) - { - if (temp instanceof L2TownZone) - { - return (L2TownZone) temp; - } - } - return null; - } -} diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2Augmentation.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/Augmentation.java similarity index 68% rename from L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2Augmentation.java rename to L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/Augmentation.java index 65ff4312c1..9a0e2b459d 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2Augmentation.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/Augmentation.java @@ -1,107 +1,95 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.options.Options; - -/** - * Used to store an augmentation and its bonuses. - * @author durgus, UnAfraid - */ -public final class L2Augmentation -{ - private static final Logger LOGGER = Logger.getLogger(L2Augmentation.class.getName()); - private final List _options = new ArrayList<>(); - private boolean _active; - private final int _id; - - public L2Augmentation(int id) - { - _id = id; - _active = false; - final int[] stats = new int[2]; - stats[0] = 0x0000FFFF & id; - stats[1] = (id >> 16); - - for (int stat : stats) - { - final Options op = OptionData.getInstance().getOptions(stat); - if (op != null) - { - _options.add(op); - } - else - { - LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stat); - } - } - } - - /** - * Get the augmentation "id" used in serverpackets. - * @return augmentationId - */ - public int getId() - { - return _id; - } - - public List getOptions() - { - return _options; - } - - public void applyBonus(L2PcInstance player) - { - // make sure the bonuses are not applied twice.. - if (_active) - { - return; - } - - for (Options op : _options) - { - op.apply(player); - } - - player.getStat().recalculateStats(true); - _active = true; - } - - public void removeBonus(L2PcInstance player) - { - // make sure the bonuses are not removed twice - if (!_active) - { - return; - } - - for (Options op : _options) - { - op.remove(player); - } - - player.getStat().recalculateStats(true); - _active = false; - } -} +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model; + +import java.util.logging.Logger; + +import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.options.Options; + +/** + * Used to store an augmentation and its bonuses. + * @author durgus, UnAfraid + */ +public final class Augmentation +{ + private static final Logger LOGGER = Logger.getLogger(Augmentation.class.getName()); + private final Options[] _options; + private final int _id; + + public Augmentation(int id) + { + _id = id; + final int[] stats = new int[2]; + stats[0] = 0x0000FFFF & id; + stats[1] = (id >> 16); + _options = new Options[stats.length]; + + for (int i = 0; i < stats.length; i++) + { + final Options op = OptionData.getInstance().getOptions(stats[i]); + if (op != null) + { + _options[i] = op; + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stats[i]); + } + } + } + + /** + * Get the augmentation "id" used in serverpackets. + * @return augmentationId + */ + public int getId() + { + return _id; + } + + public Options[] getOptions() + { + return _options; + } + + public int getOptionId(int index) + { + if ((index >= 0) && (index < _options.length) && (_options[index] != null)) + { + return _options[index].getId(); + } + return 0; + } + + public void applyBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.apply(player); + } + } + + public void removeBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.remove(player); + } + } +} diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java index 00e25a5f8f..ec138037fb 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java @@ -50,7 +50,7 @@ public class CharSelectInfoPackage private int _reputation = 0; private int _pkKills = 0; private int _pvpKills = 0; - private int _augmentationId = 0; + private Augmentation _augmentation; private int _x = 0; private int _y = 0; private int _z = 0; @@ -336,14 +336,14 @@ public class CharSelectInfoPackage return _reputation; } - public void setAugmentationId(int augmentationId) + public void setAugmentation(Augmentation augmentation) { - _augmentationId = augmentationId; + _augmentation = augmentation; } - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } public void setPkKills(int PkKills) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/ItemInfo.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/ItemInfo.java index e70c655c35..0964b1caa1 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/ItemInfo.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/ItemInfo.java @@ -36,10 +36,10 @@ public class ItemInfo private L2Item _item; /** The level of enchant on the L2ItemInstance */ - private int _enchant; + private int _enchantLevel; /** The augmentation of the item */ - private int _augmentation; + private Augmentation _augmentation; /** The quantity of L2ItemInstance */ private long _count; @@ -65,7 +65,7 @@ public class ItemInfo private byte _elemAtkType = -2; private int _elemAtkPower = 0; - private final int[] _elemDefAttr = + private final int[] _attributeDefence = { 0, 0, @@ -94,17 +94,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentation().getAugmentationId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -145,7 +138,7 @@ public class ItemInfo _elemAtkPower = item.getAttackAttributePower(); for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) { - _elemDefAttr[type.getClientId()] = item.getDefenceAttribute(type); + _attributeDefence[type.getClientId()] = item.getDefenceAttribute(type); } _option = item.getEnchantOptions(); _visualId = item.getVisualId(); @@ -172,10 +165,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchant(); + _enchantLevel = item.getEnchant(); // Get the augmentation bonus - _augmentation = item.getAugmentId(); + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -200,7 +193,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); @@ -221,10 +214,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = 0; + _enchantLevel = 0; - // Get the augmentation boni - _augmentation = 0; + // Get the augmentation bonus + _augmentation = null; // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -260,17 +253,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentationId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -291,7 +277,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); } @@ -306,26 +292,16 @@ public class ItemInfo return _item; } - public int getEnchant() + public int getEnchantLevel() { - return _enchant; + return _enchantLevel; } - public int getAugmentationBonus() + public Augmentation getAugmentation() { return _augmentation; } - public int get1stAugmentationId() - { - return 0x0000FFFF & getAugmentationBonus(); - } - - public int get2ndAugmentationId() - { - return getAugmentationBonus() >> 16; - } - public long getCount() { return _count; @@ -381,9 +357,9 @@ public class ItemInfo return _elemAtkPower; } - public int getElementDefAttr(byte i) + public int getAttributeDefence(AttributeType attribute) { - return _elemDefAttr[i]; + return _attributeDefence[attribute.getClientId()]; } public int[] getEnchantOptions() diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2Augmentation.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2Augmentation.java deleted file mode 100644 index 57895fc5c9..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2Augmentation.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.options.Options; - -/** - * Used to store an augmentation and its bonuses. - * @author durgus, UnAfraid - */ -public final class L2Augmentation -{ - private int _effectsId = 0; - private AugmentationStatBoni _boni = null; - - public L2Augmentation(int effects) - { - _effectsId = effects; - _boni = new AugmentationStatBoni(_effectsId); - } - - public static class AugmentationStatBoni - { - private static final Logger _log = Logger.getLogger(AugmentationStatBoni.class.getName()); - private final List _options = new ArrayList<>(); - private boolean _active; - - public AugmentationStatBoni(int augmentationId) - { - _active = false; - int[] stats = new int[2]; - stats[0] = 0x0000FFFF & augmentationId; - stats[1] = (augmentationId >> 16); - - for (int stat : stats) - { - Options op = OptionData.getInstance().getOptions(stat); - if (op != null) - { - _options.add(op); - } - else - { - _log.warning(getClass().getSimpleName() + ": Couldn't find option: " + stat); - } - } - } - - public void applyBonus(L2PcInstance player) - { - // make sure the bonuses are not applied twice.. - if (_active) - { - return; - } - - for (Options op : _options) - { - op.apply(player); - } - - _active = true; - } - - public void removeBonus(L2PcInstance player) - { - // make sure the bonuses are not removed twice - if (!_active) - { - return; - } - - for (Options op : _options) - { - op.remove(player); - } - - _active = false; - } - } - - public int getAttributes() - { - return _effectsId; - } - - /** - * Get the augmentation "id" used in serverpackets. - * @return augmentationId - */ - public int getAugmentationId() - { - return _effectsId; - } - - /** - * Applies the bonuses to the player. - * @param player - */ - public void applyBonus(L2PcInstance player) - { - _boni.applyBonus(player); - } - - /** - * Removes the augmentation bonuses from the player. - * @param player - */ - public void removeBonus(L2PcInstance player) - { - _boni.removeBonus(player); - } -} diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2MapRegion.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2MapRegion.java index 1fc3170544..bf0bb6353b 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2MapRegion.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/L2MapRegion.java @@ -33,7 +33,6 @@ public class L2MapRegion private final String _name; private final String _town; private final int _locId; - private final int _castle; private final int _bbs; private List _maps = null; @@ -44,12 +43,11 @@ public class L2MapRegion private final Map _bannedRace = new HashMap<>(); - public L2MapRegion(String name, String town, int locId, int castle, int bbs) + public L2MapRegion(String name, String town, int locId, int bbs) { _name = name; _town = town; _locId = locId; - _castle = castle; _bbs = bbs; } @@ -68,11 +66,6 @@ public class L2MapRegion return _locId; } - public final int getCastle() - { - return _castle; - } - public final int getBbs() { return _bbs; diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/StatsSet.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/StatsSet.java index 8bd7bed637..67277686c3 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/StatsSet.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/StatsSet.java @@ -711,6 +711,20 @@ public class StatsSet implements IParserAdvUtils return (A) obj; } + @SuppressWarnings("unchecked") + public final A getObject(String name, Class type, A defaultValue) + { + Objects.requireNonNull(name); + Objects.requireNonNull(type); + final Object obj = _set.get(name); + if ((obj == null) || !type.isAssignableFrom(obj.getClass())) + { + return defaultValue; + } + + return (A) obj; + } + public SkillHolder getSkillHolder(String key) { Objects.requireNonNull(key); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/TradeItem.java index caa6c60b73..ca6fe91cd1 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -46,7 +46,7 @@ public class TradeItem }; private final int[] _enchantOptions; private int _visualId; - private int _augmentId; + private Augmentation _augmentation; public TradeItem(L2ItemInstance item, long count, long price) { @@ -67,7 +67,7 @@ public class TradeItem } _enchantOptions = item.getEnchantOptions(); _visualId = item.getVisualId(); - _augmentId = item.isAugmented() ? item.getAugmentation().getAugmentationId() : 0; + _augmentation = item.getAugmentation(); } public TradeItem(L2Item item, long count, long price) @@ -194,9 +194,9 @@ public class TradeItem return _enchantOptions; } - public int getAugmentId() + public Augmentation getAugmentation() { - return _augmentId; + return _augmentation; } public int getVisualId() diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/TradeList.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/TradeList.java index 762195553a..29362b8549 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/TradeList.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/TradeList.java @@ -323,6 +323,12 @@ public class TradeList return null; } + if (count < 0) + { + _log.warning(_owner.getName() + ": Attempt to remove " + count + " items from TradeList!"); + return null; + } + for (TradeItem titem : _items) { if ((titem.getObjectId() == objectId) || (titem.getItem().getId() == itemId)) @@ -881,10 +887,10 @@ public class TradeList /** * Sell items to this PrivateStore list * @param player - * @param items + * @param requestedItems * @return : boolean true if success */ - public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] items) + public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] requestedItems) { if (_locked) { @@ -907,12 +913,14 @@ public class TradeList long totalPrice = 0; - for (ItemRequest item : items) + final TradeItem[] sellerItems = _items.toArray(new TradeItem[0]); + + for (ItemRequest item : requestedItems) { // searching item in tradelist using itemId boolean found = false; - for (TradeItem ti : _items) + for (TradeItem ti : sellerItems) { if (ti.getItem().getId() == item.getItemId()) { @@ -956,8 +964,19 @@ public class TradeList continue; } + if ((item.getObjectId() < 1) || (item.getObjectId() > sellerItems.length)) + { + continue; + } + + final TradeItem tradeItem = sellerItems[item.getObjectId() - 1]; + if ((tradeItem == null) || (tradeItem.getItem().getId() != item.getItemId())) + { + continue; + } + // Check if requested item is available for manipulation - int objectId = item.getObjectId(); + int objectId = tradeItem.getObjectId(); L2ItemInstance oldItem = player.checkItemManipulation(objectId, item.getCount(), "sell"); // private store - buy use same objectId for buying several non-stackable items if (oldItem == null) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Npc.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Npc.java index 4802655840..ef86629ade 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Npc.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/L2Npc.java @@ -34,6 +34,7 @@ import com.l2jmobius.gameserver.enums.MpRewardAffectType; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.ShotType; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.enums.Team; import com.l2jmobius.gameserver.enums.UserInfoType; import com.l2jmobius.gameserver.handler.BypassHandler; @@ -42,7 +43,6 @@ import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager.DBStatusType; import com.l2jmobius.gameserver.instancemanager.FortManager; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.L2Object; @@ -83,6 +83,7 @@ import com.l2jmobius.gameserver.model.spawns.NpcSpawnTemplate; import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.variables.NpcVariables; import com.l2jmobius.gameserver.model.zone.ZoneId; +import com.l2jmobius.gameserver.model.zone.type.L2TaxZone; import com.l2jmobius.gameserver.network.NpcStringId; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; @@ -155,6 +156,9 @@ public class L2Npc extends L2Character private StatsSet _params; private DBSpawnManager.DBStatusType _raidStatus; + /** Contains information about local tax payments. */ + private L2TaxZone _taxZone = null; + /** * Constructor of L2NpcInstance (use L2Character constructor).
* Actions: @@ -520,6 +524,48 @@ public class L2Npc extends L2Character return true; } + /** + * Set another tax zone which will be used for tax payments. + * @param zone newly entered tax zone + */ + public final void setTaxZone(L2TaxZone zone) + { + _taxZone = ((zone != null) && !isInInstance()) ? zone : null; + } + + /** + * Gets castle for tax payments. + * @return instance of {@link Castle} when NPC is inside {@link L2TaxZone} otherwise {@code null} + */ + public final Castle getTaxCastle() + { + return (_taxZone != null) ? _taxZone.getCastle() : null; + } + + /** + * Gets castle tax rate + * @param type type of tax + * @return tax rate when NPC is inside tax zone otherwise {@code 0} + */ + public final double getCastleTaxRate(TaxType type) + { + final Castle castle = getTaxCastle(); + return (castle != null) ? (castle.getTaxPercent(type) / 100.0) : 0; + } + + /** + * Increase castle vault by specified tax amount. + * @param amount tax amount + */ + public final void handleTaxPayment(long amount) + { + final Castle taxCastle = getTaxCastle(); + if (taxCastle != null) + { + taxCastle.addToTreasury(amount); + } + } + /** * @return the nearest L2Castle this L2NpcInstance belongs to. Otherwise null. */ @@ -561,11 +607,6 @@ public class L2Npc extends L2Character return FortManager.getInstance().findNearestFort(this, maxDistance); } - public final boolean isInTown() - { - return TownManager.getTown(getX(), getY(), getZ()) != null; - } - /** * Open a quest or chat window on client with the text of the L2NpcInstance in function of the command.
* Example of use : @@ -1064,14 +1105,9 @@ public class L2Npc extends L2Character WalkingManager.getInstance().onSpawn(this); } - // Display clan flag - if (isInsideZone(ZoneId.TOWN) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) + if (isInsideZone(ZoneId.TAX) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) { - final int townId = TownManager.getTown(getX(), getY(), getZ()).getTownId(); - if ((townId != 33) && (townId != 22)) - { - setClanId(getCastle().getOwnerId()); - } + setClanId(getCastle().getOwnerId()); } } @@ -1080,12 +1116,12 @@ public class L2Npc extends L2Character */ public void onRespawn() { - // Stop all effects and recalculate stats without broadcasting. - getEffectList().stopAllEffects(false); - // Make it alive setIsDead(false); + // Stop all effects and recalculate stats without broadcasting. + getEffectList().stopAllEffects(false); + // Reset decay info setDecayed(false); @@ -1832,11 +1868,17 @@ public class L2Npc extends L2Character initSeenCreatures(getTemplate().getAggroRange()); } + /** + * @return the NpcStringId for name + */ public NpcStringId getNameString() { return _nameString; } + /** + * @return the NpcStringId for title + */ public NpcStringId getTitleString() { return _titleString; diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java index b48afd7f29..71096be532 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java @@ -21,7 +21,7 @@ import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -52,8 +52,7 @@ public class L2MerchantInstance extends L2NpcInstance @Override public String getHtmlPath(int npcId, int val) { - String pom = ""; - + String pom; if (val == 0) { pom = "" + npcId; @@ -62,7 +61,6 @@ public class L2MerchantInstance extends L2NpcInstance { pom = npcId + "-" + val; } - return "data/html/merchant/" + pom + ".htm"; } @@ -71,9 +69,9 @@ public class L2MerchantInstance extends L2NpcInstance showBuyWindow(player, val, true); } - public final void showBuyWindow(L2PcInstance player, int val, boolean applyTax) + public final void showBuyWindow(L2PcInstance player, int val, boolean applyCastleTax) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); @@ -90,23 +88,7 @@ public class L2MerchantInstance extends L2NpcInstance player.setInventoryBlockingStatus(true); - player.sendPacket(new BuyList(buyList, player.getAdena(), (applyTax) ? getTotalTaxRate(TaxType.BUY) : 0)); - player.sendPacket(new ExBuySellList(player, false, (applyTax) ? getTotalTaxRate(TaxType.SELL) : 0)); - player.sendPacket(ActionFailed.STATIC_PACKET); - } - - public boolean hasCastle() - { - return getCastle() != null; - } - - public int getTotalTax(TaxType taxType) - { - return hasCastle() ? getCastle().getTaxPercent(taxType) : 0; - } - - public double getTotalTaxRate(TaxType taxType) - { - return getTotalTax(taxType) / 100.0; + player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0)); + player.sendPacket(new ExBuySellList(player, false, (applyCastleTax) ? getCastleTaxRate(TaxType.SELL) : 0)); } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java index 3201c86040..8da3ab647e 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java @@ -162,7 +162,6 @@ import com.l2jmobius.gameserver.model.actor.stat.PcStat; import com.l2jmobius.gameserver.model.actor.status.PcStatus; import com.l2jmobius.gameserver.model.actor.tasks.player.DismountTask; import com.l2jmobius.gameserver.model.actor.tasks.player.FameTask; -import com.l2jmobius.gameserver.model.actor.tasks.player.GameGuardCheckTask; import com.l2jmobius.gameserver.model.actor.tasks.player.HennaDurationTask; import com.l2jmobius.gameserver.model.actor.tasks.player.InventoryEnableTask; import com.l2jmobius.gameserver.model.actor.tasks.player.PetFeedTask; @@ -212,6 +211,7 @@ import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerSubCh import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.model.holders.MovieHolder; import com.l2jmobius.gameserver.model.holders.PlayerEventHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import com.l2jmobius.gameserver.model.holders.SellBuffHolder; import com.l2jmobius.gameserver.model.holders.SkillUseHolder; import com.l2jmobius.gameserver.model.holders.TrainingHolder; @@ -235,7 +235,6 @@ import com.l2jmobius.gameserver.model.items.type.ArmorType; import com.l2jmobius.gameserver.model.items.type.EtcItemType; import com.l2jmobius.gameserver.model.items.type.WeaponType; import com.l2jmobius.gameserver.model.matching.MatchingRoom; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameTask; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; @@ -289,7 +288,6 @@ import com.l2jmobius.gameserver.network.serverpackets.ExUseSharedGroupItem; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight; -import com.l2jmobius.gameserver.network.serverpackets.GameGuardQuery; import com.l2jmobius.gameserver.network.serverpackets.GetOnVehicle; import com.l2jmobius.gameserver.network.serverpackets.HennaInfo; import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -560,7 +558,7 @@ public final class L2PcInstance extends L2Playable private TradeList _buyList; // Multisell - private PreparedListContainer _currentMultiSell = null; + private PreparedMultisellListHolder _currentMultiSell = null; private boolean _noble = false; private boolean _hero = false; @@ -4335,6 +4333,8 @@ public final class L2PcInstance extends L2Playable return getClan().getAllyCrestId(); } + //@formatter:off + /* public void queryGameGuard() { if (getClient() != null) @@ -4344,9 +4344,10 @@ public final class L2PcInstance extends L2Playable } if (Config.GAMEGUARD_ENFORCE) { - ThreadPoolManager.schedule(new GameGuardCheckTask(this), 30 * 1000); + ThreadPoolManager.scheduleGeneral(new GameGuardCheckTask(this), 30 * 1000); } - } + }*/ + //@formatter:on /** * Send a Server->Client packet StatusUpdate to the L2PcInstance. @@ -4711,12 +4712,12 @@ public final class L2PcInstance extends L2Playable } } - public final PreparedListContainer getMultiSell() + public final PreparedMultisellListHolder getMultiSell() { return _currentMultiSell; } - public final void setMultiSell(PreparedListContainer list) + public final void setMultiSell(PreparedMultisellListHolder list) { _currentMultiSell = list; } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/Product.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/Product.java index 10242424c7..0da19f8ec7 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/Product.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/Product.java @@ -25,9 +25,11 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; +import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.type.EtcItemType; /** * @author NosBit @@ -41,28 +43,25 @@ public final class Product private final long _price; private final long _restockDelay; private final long _maxCount; + private final double _baseTax; private AtomicLong _count = null; private ScheduledFuture _restockTask = null; - public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount) + public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount, int baseTax) { Objects.requireNonNull(item); _buyListId = buyListId; _item = item; - _price = price; + _price = (price < 0) ? item.getReferencePrice() : price; _restockDelay = restockDelay * 60000; _maxCount = maxCount; + _baseTax = baseTax / 100.0; if (hasLimitedStock()) { _count = new AtomicLong(maxCount); } } - public int getBuyListId() - { - return _buyListId; - } - public L2Item getItem() { return _item; @@ -75,11 +74,17 @@ public final class Product public long getPrice() { - if (_price < 0) + long price = _price; + if (_item.getItemType().equals(EtcItemType.CASTLE_GUARD)) { - return getItem().getReferencePrice(); + price *= Config.RATE_SIEGE_GUARDS_PRICE; } - return _price; + return price; + } + + public double getBaseTaxRate() + { + return _baseTax; } public long getRestockDelay() @@ -155,7 +160,7 @@ public final class Product try (Connection con = DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("INSERT INTO `buylists`(`buylist_id`, `item_id`, `count`, `next_restock_time`) VALUES(?, ?, ?, ?) ON DUPLICATE KEY UPDATE `count` = ?, `next_restock_time` = ?")) { - statement.setInt(1, getBuyListId()); + statement.setInt(1, _buyListId); statement.setInt(2, getItemId()); statement.setLong(3, getCount()); statement.setLong(5, getCount()); @@ -174,7 +179,7 @@ public final class Product } catch (Exception e) { - _log.log(Level.WARNING, "Failed to save Product buylist_id:" + getBuyListId() + " item_id:" + getItemId(), e); + _log.log(Level.WARNING, "Failed to save Product buylist_id:" + _buyListId + " item_id:" + getItemId(), e); } } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/ProductList.java similarity index 88% rename from L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java rename to L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/ProductList.java index 3a2f60297b..884bd110a6 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/buylist/ProductList.java @@ -25,13 +25,13 @@ import java.util.Set; /** * @author NosBit */ -public final class L2BuyList +public final class ProductList { private final int _listId; private final Map _products = new LinkedHashMap<>(); private Set _allowedNpcs = null; - public L2BuyList(int listId) + public ProductList(int listId) { _listId = listId; } @@ -70,8 +70,8 @@ public final class L2BuyList return (_allowedNpcs != null) && _allowedNpcs.contains(npcId); } - public Set getNpcsAllowed() - { - return _allowedNpcs; - } + //public Set getNpcsAllowed() + //{ + // return _allowedNpcs; + //} } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/entity/Castle.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/entity/Castle.java index b657df5013..f1aa77737c 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/entity/Castle.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/entity/Castle.java @@ -78,7 +78,6 @@ public final class Castle extends AbstractResidence private boolean _isTimeRegistrationOver = true; // true if Castle Lords set the time, or 24h is elapsed after the siege private Calendar _siegeTimeRegistrationEndDate; // last siege end date + 1 day private CastleSide _castleSide = null; - private double _taxRate; private long _treasury = 0; private boolean _showNpcCrest = false; private L2SiegeZone _zone = null; @@ -301,7 +300,7 @@ public final class Castle extends AbstractResidence final Castle rune = CastleManager.getInstance().getCastle("rune"); if (rune != null) { - final long runeTax = (long) (amount * rune.getTaxRate()); + final long runeTax = (long) (amount * rune.getTaxRate(TaxType.BUY)); if (rune.getOwnerId() > 0) { rune.addToTreasury(runeTax); @@ -319,7 +318,7 @@ public final class Castle extends AbstractResidence final Castle aden = CastleManager.getInstance().getCastle("aden"); if (aden != null) { - final long adenTax = (long) (amount * aden.getTaxRate()); // Find out what Aden gets from the current castle instance's income + final long adenTax = (long) (amount * aden.getTaxRate(TaxType.BUY)); // Find out what Aden gets from the current castle instance's income if (aden.getOwnerId() > 0) { aden.addToTreasury(adenTax); // Only bother to really add the tax to the treasury if not npc owned @@ -673,7 +672,6 @@ public final class Castle extends AbstractResidence } } - setTaxRate(getTaxPercent(TaxType.BUY) / 100); ps2.setInt(1, getResidenceId()); try (ResultSet rs = ps2.executeQuery()) { @@ -980,14 +978,9 @@ public final class Castle extends AbstractResidence return taxPercent; } - public void setTaxRate(double taxRate) + public final double getTaxRate(TaxType taxType) { - _taxRate = taxRate; - } - - public final double getTaxRate() - { - return _taxRate; + return getTaxPercent(taxType) / 100.0; } public final long getTreasury() @@ -1229,7 +1222,6 @@ public final class Castle extends AbstractResidence _log.log(Level.WARNING, e.getMessage(), e); } _castleSide = side; - setTaxRate(getTaxPercent(TaxType.BUY) / 100); Broadcast.toAllOnlinePlayers(new ExCastleState(this)); spawnSideNpcs(); } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/events/AbstractScript.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/events/AbstractScript.java index e7e77b497a..fac1d64c29 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/events/AbstractScript.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/events/AbstractScript.java @@ -2700,7 +2700,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime // set enchant level for item if that item is not adena if ((attributeType != null) && (attributeValue > 0)) { - item.setAttribute(new AttributeHolder(attributeType, attributeValue)); + item.setAttribute(new AttributeHolder(attributeType, attributeValue), true); if (item.isEquipped()) { // Recalculate all stats diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java index 09f3f798a1..0c4c87491d 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java @@ -16,7 +16,7 @@ */ package com.l2jmobius.gameserver.model.events.impl.character.player; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.events.EventType; import com.l2jmobius.gameserver.model.events.impl.IBaseEvent; @@ -29,10 +29,10 @@ public class OnPlayerAugment implements IBaseEvent { private final L2PcInstance _activeChar; private final L2ItemInstance _item; - private final L2Augmentation _augmentation; + private final Augmentation _augmentation; private final boolean _isAugment; // true = is being augmented // false = augment is being removed - public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, L2Augmentation augment, boolean isAugment) + public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, Augmentation augment, boolean isAugment) { _activeChar = activeChar; _item = item; @@ -50,7 +50,7 @@ public class OnPlayerAugment implements IBaseEvent return _item; } - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java index 5ca4c5c7af..5a1e474b7f 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java @@ -16,6 +16,10 @@ */ package com.l2jmobius.gameserver.model.holders; +import java.util.List; + +import com.l2jmobius.commons.util.Rnd; + /** * A DTO for items; contains item ID, count and chance.
* Complemented by {@link QuestItemHolder}. @@ -45,6 +49,34 @@ public class ItemChanceHolder extends ItemHolder return _chance; } + /** + * Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected. + * @param holders list of holders to calculate chance from. + * @return {@code ItemChanceHolder} of the successful random roll or {@code null} if there was no lucky holder selected. + */ + public static ItemChanceHolder getRandomHolder(List holders) + { + double itemRandom = 100 * Rnd.nextDouble(); + + for (ItemChanceHolder holder : holders) + { + // Any mathmatical expression including NaN will result in either NaN or 0 of converted to something other than double. + // We would usually want to skip calculating any holders that include NaN as a chance, because that ruins the overall process. + if (!Double.isNaN(holder.getChance())) + { + // Calculate chance + if (holder.getChance() > itemRandom) + { + return holder; + } + + itemRandom -= holder.getChance(); + } + } + + return null; + } + @Override public String toString() { diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java new file mode 100644 index 0000000000..68a6ee23b1 --- /dev/null +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java @@ -0,0 +1,56 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.items.L2Item; + +/** + * @author Nik + */ +public class MultisellEntryHolder +{ + private final boolean _stackable; + private final List _ingredients; + private final List _products; + + public MultisellEntryHolder(List ingredients, List products) + { + _ingredients = Collections.unmodifiableList(ingredients); + _products = Collections.unmodifiableList(products); + _stackable = products.stream().map(i -> ItemTable.getInstance().getTemplate(i.getId())).filter(Objects::nonNull).allMatch(L2Item::isStackable); + } + + public final List getIngredients() + { + return _ingredients; + } + + public final List getProducts() + { + return _products; + } + + public final boolean isStackable() + { + return _stackable; + } +} \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java new file mode 100644 index 0000000000..df7ddfa43d --- /dev/null +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java @@ -0,0 +1,112 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.interfaces.IIdentifiable; + +/** + * A static list container of all multisell entries of a given list. + * @author Nik + */ +public class MultisellListHolder implements IIdentifiable +{ + private final int _listId; + private final boolean _isChanceMultisell; + private final boolean _applyTaxes; + private final boolean _maintainEnchantment; + private final double _ingredientMultiplier; + private final double _productMultiplier; + + protected List _entries; + protected final Set _npcsAllowed; + + public MultisellListHolder(int listId, boolean isChanceMultisell, boolean applyTaxes, boolean maintainEnchantment, double ingredientMultiplier, double productMultiplier, List entries, Set npcsAllowed) + { + _listId = listId; + _isChanceMultisell = isChanceMultisell; + _applyTaxes = applyTaxes; + _maintainEnchantment = maintainEnchantment; + _ingredientMultiplier = ingredientMultiplier; + _productMultiplier = productMultiplier; + _entries = entries; + _npcsAllowed = npcsAllowed; + } + + @SuppressWarnings("unchecked") + public MultisellListHolder(StatsSet set) + { + _listId = set.getInt("listId"); + _isChanceMultisell = set.getBoolean("isChanceMultisell", false); + _applyTaxes = set.getBoolean("applyTaxes", false); + _maintainEnchantment = set.getBoolean("maintainEnchantment", false); + _ingredientMultiplier = set.getDouble("ingredientMultiplier", 1.0); + _productMultiplier = set.getDouble("productMultiplier", 1.0); + _entries = Collections.unmodifiableList(set.getList("entries", MultisellEntryHolder.class, Collections.emptyList())); + _npcsAllowed = set.getObject("allowNpc", Set.class); + } + + public List getEntries() + { + return _entries; + } + + @Override + public final int getId() + { + return _listId; + } + + public final boolean isChanceMultisell() + { + return _isChanceMultisell; + } + + public final boolean isApplyTaxes() + { + return _applyTaxes; + } + + public final boolean isMaintainEnchantment() + { + return _maintainEnchantment; + } + + public final double getIngredientMultiplier() + { + return _ingredientMultiplier; + } + + public final double getProductMultiplier() + { + return _productMultiplier; + } + + public final boolean isNpcAllowed(int npcId) + { + return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); + } + + public final boolean isNpcOnly() + { + return _npcsAllowed != null; + } +} \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java new file mode 100644 index 0000000000..db693465a0 --- /dev/null +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java @@ -0,0 +1,107 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.ArrayList; +import java.util.List; + +import com.l2jmobius.gameserver.enums.TaxType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; +import com.l2jmobius.gameserver.model.itemcontainer.ItemContainer; + +/** + * A modified version of {@link MultisellListHolder} that may include altered data of the original and other dynamic data resulted from players' interraction. + * @author Nik + */ +public class PreparedMultisellListHolder extends MultisellListHolder +{ + private int _npcObjectId; + private final boolean _inventoryOnly; + private double _taxRate; + private List _itemInfos; + + public PreparedMultisellListHolder(MultisellListHolder list, boolean inventoryOnly, ItemContainer inventory, L2Npc npc, double ingredientMultiplier, double productMultiplier) + { + super(list.getId(), list.isChanceMultisell(), list.isApplyTaxes(), list.isMaintainEnchantment(), list.getIngredientMultiplier(), list.getProductMultiplier(), list._entries, list._npcsAllowed); + + _inventoryOnly = inventoryOnly; + + if (npc != null) + { + _npcObjectId = npc.getObjectId(); + _taxRate = npc.getCastleTaxRate(TaxType.BUY); + } + + // Display items from inventory that are available for exchange. + if (inventoryOnly) + { + _entries = new ArrayList<>(); + _itemInfos = new ArrayList<>(); + + // Only do the match up on equippable items that are not currently equipped. For each appropriate item, produce a set of entries for the multisell list. + inventory.getItems(item -> !item.isEquipped() && (item.isArmor() || item.isWeapon())).forEach(item -> + { + // Check ingredients of each entry to see if it's an entry we'd like to include. + list.getEntries().stream().filter(e -> e.getIngredients().stream().anyMatch(i -> i.getId() == item.getId())).forEach(e -> + { + _entries.add(e); + _itemInfos.add(new ItemInfo(item)); + }); + }); + } + } + + public ItemInfo getItemEnchantment(int index) + { + return _itemInfos != null ? _itemInfos.get(index) : null; + } + + public double getTaxRate() + { + return isApplyTaxes() ? _taxRate : 0; + } + + public boolean isInventoryOnly() + { + return _inventoryOnly; + } + + public final boolean checkNpcObjectId(int npcObjectId) + { + return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); + } + + /** + * @param ingredient + * @return the new count of the given ingredient after applying ingredient multiplier and adena tax rate. + */ + public long getIngredientCount(ItemHolder ingredient) + { + return (ingredient.getId() == Inventory.ADENA_ID) ? Math.round(ingredient.getCount() * getIngredientMultiplier() * (1 + _taxRate)) : Math.round(ingredient.getCount() * getIngredientMultiplier()); + } + + /** + * @param product + * @return the new count of the given product after applying product multiplier. + */ + public long getProductCount(ItemChanceHolder product) + { + return Math.round(product.getCount() * getProductMultiplier()); + } +} \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java index 22f7a0625a..48d6d470a6 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -16,9 +16,10 @@ */ package com.l2jmobius.gameserver.model.itemauction; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.idfactory.IdFactory; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; @@ -83,10 +84,10 @@ public final class AuctionItem L2World.getInstance().storeObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); - final int augmentationId = _itemExtra.getInt("augmentation_id", 0); - if (augmentationId > 0) + final Augmentation augmentation = AugmentationData.getInstance().getAugmentation(_itemExtra.getInt("augmentation_id", 0)); + if (augmentation != null) { - item.setAugmentation(new L2Augmentation(augmentationId)); + item.setAugmentation(augmentation, false); } return item; } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 59d33bd87c..f68c70c87a 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.ItemLocation; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2ArmorSet; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.PcCondOverride; @@ -991,10 +992,10 @@ public abstract class Inventory extends ItemContainer return (item != null) ? item.getVisualId() : 0; } - public int getPaperdollAugmentationId(int slot) + public Augmentation getPaperdollAugmentation(int slot) { final L2ItemInstance item = _paperdoll[slot]; - return ((item != null) && (item.getAugmentation() != null)) ? item.getAugmentation().getAugmentationId() : 0; + return (item != null) ? item.getAugmentation() : null; } /** diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java index deb9ddb644..2ac678d7a6 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java @@ -159,50 +159,6 @@ public class PcInventory extends Inventory return list; } - /** - * Returns the list of items in inventory available for transaction Allows an item to appear twice if and only if there is a difference in enchantment level. - * @param allowAdena - * @param allowAncientAdena - * @return L2ItemInstance : items in inventory - */ - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena) - { - return getUniqueItemsByEnchantLevel(allowAdena, allowAncientAdena, true); - } - - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena, boolean onlyAvailable) - { - final Collection list = new LinkedList<>(); - for (L2ItemInstance item : _items.values()) - { - if (!allowAdena && (item.getId() == ADENA_ID)) - { - continue; - } - if (!allowAncientAdena && (item.getId() == ANCIENT_ADENA_ID)) - { - continue; - } - - boolean isDuplicate = false; - for (L2ItemInstance litem : list) - { - if ((litem.getId() == item.getId()) && (litem.getEnchantLevel() == item.getEnchantLevel())) - { - isDuplicate = true; - break; - } - } - - if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false, false)))) - { - list.add(item); - } - } - - return list; - } - /** * @param itemId * @return diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java index 899a2eea34..e12ea817a9 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.model.items; import java.util.Objects; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.type.CrystalType; import com.l2jmobius.gameserver.model.items.type.ItemType; @@ -42,8 +43,7 @@ public class L2WarehouseItem private final int _locationSlot; private final int _enchant; private final CrystalType _grade; - private boolean _isAugmented; - private int _augmentationId; + private final Augmentation _augmentation; private final int _customType1; private final int _customType2; private final int _mana; @@ -77,15 +77,7 @@ public class L2WarehouseItem _customType1 = item.getCustomType1(); _customType2 = item.getCustomType2(); _grade = item.getItem().getCrystalType(); - if (item.isAugmented()) - { - _isAugmented = true; - _augmentationId = item.getAugmentation().getAugmentationId(); - } - else - { - _isAugmented = false; - } + _augmentation = item.getAugmentation(); _mana = item.getMana(); _time = item.isTimeLimitedItem() ? (int) (item.getRemainingTime() / 1000) : -1; @@ -226,20 +218,12 @@ public class L2WarehouseItem return _item.getName(); } - /** - * @return {@code true} if the item is augmented, {@code false} otherwise. - */ - public boolean isAugmented() - { - return _isAugmented; - } - /** * @return the augmentation If. */ - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } /** diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java index 190b26d291..34cc4e4f15 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java @@ -39,6 +39,7 @@ import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.data.xml.impl.AppearanceItemData; import com.l2jmobius.gameserver.data.xml.impl.EnchantItemOptionsData; import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.InstanceType; @@ -51,8 +52,8 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import com.l2jmobius.gameserver.instancemanager.SiegeGuardManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.DropProtection; -import com.l2jmobius.gameserver.model.L2Augmentation; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; @@ -132,7 +133,7 @@ public final class L2ItemInstance extends L2Object private boolean _wear; /** Augmented Item */ - private L2Augmentation _augmentation = null; + private Augmentation _augmentation = null; /** Shadow item */ private int _mana = -1; @@ -944,7 +945,7 @@ public final class L2ItemInstance extends L2Object * Returns the augmentation object for this item * @return augmentation */ - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } @@ -952,9 +953,10 @@ public final class L2ItemInstance extends L2Object /** * Sets a new augmentation * @param augmentation + * @param updateDatabase * @return return true if successfully */ - public boolean setAugmentation(L2Augmentation augmentation) + public boolean setAugmentation(Augmentation augmentation, boolean updateDatabase) { // there shall be no previous augmentation.. if (_augmentation != null) @@ -964,13 +966,9 @@ public final class L2ItemInstance extends L2Object } _augmentation = augmentation; - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemAttributes(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e); + updateItemOptions(); } EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); return true; @@ -987,7 +985,7 @@ public final class L2ItemInstance extends L2Object } // Copy augmentation before removing it. - final L2Augmentation augment = _augmentation; + final Augmentation augment = _augmentation; _augmentation = null; try (Connection con = DatabaseFactory.getInstance().getConnection(); @@ -1019,7 +1017,7 @@ public final class L2ItemInstance extends L2Object final int aug_attributes = rs.getInt(1); if (aug_attributes != -1) { - _augmentation = new L2Augmentation(rs.getInt("augAttributes")); + _augmentation = AugmentationData.getInstance().getAugmentation(rs.getInt("augAttributes")); } } } @@ -1044,12 +1042,24 @@ public final class L2ItemInstance extends L2Object } } - private void updateItemAttributes(Connection con) + public void updateItemOptions() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemOptions(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + toString() + " from DB:", e); + } + } + + private void updateItemOptions(Connection con) { try (PreparedStatement ps = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?)")) { ps.setInt(1, getObjectId()); - ps.setInt(2, _augmentation != null ? _augmentation.getAttributes() : -1); + ps.setInt(2, _augmentation != null ? _augmentation.getId() : -1); ps.executeUpdate(); } catch (SQLException e) @@ -1058,6 +1068,18 @@ public final class L2ItemInstance extends L2Object } } + public void updateItemElementals() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemElements(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + toString() + " from DB: ", e); + } + } + private void updateItemElements(Connection con) { try (PreparedStatement ps = con.prepareStatement("DELETE FROM item_elementals WHERE itemId = ?")) @@ -1183,17 +1205,14 @@ public final class L2ItemInstance extends L2Object /** * Add elemental attribute to item and save to db * @param holder + * @param updateDatabase */ - public void setAttribute(AttributeHolder holder) + public void setAttribute(AttributeHolder holder, boolean updateDatabase) { applyAttribute(holder); - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemElements(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + this + " from DB:", e); + updateItemElementals(); } } @@ -1643,7 +1662,7 @@ public final class L2ItemInstance extends L2Object if (_augmentation != null) { - updateItemAttributes(con); + updateItemOptions(con); } if (_elementals != null) { diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/Entry.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/Entry.java deleted file mode 100644 index 3a54373813..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/Entry.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author DS - */ -public class Entry -{ - protected int _entryId; - protected boolean _stackable = true; - - protected List _products; - protected List _ingredients; - - public Entry(int entryId) - { - _entryId = entryId; - _products = new ArrayList<>(); - _ingredients = new ArrayList<>(); - } - - /** - * This constructor used in PreparedEntry only, ArrayLists not created. - */ - protected Entry() - { - } - - public final void setEntryId(int id) - { - _entryId = id; - } - - public final int getEntryId() - { - return _entryId; - } - - public final void addProduct(Ingredient product) - { - _products.add(product); - - if (!product.isStackable()) - { - _stackable = false; - } - } - - public final List getProducts() - { - return _products; - } - - public final void addIngredient(Ingredient ingredient) - { - _ingredients.add(ingredient); - } - - public final List getIngredients() - { - return _ingredients; - } - - public final boolean isStackable() - { - return _stackable; - } - - public long getTaxAmount() - { - return 0; - } -} \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java deleted file mode 100644 index b0dd180176..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Item; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class Ingredient -{ - private int _itemId; - private long _itemCount; - private final int _enchantmentLevel; - private boolean _isTaxIngredient; - private boolean _maintainIngredient; - private L2Item _template = null; - private ItemInfo _itemInfo = null; - private final double _chance; - - public Ingredient(StatsSet set) - { - this(set.getInt("id"), set.getLong("count"), set.getInt("enchantmentLevel", 0), set.getDouble("chance", 0), set.getBoolean("isTaxIngredient", false), set.getBoolean("maintainIngredient", false)); - } - - public Ingredient(int itemId, long itemCount, int enchantmentLevel, double chance, boolean isTaxIngredient, boolean maintainIngredient) - { - _itemId = itemId; - _itemCount = itemCount; - _enchantmentLevel = enchantmentLevel; - _chance = chance; - _isTaxIngredient = isTaxIngredient; - _maintainIngredient = maintainIngredient; - if (_itemId > 0) - { - _template = ItemTable.getInstance().getTemplate(_itemId); - } - } - - /** - * @return a new Ingredient instance with the same values as this. - */ - public Ingredient getCopy() - { - return new Ingredient(_itemId, _itemCount, _enchantmentLevel, _chance, _isTaxIngredient, _maintainIngredient); - } - - public final L2Item getTemplate() - { - return _template; - } - - public final void setItemInfo(L2ItemInstance item) - { - _itemInfo = new ItemInfo(item); - } - - public final void setItemInfo(ItemInfo info) - { - _itemInfo = info; - } - - public final ItemInfo getItemInfo() - { - return _itemInfo; - } - - public final int getEnchantLevel() - { - return _itemInfo == null ? _enchantmentLevel : _itemInfo.getEnchantLevel(); - } - - public final void setItemId(int itemId) - { - _itemId = itemId; - } - - public final int getItemId() - { - return _itemId; - } - - public final void setItemCount(long itemCount) - { - _itemCount = itemCount; - } - - public final long getItemCount() - { - return _itemCount; - } - - public double getChance() - { - return _chance; - } - - public final void setIsTaxIngredient(boolean isTaxIngredient) - { - _isTaxIngredient = isTaxIngredient; - } - - public final boolean isTaxIngredient() - { - return _isTaxIngredient; - } - - public final void setMaintainIngredient(boolean maintainIngredient) - { - _maintainIngredient = maintainIngredient; - } - - public final boolean getMaintainIngredient() - { - return _maintainIngredient; - } - - public final boolean isStackable() - { - return (_template == null) || _template.isStackable(); - } - - public final boolean isArmorOrWeapon() - { - return (_template != null) && ((_template instanceof L2Armor) || (_template instanceof L2Weapon)); - } - - public final int getWeight() - { - return _template == null ? 0 : _template.getWeight(); - } -} diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java deleted file mode 100644 index 1dcbbfae02..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.variables.ItemVariables; - -/** - * @author DS - */ -public class ItemInfo -{ - private final int _enchantLevel, _augmentId; - private final byte _elementId; - private final int _elementPower; - private final AttributeHolder[] _attributes; - private final int _visualId; - private final int _visualStoneId; - private final long _visualIdLifetime; - - public ItemInfo(L2ItemInstance item) - { - _enchantLevel = item.getEnchantLevel(); - _augmentId = item.getAugmentation() != null ? item.getAugmentation().getAugmentationId() : 0; - _elementId = item.getAttackAttributeType().getClientId(); - _elementPower = item.getAttackAttributePower(); - _attributes = item.getAttributes() != null ? item.getAttributes().toArray(new AttributeHolder[6]) : new AttributeHolder[6]; - _visualId = item.getVisualId(); - _visualStoneId = item.getVariables().getInt(ItemVariables.VISUAL_APPEARANCE_STONE_ID, 0); - _visualIdLifetime = item.getVisualLifeTime(); - } - - public final int getEnchantLevel() - { - return _enchantLevel; - } - - public final int getAugmentId() - { - return _augmentId; - } - - public final byte getElementId() - { - return _elementId; - } - - public final int getElementPower() - { - return _elementPower; - } - - public final AttributeHolder[] getElementals() - { - return _attributes; - } - - public int getVisualId() - { - return _visualId; - } - - public int getVisualStoneId() - { - return _visualStoneId; - } - - public long getVisualIdLifeTime() - { - return _visualIdLifetime; - } -} \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java deleted file mode 100644 index ce1783c276..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * @author DS - */ -public class ListContainer -{ - private final int _listId; - private boolean _isChanceMultisell; - private boolean _applyTaxes = false; - private boolean _maintainEnchantment = false; - private double _useRate = 1.0; - - protected List _entries = new ArrayList<>(); - protected Set _npcsAllowed = null; - - public ListContainer(int listId) - { - _listId = listId; - } - - public ListContainer(ListContainer container) - { - _listId = container.getListId(); - _isChanceMultisell = container.isChanceMultisell(); - _maintainEnchantment = container.getMaintainEnchantment(); - } - - public final List getEntries() - { - return _entries; - } - - public final int getListId() - { - return _listId; - } - - public boolean isChanceMultisell() - { - return _isChanceMultisell; - } - - public void setIsChanceMultisell(boolean val) - { - _isChanceMultisell = val; - } - - public final void setApplyTaxes(boolean applyTaxes) - { - _applyTaxes = applyTaxes; - } - - public final boolean getApplyTaxes() - { - return _applyTaxes; - } - - public final void setMaintainEnchantment(boolean maintainEnchantment) - { - _maintainEnchantment = maintainEnchantment; - } - - public double getUseRate() - { - return _useRate; - } - - /** - * Set this to create multisell with increased products, all product counts will be multiplied by the rate specified.
- * NOTE: It affects only parser, it won't change values of already parsed multisell since MultiSells' parseEntry method handles this feature. - * @param rate - */ - public void setUseRate(double rate) - { - _useRate = rate; - } - - public final boolean getMaintainEnchantment() - { - return _maintainEnchantment; - } - - public void allowNpc(int npcId) - { - if (_npcsAllowed == null) - { - _npcsAllowed = new HashSet<>(); - } - _npcsAllowed.add(npcId); - } - - public boolean isNpcAllowed(int npcId) - { - return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); - } - - public boolean isNpcOnly() - { - return _npcsAllowed != null; - } -} diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java deleted file mode 100644 index 46f4aac588..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import static com.l2jmobius.gameserver.model.itemcontainer.Inventory.ADENA_ID; - -import java.util.ArrayList; - -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class PreparedEntry extends Entry -{ - private long _taxAmount = 0; - - public PreparedEntry(Entry template, L2ItemInstance item, boolean applyTaxes, boolean maintainEnchantment, double taxRate) - { - _entryId = template.getEntryId() * 100000; - if (maintainEnchantment && (item != null)) - { - _entryId += item.getEnchantLevel(); - } - - ItemInfo info = null; - long adenaAmount = 0; - - _ingredients = new ArrayList<>(template.getIngredients().size()); - for (Ingredient ing : template.getIngredients()) - { - if (ing.getItemId() == ADENA_ID) - { - // Tax ingredients added only if taxes enabled - if (ing.isTaxIngredient()) - { - // if taxes are to be applied, modify/add the adena count based on the template adena/ancient adena count - if (applyTaxes) - { - _taxAmount += Math.round(ing.getItemCount() * taxRate); - } - } - else - { - adenaAmount += ing.getItemCount(); - } - // do not yet add this adena amount to the list as non-taxIngredient adena might be entered later (order not guaranteed) - continue; - } - if (maintainEnchantment && (item != null) && ing.isArmorOrWeapon()) - { - info = new ItemInfo(item); - final Ingredient newIngredient = ing.getCopy(); - newIngredient.setItemInfo(info); - _ingredients.add(newIngredient); - } - else - { - _ingredients.add(ing.getCopy()); - } - } - - // now add the adena, if any. - adenaAmount += _taxAmount; // do not forget tax - if (adenaAmount > 0) - { - _ingredients.add(new Ingredient(ADENA_ID, adenaAmount, 0, 0, false, false)); - } - - // now copy products - _products = new ArrayList<>(template.getProducts().size()); - for (Ingredient ing : template.getProducts()) - { - if (!ing.isStackable()) - { - _stackable = false; - } - - final Ingredient newProduct = ing.getCopy(); - if (maintainEnchantment && ing.isArmorOrWeapon()) - { - newProduct.setItemInfo(info); - } - _products.add(newProduct); - } - } - - @Override - public final long getTaxAmount() - { - return _taxAmount; - } -} diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java deleted file mode 100644 index 2e78fa3019..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedList; - -import com.l2jmobius.gameserver.model.actor.L2Npc; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -public class PreparedListContainer extends ListContainer -{ - private int _npcObjectId = 0; - - public PreparedListContainer(ListContainer template, boolean inventoryOnly, L2PcInstance player, L2Npc npc) - { - super(template); - - setMaintainEnchantment(template.getMaintainEnchantment()); - setApplyTaxes(false); - double taxRate = 0; - if (npc != null) - { - _npcObjectId = npc.getObjectId(); - if (template.getApplyTaxes() && npc.isInTown() && (npc.getCastle().getOwnerId() > 0)) - { - setApplyTaxes(true); - taxRate = npc.getCastle().getTaxRate(); - } - } - - if (inventoryOnly) - { - if (player == null) - { - return; - } - - final Collection items; - if (getMaintainEnchantment()) - { - items = player.getInventory().getUniqueItemsByEnchantLevel(false, false, false); - } - else - { - items = player.getInventory().getUniqueItems(false, false, false); - } - - _entries = new LinkedList<>(); - for (L2ItemInstance item : items) - { - // only do the match up on equippable items that are not currently equipped - // so for each appropriate item, produce a set of entries for the multisell list. - if (!item.isEquipped() && ((item.getItem() instanceof L2Armor) || (item.getItem() instanceof L2Weapon))) - { - // loop through the entries to see which ones we wish to include - for (Entry ent : template.getEntries()) - { - // check ingredients of this entry to see if it's an entry we'd like to include. - for (Ingredient ing : ent.getIngredients()) - { - if (item.getId() == ing.getItemId()) - { - _entries.add(new PreparedEntry(ent, item, getApplyTaxes(), getMaintainEnchantment(), taxRate)); - break; // next entry - } - } - } - } - } - } - else - { - _entries = new ArrayList<>(template.getEntries().size()); - for (Entry ent : template.getEntries()) - { - _entries.add(new PreparedEntry(ent, null, getApplyTaxes(), false, taxRate)); - } - } - } - - public final boolean checkNpcObjectId(int npcObjectId) - { - return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); - } -} diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/options/Options.java index 2c24b77b7e..660c49c76e 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/options/Options.java @@ -32,12 +32,10 @@ import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime; public class Options { private final int _id; - private final List _effects = new ArrayList<>(); - - private SkillHolder _activeSkill = null; - private SkillHolder _passiveSkill = null; - - private final List _activationSkills = new ArrayList<>(); + private List _effects = null; + private List _activeSkill = null; + private List _passiveSkill = null; + private List _activationSkills = null; /** * @param id @@ -54,6 +52,10 @@ public class Options public void addEffect(AbstractEffect effect) { + if (_effects == null) + { + _effects = new ArrayList<>(); + } _effects.add(effect); } @@ -64,51 +66,62 @@ public class Options public boolean hasEffects() { - return !_effects.isEmpty(); + return _effects != null; } - public boolean hasActiveSkill() + public boolean hasActiveSkills() { return _activeSkill != null; } - public SkillHolder getActiveSkill() + public List getActiveSkills() { return _activeSkill; } - public void setActiveSkill(SkillHolder holder) + public void addActiveSkill(SkillHolder holder) { - _activeSkill = holder; + if (_activeSkill == null) + { + _activeSkill = new ArrayList<>(); + } + _activeSkill.add(holder); } - public boolean hasPassiveSkill() + public boolean hasPassiveSkills() { return _passiveSkill != null; } - public SkillHolder getPassiveSkill() + public List getPassiveSkills() { return _passiveSkill; } - public void setPassiveSkill(SkillHolder holder) + public void addPassiveSkill(SkillHolder holder) { - _passiveSkill = holder; + if (_passiveSkill == null) + { + _passiveSkill = new ArrayList<>(); + } + _passiveSkill.add(holder); } public boolean hasActivationSkills() { - return !_activationSkills.isEmpty(); + return _activationSkills != null; } public boolean hasActivationSkills(OptionsSkillType type) { - for (OptionsSkillHolder holder : _activationSkills) + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - return true; + if (holder.getSkillType() == type) + { + return true; + } } } return false; @@ -121,12 +134,15 @@ public class Options public List getActivationsSkills(OptionsSkillType type) { - final List temp = new ArrayList<>(); - for (OptionsSkillHolder holder : _activationSkills) + List temp = new ArrayList<>(); + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - temp.add(holder); + if (holder.getSkillType() == type) + { + temp.add(holder); + } } } return temp; @@ -134,6 +150,10 @@ public class Options public void addActivationSkill(OptionsSkillHolder holder) { + if (_activationSkills == null) + { + _activationSkills = new ArrayList<>(); + } _activationSkills.add(holder); } @@ -171,15 +191,21 @@ public class Options player.getEffectList().add(info); } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - addSkill(player, getActiveSkill().getSkill()); - player.sendDebugMessage("Adding active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - addSkill(player, getPassiveSkill().getSkill()); - player.sendDebugMessage("Adding passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { @@ -208,15 +234,21 @@ public class Options } } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - player.removeSkill(getActiveSkill().getSkill(), false, false); - player.sendDebugMessage("Removing active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + player.removeSkill(holder.getSkill(), false, false); + player.sendDebugMessage("Removing active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - player.removeSkill(getPassiveSkill().getSkill(), false, true); - player.sendDebugMessage("Removing passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + player.removeSkill(holder.getSkill(), false, true); + player.sendDebugMessage("Removing passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java index 9642df097c..7d45eaef7f 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -59,6 +59,7 @@ public class PlayerVariables extends AbstractVariables public static final String EXTEND_DROP = "EXTEND_DROP"; public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; + public static final String DELUSION_RETURN = "DELUSION_RETURN"; private final int _objectId; diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/ZoneId.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/ZoneId.java index d3e223d4e3..41f3e41947 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/ZoneId.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/ZoneId.java @@ -37,7 +37,6 @@ public enum ZoneId NO_SUMMON_FRIEND, FORT, NO_STORE, - TOWN, SCRIPT, HQ, DANGER_AREA, @@ -47,7 +46,8 @@ public enum ZoneId NO_RESTART, SAYUNE, FISHING, - UNDYING; + UNDYING, + TAX; public static int getZoneCount() { diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java similarity index 54% rename from L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java rename to L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java index 3304f6cbe3..996f7888a2 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java @@ -1,85 +1,86 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.zone.type; - -import com.l2jmobius.gameserver.model.actor.L2Character; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.ZoneId; - -/** - * A Town zone - * @author durgus - */ -public class L2TownZone extends L2ZoneType -{ - private int _townId; - private int _taxById; - - public L2TownZone(int id) - { - super(id); - - _taxById = 0; - } - - @Override - public void setParameter(String name, String value) - { - if (name.equals("townId")) - { - _townId = Integer.parseInt(value); - } - else if (name.equals("taxById")) - { - _taxById = Integer.parseInt(value); - } - else - { - super.setParameter(name, value); - } - } - - @Override - protected void onEnter(L2Character character) - { - character.setInsideZone(ZoneId.TOWN, true); - } - - @Override - protected void onExit(L2Character character) - { - character.setInsideZone(ZoneId.TOWN, false); - } - - /** - * Returns this zones town id (if any) - * @return - */ - public int getTownId() - { - return _townId; - } - - /** - * Returns this town zones castle id - * @return - */ - public final int getTaxById() - { - return _taxById; - } -} +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.zone.type; + +import com.l2jmobius.gameserver.instancemanager.CastleManager; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.entity.Castle; +import com.l2jmobius.gameserver.model.zone.L2ZoneType; +import com.l2jmobius.gameserver.model.zone.ZoneId; + +/** + * Tax zone type. + * @author malyelfik + */ +public class L2TaxZone extends L2ZoneType +{ + private int _domainId; + private Castle _castle; + + public L2TaxZone(int id) + { + super(id); + } + + @Override + public void setParameter(String name, String value) + { + if (name.equalsIgnoreCase("domainId")) + { + _domainId = Integer.parseInt(value); + } + else + { + super.setParameter(name, value); + } + } + + @Override + protected void onEnter(L2Character character) + { + character.setInsideZone(ZoneId.TAX, true); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(this); + } + } + + @Override + protected void onExit(L2Character character) + { + character.setInsideZone(ZoneId.TAX, false); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(null); + } + } + + /** + * Gets castle associated with tax zone.
+ * @return instance of {@link Castle} if found otherwise {@code null} + */ + public Castle getCastle() + { + // Lazy loading is used because zone is loaded before residence + if (_castle == null) + { + _castle = CastleManager.getInstance().getCastleById(_domainId); + } + return _castle; + } +} diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java index a2c109efcf..f17d3133a4 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java @@ -16,30 +16,36 @@ */ package com.l2jmobius.gameserver.network.clientpackets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedHashMap; +import java.util.Collections; +import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.Map.Entry; +import java.util.OptionalLong; +import java.util.stream.Collectors; -import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.MultisellData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.enums.SpecialItemType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.model.variables.ItemVariables; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; +import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import com.l2jmobius.gameserver.network.serverpackets.UserInfo; /** * The Class MultiSellChoose. @@ -49,6 +55,17 @@ public class MultiSellChoose implements IClientIncomingPacket private int _listId; private int _entryId; private long _amount; + private int _enchantLevel; + private int _augmentOption1; + private int _augmentOption2; + private short _attackAttribute; + private short _attributePower; + private short _fireDefence; + private short _waterDefence; + private short _windDefence; + private short _earthDefence; + private short _holyDefence; + private short _darkDefence; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -56,17 +73,17 @@ public class MultiSellChoose implements IClientIncomingPacket _listId = packet.readD(); _entryId = packet.readD(); _amount = packet.readQ(); - // _unk1 = packet.readH(); - // _unk2 = packet.readD(); - // _unk3 = packet.readD(); - // _unk4 = packet.readH(); // elemental attributes - // _unk5 = packet.readH(); // elemental attributes - // _unk6 = packet.readH(); // elemental attributes - // _unk7 = packet.readH(); // elemental attributes - // _unk8 = packet.readH(); // elemental attributes - // _unk9 = packet.readH(); // elemental attributes - // _unk10 = packet.readH(); // elemental attributes - // _unk11 = packet.readH(); // elemental attributes + _enchantLevel = packet.readH(); + _augmentOption1 = packet.readD(); + _augmentOption2 = packet.readD(); + _attackAttribute = (short) packet.readH(); + _attributePower = (short) packet.readH(); + _fireDefence = (short) packet.readH(); + _waterDefence = (short) packet.readH(); + _windDefence = (short) packet.readH(); + _earthDefence = (short) packet.readH(); + _holyDefence = (short) packet.readH(); + _darkDefence = (short) packet.readH(); return true; } @@ -85,395 +102,446 @@ public class MultiSellChoose implements IClientIncomingPacket return; } - if ((_amount < 1) || (_amount > 5000)) + if ((_amount < 1) || (_amount > 999999)) // 999 999 is client max. { - player.setMultiSell(null); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); return; } - final PreparedListContainer list = player.getMultiSell(); - if ((list == null) || (list.getListId() != _listId)) + PreparedMultisellListHolder list = player.getMultiSell(); + if ((list == null) || (list.getId() != _listId)) { player.setMultiSell(null); return; } final L2Npc npc = player.getLastFolkNPC(); - if (!list.isNpcAllowed(-1) && !isAllowedToUse(player, npc, list)) + if (!isAllowedToUse(player, npc, list)) { + if (player.isGM()) + { + player.sendMessage("Multisell " + _listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + player.setMultiSell(null); + return; + } + } + + final MultisellEntryHolder entry = list.getEntries().get(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + if (entry == null) + { + _log.severe("Character: " + player.getName() + " requested inexistant prepared multisell entry. Multisell: " + _listId + " entry: " + _entryId); player.setMultiSell(null); return; } - for (Entry entry : list.getEntries()) + if (!entry.isStackable() && (_amount > 1)) { - if (entry.getEntryId() == _entryId) + _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final ItemInfo itemEnchantment = list.getItemEnchantment(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + + // Validate the requested item with its full stats. + //@formatter:off + if ((itemEnchantment != null) && ((_amount > 1) + || (itemEnchantment.getEnchantLevel() != _enchantLevel) + || (itemEnchantment.getAttackElementType() != _attackAttribute) + || (itemEnchantment.getAttackElementPower() != _attributePower) + || (itemEnchantment.getAttributeDefence(AttributeType.FIRE) != _fireDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WATER) != _waterDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WIND) != _windDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.EARTH) != _earthDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.HOLY) != _holyDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.DARK) != _darkDefence) + || ((itemEnchantment.getAugmentation() == null) && ((_augmentOption1 != 0) || (_augmentOption2 != 0))) + || ((itemEnchantment.getAugmentation() != null) && ((itemEnchantment.getAugmentation().getOptionId(0) != _augmentOption1) || (itemEnchantment.getAugmentation().getOptionId(1) != _augmentOption2))) + )) + //@formatter:on + { + _log.severe("Character: " + player.getName() + " is trying to upgrade equippable item, but the stats doesn't match. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final L2Clan clan = player.getClan(); + final PcInventory inventory = player.getInventory(); + + try + { + int slots = 0; + int weight = 0; + for (ItemChanceHolder product : entry.getProducts()) { - if (!entry.isStackable() && (_amount > 1)) + if (product.getId() < 0) + { + // Check if clan exists for clan reputation products. + if ((clan == null) && (SpecialItemType.CLAN_REPUTATION.getClientId() == product.getId())) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return; + } + + continue; + } + + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + if (template == null) { - _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell, id:" + _listId + ":" + _entryId); player.setMultiSell(null); return; } - final PcInventory inv = player.getInventory(); + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); - int slots = 0; - int weight = 0; - for (Ingredient e : entry.getProducts()) + if (!(totalCount >= 0) && (totalCount <= Integer.MAX_VALUE)) { - if (e.getItemId() < 0) - { - continue; - } - - if (!e.isStackable()) - { - slots += e.getItemCount() * _amount; - } - else if (player.getInventory().getItemByItemId(e.getItemId()) == null) - { - slots++; - } - weight += e.getItemCount() * _amount * e.getWeight(); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; } - if (!inv.validateWeight(weight)) + if (!template.isStackable() || (player.getInventory().getItemByItemId(product.getId()) == null)) + { + slots++; + } + + weight += totalCount * template.getWeight(); + + if (!inventory.validateWeight(weight)) { player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_WEIGHT_LIMIT); return; } - if (!inv.validateCapacity(slots)) + if ((slots > 0) && !inventory.validateCapacity(slots)) { player.sendPacket(SystemMessageId.YOUR_INVENTORY_IS_FULL); return; } - final ArrayList ingredientsList = new ArrayList<>(entry.getIngredients().size()); - // Generate a list of distinct ingredients and counts in order to check if the correct item-counts are possessed by the player - boolean newIng; - for (Ingredient e : entry.getIngredients()) + // If this is a chance multisell, reset slots and weight because only one item should be seleted. We just need to check if conditions for every item is met. + if (list.isChanceMultisell()) { - newIng = true; - // at this point, the template has already been modified so that enchantments are properly included - // whenever they need to be applied. Uniqueness of items is thus judged by item id AND enchantment level - for (int i = ingredientsList.size(); --i >= 0;) + slots = 0; + weight = 0; + } + } + + // Check for enchanted item if its present in the inventory. + if ((itemEnchantment != null) && (inventory.getItemByObjectId(itemEnchantment.getObjectId()) == null)) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(itemEnchantment.getItem().getId()); + player.sendPacket(sm); + return; + } + + // Summarize all item counts into one map. That would include non-stackable items under 1 id and multiple count. + final Map itemIdCount = entry.getIngredients().stream().collect(Collectors.toMap(i -> i.getId(), i -> list.getIngredientCount(i), (k1, k2) -> Math.addExact(k1, k2))); + + // Now check if the player has sufficient items in the inventory to cover the ingredients' expences. Take care for non-stackable items like 2 swords to dual. + boolean allOk = true; + for (Entry idCount : itemIdCount.entrySet()) + { + allOk &= checkIngredients(player, list, inventory, clan, idCount.getKey(), Math.multiplyExact(idCount.getValue(), _amount)); + } + + // The above operation should not be short-circuited, in order to show all missing ingredients. + if (!allOk) + { + return; + } + + final InventoryUpdate iu = new InventoryUpdate(); + boolean itemEnchantmentProcessed = (itemEnchantment == null); + + // Take all ingredients + for (ItemHolder ingredient : entry.getIngredients()) + { + final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId()); + if (specialItem != null) + { + // Take special item. + switch (specialItem) { - final Ingredient ex = ingredientsList.get(i); - // if the item was already added in the list, merely increment the count - // this happens if 1 list entry has the same ingredient twice (example 2 swords = 1 dual) - if ((ex.getItemId() == e.getItemId()) && (ex.getEnchantLevel() == e.getEnchantLevel())) + case CLAN_REPUTATION: { - if ((ex.getItemCount() + e.getItemCount()) > Integer.MAX_VALUE) + if (clan != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); - return; + clan.takeReputationScore((int) totalCount, true); + SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); + smsg.addLong(totalCount); + player.sendPacket(smsg); } - // two same ingredients, merge into one and replace old - final Ingredient ing = ex.getCopy(); - ing.setItemCount(ex.getItemCount() + e.getItemCount()); - ingredientsList.set(i, ing); - newIng = false; break; } - } - if (newIng) - { - // if it's a new ingredient, just store its info directly (item id, count, enchantment) - ingredientsList.add(e); + case FAME: + { + player.setFame(player.getFame() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.setRaidbossPoints(player.getRaidbossPoints() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(totalCount)); + break; + } + case PC_CAFE_POINTS: + { + player.setPcCafePoints((int) (player.getPcCafePoints() - totalCount)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special ingredient with id: " + ingredient.getId() + "."); + return; + } } } - - // now check if the player has sufficient items in the inventory to cover the ingredient expenses - for (Ingredient e : ingredientsList) + else if (!itemEnchantmentProcessed && (itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) { - if ((e.getItemCount() * _amount) > Integer.MAX_VALUE) + // Take the enchanted item. + final L2ItemInstance destroyedItem = inventory.destroyItem("Multisell", itemEnchantment.getObjectId(), totalCount, player, npc); + if (destroyedItem != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + itemEnchantmentProcessed = true; + iu.addItem(destroyedItem); + } + else + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(ingredient.getId()); + player.sendPacket(sm); return; } - if (e.getItemId() < 0) + } + else + { + // Take a regular item. + final L2ItemInstance destroyedItem = inventory.destroyItemByItemId("Multisell", ingredient.getId(), totalCount, player, npc); + if (destroyedItem != null) { - if (!MultisellData.hasSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) - { - return; - } + iu.addItem(destroyedItem); } else { - // if this is not a list that maintains enchantment, check the count of all items that have the given id. - // otherwise, check only the count of items with exactly the needed enchantment level - final long required = (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount(); - if (inv.getInventoryItemCount(e.getItemId(), (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) ? e.getEnchantLevel() : -1, false) < required) + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredient.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + return; + } + } + } + + // Generate the appropriate items + List products = entry.getProducts(); + if (list.isChanceMultisell()) + { + final ItemChanceHolder randomProduct = ItemChanceHolder.getRandomHolder(entry.getProducts()); + products = randomProduct != null ? Collections.singletonList(randomProduct) : Collections.emptyList(); + } + + for (ItemChanceHolder product : products) + { + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(product.getId()); + if (specialItem != null) + { + // Give special item. + switch (specialItem) + { + case CLAN_REPUTATION: { - if (e.getEnchantLevel() > 0) + if (clan != null) { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addString("+" + e.getEnchantLevel() + " " + e.getTemplate().getName()); - sm.addLong(required); - player.sendPacket(sm); - } - else - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addItemName(e.getTemplate()); - sm.addLong(required); - player.sendPacket(sm); + clan.addReputationScore((int) totalCount, true); } + break; + } + case FAME: + { + player.setFame((int) (player.getFame() + totalCount)); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.increaseRaidbossPoints((int) totalCount); + player.sendPacket(new UserInfo(player)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special product with id: " + product.getId() + "."); return; } } } - - final Map originalInfos = new LinkedHashMap<>(); - /** All ok, remove items and add final product */ - - for (Ingredient e : entry.getIngredients()) + else { - if (e.getItemId() < 0) + // Give item. + final L2ItemInstance addedItem = inventory.addItem("Multisell", product.getId(), totalCount, player, npc); + iu.addItem(addedItem); + + // Check if the newly given item should be enchanted. + if (itemEnchantmentProcessed && list.isMaintainEnchantment() && (itemEnchantment != null) && addedItem.isEquipable() && addedItem.getItem().getClass().equals(itemEnchantment.getItem().getClass())) { - if (!MultisellData.takeSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) - { - return; - } - } - else - { - L2ItemInstance itemToTake = inv.getItemByItemId(e.getItemId()); // initialize and initial guess for the item to take. - if (itemToTake == null) - { // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - _log.severe("Character: " + player.getName() + " is trying to cheat in multisell, id:" + _listId + ":" + _entryId); - player.setMultiSell(null); - return; - } + addedItem.setEnchantLevel(itemEnchantment.getEnchantLevel()); + addedItem.setAugmentation(itemEnchantment.getAugmentation(), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.findByClientId(itemEnchantment.getAttackElementType()), itemEnchantment.getAttackElementPower()), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.FIRE, itemEnchantment.getAttributeDefence(AttributeType.FIRE)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WATER, itemEnchantment.getAttributeDefence(AttributeType.WATER)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WIND, itemEnchantment.getAttributeDefence(AttributeType.WIND)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.EARTH, itemEnchantment.getAttributeDefence(AttributeType.EARTH)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.HOLY, itemEnchantment.getAttributeDefence(AttributeType.HOLY)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.DARK, itemEnchantment.getAttributeDefence(AttributeType.DARK)), false); - // if (itemToTake.isEquipped()) - // { - // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - // LOGGER.severe("Character: " + player.getName() + " is trying to cheat in multisell, exchanging equipped item, merchatnt id:" + merchant.getNpcId()); - // player.setMultiSell(null); - // return; - // } + addedItem.updateDatabase(); - if (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) - { - // if it's a stackable item, just reduce the amount from the first (only) instance that is found in the inventory - if (itemToTake.isStackable()) - { - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), e.getItemCount() * _amount, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - else - { - // for non-stackable items, one of two scenaria are possible: - // a) list maintains enchantment: get the instances that exactly match the requested enchantment level - // b) list does not maintain enchantment: get the instances with the LOWEST enchantment level - - // a) if enchantment is maintained, then get a list of items that exactly match this enchantment - if (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) - { - // loop through this list and remove (one by one) each item until the required amount is taken. - final L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), e.getEnchantLevel(), false).toArray(new L2ItemInstance[0]); - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - originalInfos.put(i, new ItemInfo(inventoryContents[i])); - if (!player.destroyItem("Multisell", inventoryContents[i].getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } - else - // b) enchantment is not maintained. Get the instances with the LOWEST enchantment level - { - // NOTE: There are 2 ways to achieve the above goal. - // 1) Get all items that have the correct itemId, loop through them until the lowest enchantment - // level is found. Repeat all this for the next item until proper count of items is reached. - // 2) Get all items that have the correct itemId, sort them once based on enchantment level, - // and get the range of items that is necessary. - // Method 1 is faster for a small number of items to be exchanged. - // Method 2 is faster for large amounts. - // - // EXPLANATION: - // Worst case scenario for algorithm 1 will make it run in a number of cycles given by: - // m*(2n-m+1)/2 where m is the number of items to be exchanged and n is the total - // number of inventory items that have a matching id. - // With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle - // for case b (just grab the m first items) or in linear time for case a (find the beginning of items - // with correct enchantment, index x, and take all items from x to x+m). - // Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 > - // (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) + log(n/n*n) = - // nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n) - // So for m < log(n) then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n) - // - // IDEALLY: - // In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n - // if ( (2<<(e.getItemCount()// _amount)) < inventoryContents.length ) - // // do Algorithm 1, no sorting - // else - // // do Algorithm 2, sorting - // - // CURRENT IMPLEMENTATION: - // In general, it is going to be very rare for a person to do a massive exchange of non-stackable items - // For this reason, we assume that algorithm 1 will always suffice and we keep things simple. - // If, in the future, it becomes necessary that we optimize, the above discussion should make it clear - // what optimization exactly is necessary (based on the comments under "IDEALLY"). - // - - // choice 1. Small number of items exchanged. No sorting. - for (int i = 1; i <= (e.getItemCount() * _amount); i++) - { - final Collection inventoryContents = inv.getAllItemsByItemId(e.getItemId(), false); - - itemToTake = inventoryContents.iterator().next(); - // get item with the LOWEST enchantment level from the inventory... - // +0 is lowest by default... - if (itemToTake.getEnchantLevel() > 0) - { - for (L2ItemInstance item : inventoryContents) - { - if ((item.getEnchantLevel() < itemToTake.getEnchantLevel()) && (item.getEnchantLevel() >= e.getEnchantLevel())) - { - itemToTake = item; - // nothing will have enchantment less than 0. If a zero-enchanted - // item is found, just take it - if (itemToTake.getEnchantLevel() == 0) - { - break; - } - } - } - } - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } - } - } - } - } - - final double itemRandom = 100 * Rnd.nextDouble(); - float cumulativeChance = 0; - - boolean matched = false; - // Generate the appropriate items - for (Ingredient e : entry.getProducts()) - { - if (list.isChanceMultisell()) - { - // Skip first entry. - if (e.getChance() < 1) - { - continue; - } - - // Calculate chance - matched = itemRandom < (cumulativeChance += e.getChance()); - if (!matched) - { - continue; - } + // Mark that we have already upgraded the item. + itemEnchantmentProcessed = false; } - if (e.getItemId() < 0) + if (addedItem.getCount() > 1) { - MultisellData.giveSpecialProduct(e.getItemId(), e.getItemCount() * _amount, player); + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); + sm.addItemName(addedItem.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + } + else if (addedItem.getEnchantLevel() > 0) + { + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); + sm.addLong(addedItem.getEnchantLevel()); + sm.addItemName(addedItem.getId()); + player.sendPacket(sm); } else { - if (e.isStackable()) - { - inv.addItem("Multisell", e.getItemId(), e.getItemCount() * _amount, player, player.getTarget()); - } - else - { - L2ItemInstance product = null; - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - product = inv.addItem("Multisell", e.getItemId(), 1, player, player.getTarget()); - if ((product != null) && (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0))) - { - final ItemInfo info = originalInfos.get(i); - if (info != null) - { - if (info.getAugmentId() > 0) - { - product.setAugmentation(new L2Augmentation(info.getAugmentId())); - } - if (info.getElementals().length > 0) - { - Arrays.stream(info.getElementals()).filter(Objects::nonNull).forEach(product::setAttribute); - } - if (info.getVisualId() > 0) - { - product.setVisualId(info.getVisualId()); - if (info.getVisualStoneId() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_STONE_ID, info.getVisualStoneId()); - } - if (info.getVisualIdLifeTime() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_LIFE_TIME, info.getVisualIdLifeTime()); - product.scheduleVisualLifeTime(); - } - } - } - product.setEnchantLevel(e.getEnchantLevel()); - product.updateDatabase(); - } - } - } - - final SystemMessage sm; - if ((e.getItemCount() * _amount) > 1) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); - sm.addItemName(e.getItemId()); - sm.addLong(e.getItemCount() * _amount); - player.sendPacket(sm); - } - else - { - if (list.getMaintainEnchantment() && (e.getEnchantLevel() > 0)) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); - sm.addLong(e.getEnchantLevel()); - sm.addItemName(e.getItemId()); - } - else - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); - sm.addItemName(e.getItemId()); - } - player.sendPacket(sm); - } - } - - if (matched) - { - break; + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); + sm.addItemName(addedItem); + player.sendPacket(sm); } } - player.sendItemList(false); - - // finally, give the tax to the castle... - if ((npc != null) && (entry.getTaxAmount() > 0)) + } + + // Update inventory and weight. + player.sendInventoryUpdate(iu); + + // finally, give the tax to the castle... + if ((npc != null) && list.isApplyTaxes()) + { + final OptionalLong taxPaid = entry.getIngredients().stream().filter(i -> i.getId() == Inventory.ADENA_ID).mapToLong(i -> Math.round(i.getCount() * list.getIngredientMultiplier() * list.getTaxRate()) * _amount).reduce(Math::multiplyExact); + if (taxPaid.isPresent()) { - npc.getCastle().addToTreasury(entry.getTaxAmount() * _amount); + npc.handleTaxPayment(taxPaid.getAsLong()); } - - break; } } + catch (ArithmeticException ae) + { + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; + } + + // Re-send multisell after successful exchange of inventory-only shown items. + if (list.isInventoryOnly()) + { + MultisellData.getInstance().separateAndSend(list.getId(), player, npc, list.isInventoryOnly(), list.getProductMultiplier(), list.getIngredientMultiplier()); + } + } + + /** + * @param player + * @param list + * @param inventory + * @param clan + * @param ingredientId + * @param totalCount + * @return {@code false} if ingredient amount is not enough, {@code true} otherwise. + */ + private boolean checkIngredients(final L2PcInstance player, PreparedMultisellListHolder list, final PcInventory inventory, final L2Clan clan, final int ingredientId, final long totalCount) + { + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredientId); + if (specialItem != null) + { + // Check special item. + switch (specialItem) + { + case CLAN_REPUTATION: + { + if (clan == null) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return false; + } + else if (!player.isClanLeader()) + { + player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); + return false; + } + else if (clan.getReputationScore() < totalCount) + { + player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); + return false; + } + return true; + } + case FAME: + { + if (player.getFame() < totalCount) + { + player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); + return false; + } + return true; + } + case RAIDBOSS_POINTS: + { + if (player.getRaidbossPoints() < totalCount) + { + player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); + return false; + } + return true; + } + case PC_CAFE_POINTS: + { + if (player.getPcCafePoints() < totalCount) + { + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); + return false; + } + return true; + } + default: + { + _log.severe("Multisell: " + _listId + " is using a non-implemented special ingredient with id: " + ingredientId + "."); + return false; + } + } + } + // Check if the necessary items are there. If list maintains enchantment, allow all enchanted items, otherwise only unenchanted. TODO: Check how retail does it. + else if (inventory.getInventoryItemCount(ingredientId, list.isMaintainEnchantment() ? -1 : 0, false) < totalCount) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredientId); + sm.addLong(totalCount); + player.sendPacket(sm); + return false; + } + + return true; } /** @@ -482,7 +550,7 @@ public class MultiSellChoose implements IClientIncomingPacket * @param list * @return {@code true} if player can buy stuff from the multisell, {@code false} otherwise. */ - private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedListContainer list) + private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedMultisellListHolder list) { if (npc != null) { @@ -490,7 +558,7 @@ public class MultiSellChoose implements IClientIncomingPacket { return false; } - else if (list.isNpcOnly() && ((npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) + else if (list.isNpcOnly() && (!list.checkNpcObjectId(npc.getObjectId()) || (npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) { return false; } @@ -501,4 +569,4 @@ public class MultiSellChoose implements IClientIncomingPacket } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java index 1cf01cc7b3..6f572174ad 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java @@ -29,8 +29,8 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -110,7 +110,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - merchant = (L2MerchantInstance) target; + merchant = (L2MerchantInstance) target; // FIXME: Doesn't work for GMs. } if ((merchant == null) && !player.isGM() && (_listId != CUSTOM_CB_SELL_LIST)) @@ -119,7 +119,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -134,7 +134,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - castleTaxRate = merchant.getTotalTaxRate(TaxType.BUY); + castleTaxRate = merchant.getCastleTaxRate(TaxType.BUY); } long subTotal = 0; @@ -159,11 +159,6 @@ public final class RequestBuyItem implements IClientIncomingPacket } long price = product.getPrice(); - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - price *= Config.RATE_SIEGE_GUARDS_PRICE; - } - if (price < 0) { _log.warning("ERROR, no price found .. wrong buylist ??"); @@ -194,7 +189,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } // first calculate price per item with tax, then multiply by count - price = (long) (price * (1 + castleTaxRate)); + price = (long) (price * (1 + castleTaxRate + product.getBaseTaxRate())); subTotal += i.getCount() * price; if (subTotal > MAX_ADENA) { @@ -257,7 +252,7 @@ public final class RequestBuyItem implements IClientIncomingPacket // add to castle treasury if (merchant != null) { - merchant.getCastle().addToTreasury((long) (subTotal * castleTaxRate)); + merchant.handleTaxPayment((long) (subTotal * castleTaxRate)); } client.sendPacket(new ExUserInfoInvenWeight(player)); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index f942ddc681..afbf88a5b9 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -202,6 +202,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket } } + item.updateItemElementals(); player.destroyItem("AttrEnchant", stone, usedStones, player, true); final AttributeHolder newElement = item.getAttribute(elementToAdd); final int newValue = newElement != null ? newElement.getValue() : 0; @@ -350,7 +351,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket if (success) { - item.setAttribute(new AttributeHolder(elementToAdd, newPower)); + item.setAttribute(new AttributeHolder(elementToAdd, newPower), false); } return success ? 1 : 0; diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java index c1db83f07e..7fb3de5cb4 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.buylist.Product; import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.items.L2Armor; @@ -157,7 +157,7 @@ public final class RequestPreviewItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(activeChar, "Warning!! Character " + activeChar.getName() + " of account " + activeChar.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index bb051649d8..0007b7ffb0 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -18,7 +18,7 @@ package com.l2jmobius.gameserver.network.clientpackets; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.datatables.AugmentationData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -118,12 +118,10 @@ public final class RequestRefine extends AbstractRefinePacket return; } - final L2Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); - targetItem.setAugmentation(aug); + final Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); + targetItem.setAugmentation(aug, true); - final int stat12 = 0x0000FFFF & aug.getAugmentationId(); - final int stat34 = aug.getAugmentationId() >> 16; - activeChar.sendPacket(new ExVariationResult(stat12, stat34, 1)); + activeChar.sendPacket(new ExVariationResult(aug.getOptionId(0), aug.getOptionId(1), 1)); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(targetItem); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java index 3cc8f4c564..9ab82245e8 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java @@ -21,11 +21,10 @@ import static com.l2jmobius.gameserver.model.actor.L2Npc.INTERACTION_DISTANCE; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; -import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -79,13 +78,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - if (_items == null) - { - client.sendPacket(ActionFailed.STATIC_PACKET); - return; - } - - if (!player.hasRefund()) + if ((_items == null) || !player.hasRefund()) { client.sendPacket(ActionFailed.STATIC_PACKET); return; @@ -109,7 +102,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -164,12 +157,7 @@ public final class RequestRefundItem implements IClientIncomingPacket final long count = item.getCount(); weight += count * template.getWeight(); - long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } - adena += price * count; + adena += (count * template.getReferencePrice()) / 2; if (!template.isStackable()) { slots += count; @@ -213,6 +201,6 @@ public final class RequestRefundItem implements IClientIncomingPacket // Update current load status on player client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java index e6538867b5..92704fff45 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.UniqueItemHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -129,7 +129,7 @@ public final class RequestSellItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -153,10 +153,6 @@ public final class RequestSellItem implements IClientIncomingPacket } long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } totalPrice += price * i.getCount(); if (((MAX_ADENA / i.getCount()) < price) || (totalPrice > MAX_ADENA)) { @@ -166,25 +162,27 @@ public final class RequestSellItem implements IClientIncomingPacket if (Config.ALLOW_REFUND) { - item = player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); + player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); } else { - item = player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); + player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); } } + // add to castle treasury + if (merchant != null) + { + // Keep here same formula as in {@link ExBuySellList} to produce same result. + final long profit = (long) (totalPrice * (1.0 - merchant.getCastleTaxRate(TaxType.SELL))); + merchant.handleTaxPayment(totalPrice - profit); + totalPrice = profit; + } + player.addAdena("Sell", totalPrice, merchant, false); - // add to castle treasury? - if (merchant != null) - { - final long taxCollection = (long) (totalPrice * (1.0 - merchant.getTotalTaxRate(TaxType.SELL))); - merchant.getCastle().addToTreasury(taxCollection); - } - // Update current load as well client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java index b8d4e6101b..ae8b7753d1 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java @@ -75,7 +75,7 @@ public class RequestChangeAttributeItem implements IClientIncomingPacket final int oldElementId = item.getAttackAttributeType().getClientId(); final int elementValue = item.getAttackAttribute().getValue(); item.clearAllAttributes(); - item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue)); + item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue), true); // send packets final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_S_S2_ATTRIBUTE_HAS_SUCCESSFULLY_CHANGED_TO_S3_ATTRIBUTE); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java index 5a9c1c97af..2794091f82 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java @@ -17,6 +17,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.ItemListType; import com.l2jmobius.gameserver.model.ItemInfo; import com.l2jmobius.gameserver.model.TradeItem; @@ -61,21 +62,6 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket 0) + if (item.getAugmentation() != null) { mask |= ItemListType.AUGMENT_BONUS.getMask(); } - if (item.getAttackElementType() >= 0) + if ((item.getAttackElementType() >= 0) || (item.getAttributeDefence(AttributeType.FIRE) > 0) || (item.getAttributeDefence(AttributeType.WATER) > 0) || (item.getAttributeDefence(AttributeType.WIND) > 0) || (item.getAttributeDefence(AttributeType.EARTH) > 0) || (item.getAttributeDefence(AttributeType.HOLY) > 0) || (item.getAttributeDefence(AttributeType.DARK) > 0)) { mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); } - else - { - for (byte i = 0; i < 6; i++) - { - if (item.getElementDefAttr(i) >= 0) - { - mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); - break; - } - } - } if (item.getEnchantOptions() != null) { @@ -154,6 +129,28 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket _list; private final long _money; - private double _taxRate = 0; + private final int _inventorySlots; + private final double _castleTaxRate; - public BuyList(L2BuyList list, long currentMoney, double taxRate) + public BuyList(ProductList list, L2PcInstance player, double castleTaxRate) { _listId = list.getListId(); _list = list.getProducts(); - _money = currentMoney; - _taxRate = taxRate; + _money = player.getAdena(); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); + _castleTaxRate = castleTaxRate; } @Override @@ -47,23 +49,14 @@ public final class BuyList extends AbstractItemPacket packet.writeD(0x00); // Type BUY packet.writeQ(_money); // current money packet.writeD(_listId); - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); packet.writeH(_list.size()); - for (Product product : _list) { if ((product.getCount() > 0) || !product.hasLimitedStock()) { writeItem(packet, product); - - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - packet.writeQ((long) (product.getPrice() * Config.RATE_SIEGE_GUARDS_PRICE * (1 + _taxRate))); - } - else - { - packet.writeQ((long) (product.getPrice() * (1 + _taxRate))); - } + packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate()))); } } return true; diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java index 88fca81605..91907ac910 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java @@ -21,6 +21,7 @@ import java.util.Set; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2DecoyInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent; @@ -133,7 +134,9 @@ public class CharInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrderAugument()) { - packet.writeD(_activeChar.getInventory().getPaperdollAugmentationId(slot)); // Confirmed + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + // packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_armorEnchant); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java index f4a9c145f7..f95772e8c5 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java @@ -29,6 +29,7 @@ import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.entity.Hero; @@ -189,7 +190,8 @@ public class CharSelectionInfo implements IClientOutgoingPacket packet.writeD(i == _activeId ? 1 : 0); packet.writeC(charInfoPackage.getEnchantEffect() > 127 ? 127 : charInfoPackage.getEnchantEffect()); - packet.writeD(charInfoPackage.getAugmentationId()); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(0) : 0); + // packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(1) : 0); // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. @@ -363,7 +365,10 @@ public class CharSelectionInfo implements IClientOutgoingPacket if (result.next()) { final int augment = result.getInt("augAttributes"); - charInfopackage.setAugmentationId(augment == -1 ? 0 : augment); + if (augment > 0) + { + charInfopackage.setAugmentation(AugmentationData.getInstance().getAugmentation(augment)); + } } } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java index f793112067..547f24c351 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import java.util.Collection; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.model.actor.L2Summon; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -28,14 +29,17 @@ import com.l2jmobius.gameserver.network.OutgoingPackets; */ public class ExBuySellList extends AbstractItemPacket { - private Collection _sellList = null; + private Collection _sellList; private Collection _refundList = null; private final boolean _done; - private double _taxRate = 1; + private final int _inventorySlots; + private double _castleTaxRate = 1; public ExBuySellList(L2PcInstance player, boolean done) { - _sellList = player.getInventory().getAvailableItems(false, false, false); + final L2Summon pet = player.getPet(); + _sellList = player.getInventory().getItems(item -> !item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); if (player.hasRefund()) { _refundList = player.getRefund().getItems(); @@ -43,10 +47,10 @@ public class ExBuySellList extends AbstractItemPacket _done = done; } - public ExBuySellList(L2PcInstance player, boolean done, double taxRate) + public ExBuySellList(L2PcInstance player, boolean done, double castleTaxRate) { this(player, done); - _taxRate = 1 - taxRate; + _castleTaxRate = 1 - castleTaxRate; } @Override @@ -55,7 +59,7 @@ public class ExBuySellList extends AbstractItemPacket OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet); packet.writeD(0x01); // Type SELL - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); if ((_sellList != null)) { @@ -63,15 +67,15 @@ public class ExBuySellList extends AbstractItemPacket for (L2ItemInstance item : _sellList) { writeItem(packet, item); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _castleTaxRate)); } - } + } else { packet.writeH(0x00); } - if ((_refundList != null) && !_refundList.isEmpty()) + if ((_refundList != null) && !_refundList.isEmpty()) { packet.writeH(_refundList.size()); int i = 0; @@ -79,7 +83,7 @@ public class ExBuySellList extends AbstractItemPacket { writeItem(packet, item); packet.writeD(i++); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((item.getItem().getReferencePrice() / 2) * item.getCount()); } } else diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java index e891ba5ade..791da494e7 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java @@ -26,15 +26,15 @@ public class ExPutItemResultForVariationCancel implements IClientOutgoingPacket private final int _itemId; private final int _itemAug1; private final int _itemAug2; - private final int _price; + private final long _price; - public ExPutItemResultForVariationCancel(L2ItemInstance item, int price) + public ExPutItemResultForVariationCancel(L2ItemInstance item, long price) { _itemObjId = item.getObjectId(); _itemId = item.getDisplayId(); _price = price; - _itemAug1 = ((short) item.getAugmentation().getAugmentationId()); - _itemAug2 = item.getAugmentation().getAugmentationId() >> 16; + _itemAug1 = item.getAugmentation().getOptionId(0); + _itemAug2 = item.getAugmentation().getOptionId(1); } @Override diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java index 8b176fa125..7f06f1007f 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java @@ -18,6 +18,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.enums.InventorySlot; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -73,10 +74,12 @@ public class ExUserInfoEquipSlot extends AbstractMaskPacket { if (containsMask(slot)) { + final Augmentation augment = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(18); // 2 + 4 * 4 packet.writeD(inventory.getPaperdollObjectId(slot.getSlot())); packet.writeD(inventory.getPaperdollItemId(slot.getSlot())); - packet.writeD(inventory.getPaperdollAugmentationId(slot.getSlot())); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); + // packet.writeD(augment != null ? augment.getOptionId(1) : 0); packet.writeD(inventory.getPaperdollItemVisualId(slot.getSlot())); } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java index ebec1b4ec5..43ff955f46 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -88,7 +89,9 @@ public class GMViewCharacterInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrder()) { - packet.writeD(_activeChar.getInventory().getPaperdollAugmentationId(slot)); + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + // packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeD(0x00); packet.writeD(0x00); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java index 86804e4c01..671eaae728 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java @@ -19,20 +19,22 @@ package com.l2jmobius.gameserver.network.serverpackets; import static com.l2jmobius.gameserver.data.xml.impl.MultisellData.PAGE_SIZE; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.ListContainer; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; -public final class MultiSellList implements IClientOutgoingPacket +public final class MultiSellList extends AbstractItemPacket { private int _size, _index; - private final ListContainer _list; + private final PreparedMultisellListHolder _list; private final boolean _finished; - public MultiSellList(ListContainer list, int index) + public MultiSellList(PreparedMultisellListHolder list, int index) { _list = list; _index = index; @@ -53,7 +55,7 @@ public final class MultiSellList implements IClientOutgoingPacket { OutgoingPackets.MULTI_SELL_LIST.writeId(packet); - packet.writeD(_list.getListId()); // list id + packet.writeD(_list.getId()); // list id packet.writeC(0x00); // GOD Unknown packet.writeD(1 + (_index / PAGE_SIZE)); // page started from 1 packet.writeD(_finished ? 0x01 : 0x00); // finished @@ -61,109 +63,58 @@ public final class MultiSellList implements IClientOutgoingPacket packet.writeD(_size); // list length packet.writeC(_list.isChanceMultisell() ? 0x01 : 0x00); // new multisell window - Entry ent; while (_size-- > 0) { - ent = _list.getEntries().get(_index++); - packet.writeD(ent.getEntryId()); - packet.writeC(ent.isStackable() ? 1 : 0); - packet.writeH(0x00); - packet.writeD(0x00); - packet.writeD(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); + final ItemInfo itemEnchantment = _list.getItemEnchantment(_index); + final MultisellEntryHolder entry = _list.getEntries().get(_index++); - packet.writeH(ent.getProducts().size()); - packet.writeH(ent.getIngredients().size()); + packet.writeD(_index); // Entry ID. Start from 1. + packet.writeC(entry.isStackable() ? 1 : 0); - for (Ingredient ing : ent.getProducts()) + // Those values will be passed down to MultiSellChoose packet. + packet.writeH(itemEnchantment != null ? itemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, itemEnchantment); + writeItemElemental(packet, itemEnchantment); + + packet.writeH(entry.getProducts().size()); + packet.writeH(entry.getIngredients().size()); + + for (ItemChanceHolder product : entry.getProducts()) { - packet.writeD(ing.getItemId()); - if (ing.getTemplate() != null) + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + final ItemInfo displayItemEnchantment = (_list.isMaintainEnchantment() && (itemEnchantment != null) && (template != null) && template.getClass().equals(itemEnchantment.getItem().getClass())) ? itemEnchantment : null; + + packet.writeD(product.getId()); + if (template != null) { - packet.writeQ(ing.getTemplate().getBodyPart()); - packet.writeH(ing.getTemplate().getType2()); + packet.writeQ(template.getBodyPart()); + packet.writeH(template.getType2()); } else { packet.writeQ(0); packet.writeH(65535); } - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - } + packet.writeQ(_list.getProductCount(product)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + packet.writeD((int) Math.ceil(product.getChance())); // chance + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); } - for (Ingredient ing : ent.getIngredients()) + for (ItemHolder ingredient : entry.getIngredients()) { - packet.writeD(ing.getItemId()); - packet.writeH(ing.getTemplate() != null ? ing.getTemplate().getType2() : 65535); - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - } + final L2Item template = ItemTable.getInstance().getTemplate(ingredient.getId()); + final ItemInfo displayItemEnchantment = ((itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) ? itemEnchantment : null; + + packet.writeD(ingredient.getId()); + packet.writeH(template != null ? template.getType2() : 65535); + packet.writeQ(_list.getIngredientCount(ingredient)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); } } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java deleted file mode 100644 index 433eae9095..0000000000 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.network.serverpackets; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.enums.AttributeType; -import com.l2jmobius.gameserver.enums.TaxType; -import com.l2jmobius.gameserver.model.actor.L2Summon; -import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.network.OutgoingPackets; - -public class SellList implements IClientOutgoingPacket -{ - private final L2PcInstance _activeChar; - private final L2MerchantInstance _merchant; - private final long _money; - private final List _sellList; - - public SellList(L2PcInstance player) - { - this(player, null); - } - - public SellList(L2PcInstance player, L2MerchantInstance lease) - { - _activeChar = player; - _merchant = lease; - _money = _activeChar.getAdena(); - - if (_merchant == null) - { - _sellList = new LinkedList<>(); - final L2Summon pet = _activeChar.getPet(); - for (L2ItemInstance item : _activeChar.getInventory().getItems()) - { - if (!item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))) // Pet is summoned and not the item that summoned the pet - { - _sellList.add(item); - } - } - } - else - { - _sellList = Collections.emptyList(); - } - } - - @Override - public boolean write(PacketWriter packet) - { - OutgoingPackets.SELL_LIST.writeId(packet); - - packet.writeQ(_money); - packet.writeD(_merchant == null ? 0x00 : 1000000 + _merchant.getTemplate().getId()); - packet.writeH(_sellList.size()); - - for (L2ItemInstance item : _sellList) - { - int price = item.getItem().getReferencePrice() / 2; - if (_merchant != null) - { - price -= (price * _merchant.getTotalTaxRate(TaxType.SELL)); - } - - packet.writeH(item.getItem().getType1()); - packet.writeD(item.getObjectId()); - packet.writeD(item.getDisplayId()); - packet.writeQ(item.getCount()); - packet.writeH(item.getItem().getType2()); - packet.writeH(item.isEquipped() ? 0x01 : 0x00); - packet.writeD(item.getItem().getBodyPart()); - packet.writeH(item.getEnchantLevel()); - packet.writeH(0x00); // TODO: Verify me - packet.writeH(item.getCustomType2()); - packet.writeQ(price); - // T1 - packet.writeH(item.getAttackAttributeType().getClientId()); - packet.writeH(item.getAttackAttributePower()); - for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) - { - packet.writeH(item.getDefenceAttribute(type)); - } - // Enchant Effects - for (int op : item.getEnchantOptions()) - { - packet.writeH(op); - } - } - return true; - } -} diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java index 438e259df2..cea58a11ac 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java @@ -20,8 +20,8 @@ import java.util.Collection; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -32,7 +32,7 @@ public class ShopPreviewList implements IClientOutgoingPacket private final long _money; private int _expertise; - public ShopPreviewList(L2BuyList list, long currentMoney, int expertiseIndex) + public ShopPreviewList(ProductList list, long currentMoney, int expertiseIndex) { _listId = list.getListId(); _list = list.getProducts(); diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeOtherAdd.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeOtherAdd.java index 2c0e8de7fc..50f74a4831 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeOtherAdd.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeOtherAdd.java @@ -37,7 +37,7 @@ public final class TradeOtherAdd extends AbstractItemPacket { OutgoingPackets.TRADE_OTHER_ADD.writeId(packet); packet.writeH(1); // item count - writeTradeItem(packet, _item); + writeItem(packet, _item); return true; } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeOwnAdd.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeOwnAdd.java index a36c067c1b..2f5a9b68bf 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeOwnAdd.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeOwnAdd.java @@ -37,7 +37,7 @@ public final class TradeOwnAdd extends AbstractItemPacket { OutgoingPackets.TRADE_OWN_ADD.writeId(packet); packet.writeH(1); // items added count - writeTradeItem(packet, _item); + writeItem(packet, _item); return true; } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java index caca53b0f5..5eb1460aab 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java @@ -42,7 +42,7 @@ public class TradeUpdate extends AbstractItemPacket packet.writeH(1); packet.writeH((_newCount > 0) && _item.getItem().isStackable() ? 3 : 2); - writeTradeItem(packet, _item); + writeItem(packet, _item); return true; } } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java index 24d153ef95..8d5ef1a54c 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java @@ -45,7 +45,7 @@ public class ExResponseCommissionBuyItem implements IClientOutgoingPacket if (_commissionItem != null) { final ItemInfo itemInfo = _commissionItem.getItemInfo(); - packet.writeD(itemInfo.getEnchant()); + packet.writeD(itemInfo.getEnchantLevel()); packet.writeD(itemInfo.getItem().getId()); packet.writeQ(itemInfo.getCount()); } diff --git a/L2J_Mobius_2.5_Underground/dist/game/config/Character.ini b/L2J_Mobius_2.5_Underground/dist/game/config/Character.ini index f731e8144e..af50adc3b7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/config/Character.ini +++ b/L2J_Mobius_2.5_Underground/dist/game/config/Character.ini @@ -553,10 +553,6 @@ AltGameCreationSpRate = 1 # Default: 2 AltGameCreationRareXpSpRate = 2 -# If set to False, blacksmiths don't take recipes from players inventory when crafting. -# Default: True -AltBlacksmithUseRecipes = True - # Store/Restore Dwarven Manufacture list # Keep manufacture shoplist after relog # Default: False diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0000382.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0000382.xml index d05356a23d..6070582cb9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0000382.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0000382.xml @@ -1,53 +1,53 @@ - + 31380 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0000383.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0000383.xml index 36e3fdba19..f9a1b4452e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0000383.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0000383.xml @@ -1,53 +1,53 @@ - + 31373 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335103.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335103.xml index c69a0adc37..5fba711e83 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335103.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335103.xml @@ -3,5 +3,5 @@ 35103 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335145.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335145.xml index ec17e22fb8..ae0307b2da 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335145.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335145.xml @@ -3,5 +3,5 @@ 35145 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335187.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335187.xml index ef525be37d..d080daa732 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335187.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335187.xml @@ -3,5 +3,5 @@ 35187 - +
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335229.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335229.xml index acc22eeee1..ad8c2e1cc6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335229.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335229.xml @@ -3,5 +3,5 @@ 35229 - +
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335230.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335230.xml index b90c9a4c22..a8adffc4b2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335230.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335230.xml @@ -3,5 +3,5 @@ 35230 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335231.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335231.xml index 1f7e23bf67..428fcd426c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335231.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335231.xml @@ -3,5 +3,5 @@ 35231 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335277.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335277.xml index 4e6c636983..ff25d9c7c0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335277.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335277.xml @@ -3,5 +3,5 @@ 35277 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335319.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335319.xml index f38fb0bf71..c20daba2b7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335319.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335319.xml @@ -3,5 +3,5 @@ 35319 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335366.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335366.xml index a3485c3efc..eb803c4097 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335366.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335366.xml @@ -3,5 +3,5 @@ 35366 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335383.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335383.xml index 5d8f360dee..9c74254a37 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335383.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335383.xml @@ -1,5 +1,5 @@ - + 35383 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335390.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335390.xml index b219307c04..7b23db5b63 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335390.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335390.xml @@ -1,5 +1,5 @@ - + 35390 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335421.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335421.xml index a7ae058c57..8e80c9d384 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335421.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335421.xml @@ -1,5 +1,5 @@ - + 35421 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335512.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335512.xml index 4b7f195288..618b8e9e97 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335512.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335512.xml @@ -3,5 +3,5 @@ 35512 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335558.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335558.xml index 61e5a9f0b3..5486e14ac4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335558.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335558.xml @@ -3,5 +3,5 @@ 35558 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335580.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335580.xml index 6ba9991715..427c6c2ace 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335580.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335580.xml @@ -1,5 +1,5 @@ - + 35580 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335582.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335582.xml index dcdaea99a4..2849a9823c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335582.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335582.xml @@ -1,5 +1,5 @@ - + 35582 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335584.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335584.xml index bc8e2fec98..6219e4c46c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335584.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335584.xml @@ -1,5 +1,5 @@ - + 35584 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335586.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335586.xml index 30e7bcc9cb..7aac1cf84d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335586.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335586.xml @@ -1,5 +1,5 @@ - + 35586 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335605.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335605.xml index 2a82ec8d75..16eccc7ddd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335605.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335605.xml @@ -1,5 +1,5 @@ - + 35605 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335644.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335644.xml index 97e9fc41dc..b6a51814be 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335644.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335644.xml @@ -3,5 +3,5 @@ 35644 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335645.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335645.xml index 205bbb24e0..eacf338808 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335645.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0335645.xml @@ -3,5 +3,5 @@ 35645 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0336456.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0336456.xml index 43e790cad0..7f926f898a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0336456.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0336456.xml @@ -3,5 +3,5 @@ 36456 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351001.xml index 2f7769194a..e88995d140 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351001.xml @@ -1,5 +1,5 @@ - + 35100 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351021.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351021.xml index f7adf3875a..6cc4206a6d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351021.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351021.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351022.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351022.xml index a5cb088853..85c2d9d62e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351022.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351022.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351023.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351023.xml index 7eead4f7dc..df952cfde0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351023.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351023.xml @@ -1,9 +1,9 @@ - + 35102 - - - + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351024.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351024.xml index bef9a9f1ff..7e19e6ae42 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351024.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351024.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351025.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351025.xml index 69c6f6af6d..32900e60e8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351025.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351025.xml @@ -1,8 +1,8 @@ - + 35102 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351026.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351026.xml index 58a26d4236..3f34104bef 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351026.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351026.xml @@ -1,26 +1,26 @@ - + 35102 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351421.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351421.xml index 3a640491b4..f4e85a2f4c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351421.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351421.xml @@ -1,5 +1,5 @@ - + 35142 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351441.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351441.xml index f32e38c86a..a21b2554f4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351441.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351441.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351442.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351442.xml index 0a671d4945..906455eb28 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351442.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351442.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351443.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351443.xml index ab83cdb179..c7211c5446 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351443.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351443.xml @@ -1,9 +1,9 @@ - + 35144 - - - + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351444.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351444.xml index 92b6372d8c..030931665f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351444.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351444.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351445.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351445.xml index 0958d4a81a..a48e7237f6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351445.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351445.xml @@ -1,8 +1,8 @@ - + 35144 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351446.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351446.xml index 8af7ec3f21..f5c6d54df3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351446.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351446.xml @@ -1,26 +1,26 @@ - + 35144 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351841.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351841.xml index 38b74dda2d..252563d558 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351841.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351841.xml @@ -1,5 +1,5 @@ - + 35184 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351861.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351861.xml index 36f1a4cfa6..93de34adc3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351861.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351861.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351862.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351862.xml index 0ac8eecd93..ace30c766a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351862.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351862.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351863.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351863.xml index 80dc328719..a5ee6ff042 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351863.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351863.xml @@ -1,9 +1,9 @@ - + 35186 - - - + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351864.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351864.xml index 06682728b6..64b579db8f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351864.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351864.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351865.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351865.xml index 83bf9e6402..9331ba7193 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351865.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351865.xml @@ -1,8 +1,8 @@ - + 35186 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351866.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351866.xml index 55fce9970e..4273c35718 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351866.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0351866.xml @@ -1,26 +1,26 @@ - + 35186 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352261.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352261.xml index f66eaa1615..0db97eea93 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352261.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352261.xml @@ -1,5 +1,5 @@ - + 35226 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352281.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352281.xml index 2b222fa598..c8da11c37b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352281.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352281.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352282.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352282.xml index 8bad8b7f88..e45b1db923 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352282.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352282.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352283.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352283.xml index 87cd9481f6..5fa6a8b8bc 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352283.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352283.xml @@ -1,9 +1,9 @@ - + 35228 - - - + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352284.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352284.xml index 62b8f1d41c..ec2af80da6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352284.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352284.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352285.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352285.xml index d389f8f520..e576154fc1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352285.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352285.xml @@ -1,8 +1,8 @@ - + 35228 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352286.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352286.xml index e85594e6d9..371594c8c0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352286.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352286.xml @@ -1,26 +1,26 @@ - + 35228 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352741.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352741.xml index 4550c3ce3c..9023bccee1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352741.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352741.xml @@ -1,5 +1,5 @@ - + 35274 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352761.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352761.xml index 3ebd07be31..a188befa2b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352761.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352761.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352762.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352762.xml index aced7ec0e5..7d81046cbc 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352762.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352762.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352763.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352763.xml index 035facf7b8..d5b5478d7a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352763.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352763.xml @@ -1,11 +1,11 @@ - + 35276 - - - - - + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352764.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352764.xml index 7dbe8182fa..0f6c2e61e5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352764.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352764.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352765.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352765.xml index 6a73e43392..2fc44382da 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352765.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352765.xml @@ -1,8 +1,8 @@ - + 35276 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352766.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352766.xml index dbf5b62a57..ac21e757f1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352766.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0352766.xml @@ -1,26 +1,26 @@ - + 35276 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353161.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353161.xml index 1acc907ae9..97cd7ab588 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353161.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353161.xml @@ -1,5 +1,5 @@ - + 35316 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353181.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353181.xml index 89e932a264..b9cac93a9b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353181.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353181.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353182.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353182.xml index 4a3bd8f461..fd8d084a9f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353182.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353182.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353183.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353183.xml index a0981c52b7..b4e6c0d00f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353183.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353183.xml @@ -1,9 +1,9 @@ - + 35318 - - - + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353184.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353184.xml index b8024cc5e5..e8986cc0b2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353184.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353184.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353185.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353185.xml index c270f3e916..36f9000538 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353185.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353185.xml @@ -1,8 +1,8 @@ - + 35318 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353186.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353186.xml index 1f5b86df6b..ef5fc103d5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353186.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353186.xml @@ -1,26 +1,26 @@ - + 35318 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353631.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353631.xml index 6cd0f9f83b..f0e259d7f6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353631.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353631.xml @@ -1,5 +1,5 @@ - + 35363 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353651.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353651.xml index e67fc3ff27..8361af5bd6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353651.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353651.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353652.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353652.xml index 08bdb3e69f..8d271d9b5a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353652.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353652.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353653.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353653.xml index a60c33027d..c199fd9a91 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353653.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353653.xml @@ -1,9 +1,9 @@ - + 35365 - - - + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353654.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353654.xml index 8f263e6076..34410877d3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353654.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353654.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353655.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353655.xml index 30483fb4eb..e5ddc20ed8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353655.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353655.xml @@ -1,8 +1,8 @@ - + 35365 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353656.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353656.xml index 47f61a5f8d..83db764b45 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353656.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0353656.xml @@ -1,26 +1,26 @@ - + 35365 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355091.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355091.xml index 64ce916c79..3cb72086ef 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355091.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355091.xml @@ -1,5 +1,5 @@ - + 35509 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355111.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355111.xml index d301023aab..224cc0331c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355111.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355111.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355112.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355112.xml index dde4df5a06..1af568b999 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355112.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355112.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355113.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355113.xml index f3d7809706..19aaf0588f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355113.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355113.xml @@ -1,11 +1,11 @@ - + 35511 - - - - - + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355114.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355114.xml index 082dde48cc..759597ddd0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355114.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355114.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355115.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355115.xml index 0662473717..546391b703 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355115.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355115.xml @@ -1,8 +1,8 @@ - + 35511 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355116.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355116.xml index 4c5e229488..36b173d77f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355116.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355116.xml @@ -1,26 +1,26 @@ - + 35511 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355551.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355551.xml index 8dfce69017..9da26ac5df 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355551.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355551.xml @@ -1,5 +1,5 @@ - + 35555 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355571.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355571.xml index 8baf9d5daa..c7f4be0fd3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355571.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355571.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355572.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355572.xml index 643f113a5a..a899f3e0f2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355572.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355572.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355573.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355573.xml index 0a686f4e94..3c4ea6cf29 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355573.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355573.xml @@ -1,9 +1,9 @@ - + 35557 - - - + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355574.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355574.xml index 91d2143aeb..6f1dac7286 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355574.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355574.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355575.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355575.xml index 64cbf11f50..632bcab90f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355575.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355575.xml @@ -1,8 +1,8 @@ - + 35557 - - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355576.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355576.xml index 03e5256308..7e2ba73d71 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355576.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0355576.xml @@ -1,26 +1,26 @@ - + 35557 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366531.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366531.xml index f124552697..9f21593f19 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366531.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366531.xml @@ -1,5 +1,5 @@ - + 36653 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366541.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366541.xml index b17cd76ac9..4c559b6ff1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366541.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366541.xml @@ -1,5 +1,5 @@ - + 36654 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366551.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366551.xml index e2af00ff71..f7b4c8cc88 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366551.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366551.xml @@ -1,5 +1,5 @@ - + 36655 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366561.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366561.xml index 28b7c008ea..d19e30ec6b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366561.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366561.xml @@ -1,5 +1,5 @@ - + 36656 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366571.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366571.xml index 459785aade..7a7fe9e445 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366571.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366571.xml @@ -1,5 +1,5 @@ - + 36657 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366581.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366581.xml index a6e07f5bd4..e845a51d46 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366581.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366581.xml @@ -1,5 +1,5 @@ - + 36658 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366591.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366591.xml index da24213c75..9159b2a59a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366591.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366591.xml @@ -1,5 +1,5 @@ - + 36659 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366601.xml index 71326ac100..6be90ac82f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366601.xml @@ -1,5 +1,5 @@ - + 36660 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366611.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366611.xml index 0855deaa00..c95462bee0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366611.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/0366611.xml @@ -1,5 +1,5 @@ - + 36661 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/1312801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/1312801.xml index e551478d59..244b670c3f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/1312801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/1312801.xml @@ -1,5 +1,5 @@ - + 13128 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000100.xml index 309643b83f..3020bec80b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000100.xml @@ -1,5 +1,5 @@ - + 30001 @@ -30,4 +30,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000101.xml index a4cbc0278f..355fd56dba 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000101.xml @@ -1,5 +1,5 @@ - + 30001 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000200.xml index 7944ea4f44..367b78f6f1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000200.xml @@ -1,5 +1,5 @@ - + 30002 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000201.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000201.xml index 77467ca3e8..a5dab01833 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000201.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000201.xml @@ -1,5 +1,5 @@ - + 30002 @@ -34,4 +34,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000300.xml index 799ac4784e..98f72b7a3b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000300.xml @@ -1,5 +1,5 @@ - + 30003 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000301.xml index 574fb6e530..d8fe4e34c6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000301.xml @@ -1,5 +1,5 @@ - + 30003 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000400.xml index fbe7c5dfd5..dd1f6c38b0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3000400.xml @@ -1,5 +1,5 @@ - + 30004 @@ -27,7 +27,6 @@ - @@ -52,4 +51,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3004700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3004700.xml index 8a5b084ce1..2d0b270e9c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3004700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3004700.xml @@ -1,5 +1,5 @@ - + 30047 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006000.xml index 5526b07ccd..23c01f239a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006000.xml @@ -1,5 +1,5 @@ - + 30060 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006001.xml index 59b4bec0f0..df6e62e5f5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006001.xml @@ -1,5 +1,5 @@ - + 30060 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006100.xml index 430ba9f8e4..3645494858 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006100.xml @@ -1,5 +1,5 @@ - + 30061 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006101.xml index 74250f09e4..e8267e3455 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006101.xml @@ -1,5 +1,5 @@ - + 30061 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006200.xml index 9510b6f513..b7fd95644d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006200.xml @@ -1,5 +1,5 @@ - + 30062 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006201.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006201.xml index 8d3a7b20ce..d594c7d9a7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006201.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006201.xml @@ -1,5 +1,5 @@ - + 30062 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006202.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006202.xml index 5bf9240df1..12cc6b5587 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006202.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006202.xml @@ -1,5 +1,5 @@ - + 30062 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006300.xml index 50520f9c68..0da7a583be 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006300.xml @@ -1,5 +1,5 @@ - + 30063 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006301.xml index 17fb26291d..0f7d8b8214 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3006301.xml @@ -1,5 +1,5 @@ - + 30063 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3007800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3007800.xml index 9ca9664c11..05eb3cb16a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3007800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3007800.xml @@ -1,81 +1,116 @@ - + 30078 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008100.xml index 49c5ac8c31..7b5968703c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008100.xml @@ -1,8 +1,7 @@ - + 30081 - 34190 @@ -10,11 +9,13 @@ + + @@ -47,7 +48,12 @@ - + + + + + + @@ -77,7 +83,6 @@ - @@ -98,7 +103,6 @@ - diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008101.xml index aa91428d67..b77e878362 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008101.xml @@ -1,5 +1,5 @@ - + 30081 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008200.xml index 5d7b07dbea..a127b556cf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008200.xml @@ -1,5 +1,5 @@ - + 30082 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008201.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008201.xml index b6a5b102af..1c4e759596 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008201.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008201.xml @@ -1,5 +1,5 @@ - + 30082 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008400.xml index 6e0c19b256..352ae71092 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008400.xml @@ -1,5 +1,5 @@ - + 30084 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008401.xml index 55d6aa9265..542b338565 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008401.xml @@ -1,5 +1,5 @@ - + 30084 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008500.xml index b0db68ddf9..78b2d1a7cf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008500.xml @@ -1,5 +1,5 @@ - + 30085 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008701.xml index ab088e77cd..6a58148cd2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008701.xml @@ -1,5 +1,5 @@ - + 30087 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008800.xml index d30b44e5de..0a005c2190 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3008800.xml @@ -1,5 +1,5 @@ - + 30088 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009000.xml index b596da225e..5e68eb6ef9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009000.xml @@ -1,5 +1,5 @@ - + 30090 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009001.xml index 2a9789db15..c37825efcd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009001.xml @@ -1,5 +1,5 @@ - + 30090 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009100.xml index 975660df9e..c6d5ae5550 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009100.xml @@ -1,5 +1,5 @@ - + 30091 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009101.xml index 59fb3b84e3..85f1ff1b4d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009101.xml @@ -1,5 +1,5 @@ - + 30091 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009300.xml index 3f56bafab4..76696df49c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009300.xml @@ -1,5 +1,5 @@ - + 30093 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009400.xml index 0021fd0bdf..12dbdb3977 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009400.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009401.xml index 8bed85e5d1..86e29204b6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009401.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009402.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009402.xml index cda9d39e1a..66ebbac372 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009402.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3009402.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013500.xml index 82877098bd..7c60c99b0f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013500.xml @@ -1,5 +1,5 @@ - + 30135 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013501.xml index 9b42b7f241..06f769d895 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013501.xml @@ -1,5 +1,5 @@ - + 30135 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013600.xml index 7ce171122a..8924cc4f14 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013600.xml @@ -1,5 +1,5 @@ - + 30136 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013601.xml index 9be0509e76..00d4bebb92 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013601.xml @@ -1,5 +1,5 @@ - + 30136 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013700.xml index 3d30071388..9bff93e506 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013700.xml @@ -1,5 +1,5 @@ - + 30137 @@ -108,4 +108,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013800.xml index 26c101a01d..3c1c47ac8d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013800.xml @@ -1,5 +1,5 @@ - + 30138 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013801.xml index 60e5e499f9..9796701e83 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3013801.xml @@ -1,5 +1,5 @@ - + 30138 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014700.xml index bccf348037..240b37c575 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014700.xml @@ -1,5 +1,5 @@ - + 30147 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014701.xml index 6da2295ae7..73fbe9848d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014701.xml @@ -1,5 +1,5 @@ - + 30147 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014800.xml index 8678bde7bb..e5a6bf931f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014800.xml @@ -1,5 +1,5 @@ - + 30148 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014801.xml index 977eedeab2..12d1f30036 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014801.xml @@ -1,5 +1,5 @@ - + 30148 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014900.xml index 4ad0978496..a46c7ecfe8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014900.xml @@ -1,5 +1,5 @@ - + 30149 @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014901.xml index 5e1395208c..5cbf611f38 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3014901.xml @@ -1,5 +1,5 @@ - + 30149 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3015000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3015000.xml index 92e65e15f2..b58949ce4c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3015000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3015000.xml @@ -1,5 +1,5 @@ - + 30150 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016300.xml index 077f1876a1..dbda979b38 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016300.xml @@ -1,5 +1,5 @@ - + 30163 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016400.xml index 1454cfb5ac..1f0df91229 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016400.xml @@ -1,5 +1,5 @@ - + 30164 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016500.xml index aca772d787..48ee4af133 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016500.xml @@ -1,5 +1,5 @@ - + 30165 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016501.xml index 7dba4e131b..32b2a5cf41 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016501.xml @@ -1,5 +1,5 @@ - + 30165 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016601.xml index bfb3e3d1ef..0d750ea8b6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3016601.xml @@ -1,5 +1,5 @@ - + 30166 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017800.xml index 505544d5bc..2c12406e46 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017800.xml @@ -1,5 +1,5 @@ - + 30178 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017801.xml index 3c7ea675c2..b136f17dce 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017801.xml @@ -1,5 +1,5 @@ - + 30178 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017900.xml index d73620d8a8..1285bf5c04 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017900.xml @@ -1,5 +1,5 @@ - + 30179 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017901.xml index cbcb623260..b57367e413 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3017901.xml @@ -1,5 +1,5 @@ - + 30179 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018000.xml index b01148851d..58fd785bf8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018000.xml @@ -1,5 +1,5 @@ - + 30180 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018001.xml index ecaeab10f4..c0e75f739e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018001.xml @@ -1,5 +1,5 @@ - + 30180 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018100.xml index 6bfe46e4a0..d1dacdaf27 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3018100.xml @@ -1,5 +1,5 @@ - + 30181 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020700.xml index a99aeb36d6..2f8ab58ee6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020700.xml @@ -1,5 +1,5 @@ - + 30207 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020701.xml index b415d6d4e3..3a8856b5d9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020701.xml @@ -1,5 +1,5 @@ - + 30207 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020800.xml index 4750f26a53..7f9f5c2a84 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020800.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020801.xml index 94149acb40..5d661cc641 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020801.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020802.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020802.xml index ebdbf6d3e8..e2912593e2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020802.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020802.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020803.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020803.xml index e285dbd868..33d617f651 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020803.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020803.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020900.xml index 72eb021070..f8f4d8822d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3020900.xml @@ -1,5 +1,5 @@ - + 30209 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023000.xml index e1676775e2..3a74565ab5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023000.xml @@ -1,5 +1,5 @@ - + 30230 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023001.xml index 3901f20315..f2bd84932c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023001.xml @@ -1,5 +1,5 @@ - + 30230 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023100.xml index ee38959bcd..39b448efdd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3023100.xml @@ -1,5 +1,5 @@ - + 30231 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025300.xml index e8f292cef7..89ee9799e8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025300.xml @@ -1,5 +1,5 @@ - + 30253 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025301.xml index b9f7e27133..4603a5a685 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025301.xml @@ -1,5 +1,5 @@ - + 30253 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025400.xml index f3bd028fe4..b25f7c2634 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025400.xml @@ -1,5 +1,5 @@ - + 30254 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025401.xml index a01a0d95ff..5870b5c91a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3025401.xml @@ -1,5 +1,5 @@ - + 30254 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3029400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3029400.xml index 88339b5469..47bb430e22 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3029400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3029400.xml @@ -1,5 +1,5 @@ - + 30294 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3030100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3030100.xml index e8a7ccd563..625930ba63 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3030100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3030100.xml @@ -1,5 +1,5 @@ - + 30301 @@ -9,11 +9,13 @@ + + @@ -46,6 +48,12 @@ + + + + + + @@ -75,7 +83,6 @@ - @@ -96,7 +103,6 @@ - @@ -107,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3030101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3030101.xml index 5f9f186327..cfbde210ef 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3030101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3030101.xml @@ -1,5 +1,5 @@ - + 30301 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031300.xml index d2c41b945c..f12b52dbc0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031300.xml @@ -1,5 +1,5 @@ - + 30313 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031400.xml index bef42ee4a4..a70bd2a68f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031400.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031401.xml index ce92ec84e7..c55eb598d0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031401.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031402.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031402.xml index a8f069398a..cc46756624 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031402.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031402.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031500.xml index b3ddb7eadb..bef1c865f8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3031500.xml @@ -1,5 +1,5 @@ - + 30315 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3032100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3032100.xml index cd33aa8c92..98a5e4598a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3032100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3032100.xml @@ -1,5 +1,5 @@ - + 30321 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3032101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3032101.xml index 45f097bc50..79c0ef6f34 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3032101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3032101.xml @@ -1,5 +1,5 @@ - + 30321 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3038700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3038700.xml index 6b2346e650..fd30e9fc4f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3038700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3038700.xml @@ -1,5 +1,5 @@ - + 30387 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3042000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3042000.xml index 8ebf130017..3122f0cc74 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3042000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3042000.xml @@ -1,5 +1,5 @@ - + 30420 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3043600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3043600.xml index 972b0ddc1b..5ede4b6022 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3043600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3043600.xml @@ -1,5 +1,5 @@ - + 30436 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3043700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3043700.xml index f96fcacec9..2ad6c59ff9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3043700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3043700.xml @@ -1,5 +1,5 @@ - + 30437 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051600.xml index 1034512a0d..7a107bb9d5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051600.xml @@ -1,5 +1,5 @@ - + 30516 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051601.xml index 36ac194b8a..6f83fdc514 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051601.xml @@ -1,5 +1,5 @@ - + 30516 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051700.xml index 1f47fb7d37..3b8d6f504f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051700.xml @@ -1,5 +1,5 @@ - + 30517 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051701.xml index 4d9eb38ab6..cfa2ce8508 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051701.xml @@ -1,5 +1,5 @@ - + 30517 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051800.xml index 4fbd11c07f..fdd8e62cdf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051800.xml @@ -1,5 +1,5 @@ - + 30518 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051900.xml index 348a20045d..d3d077b818 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051900.xml @@ -1,5 +1,5 @@ - + 30519 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051901.xml index 46a7179721..adac7cb3dc 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3051901.xml @@ -1,5 +1,5 @@ - + 30519 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055800.xml index 6286969148..b5d017f4a5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055800.xml @@ -1,5 +1,5 @@ - + 30558 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055801.xml index 4138155ceb..dcaae0ac98 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055801.xml @@ -1,5 +1,5 @@ - + 30558 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055900.xml index 65a015d431..77c46b2332 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055900.xml @@ -1,5 +1,5 @@ - + 30559 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055901.xml index 11f2ccad75..a42aba6e8a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3055901.xml @@ -1,5 +1,5 @@ - + 30559 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056000.xml index 978cab75ac..eab17fabea 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056000.xml @@ -1,5 +1,5 @@ - + 30560 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056001.xml index 27682a5b80..b6dd48ba73 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056001.xml @@ -1,5 +1,5 @@ - + 30560 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056100.xml index 1d40dc6d86..4a4f97713b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3056100.xml @@ -1,5 +1,5 @@ - + 30561 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3068400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3068400.xml index 9b5ab9cf56..01c59e4bda 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3068400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3068400.xml @@ -1,5 +1,5 @@ - + 30684 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3068401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3068401.xml index 4aaa8276ee..b763e8d2b0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3068401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3068401.xml @@ -1,5 +1,5 @@ - + 30684 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3073100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3073100.xml index ce0b4fd50c..4d397fa66e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3073100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3073100.xml @@ -1,5 +1,5 @@ - + 30731 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082700.xml index 25dc623035..3843f3fd38 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082700.xml @@ -1,5 +1,5 @@ - + 30827 @@ -68,4 +68,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082800.xml index 048f8c0e93..3adb732baa 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082800.xml @@ -1,5 +1,5 @@ - + 30828 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082900.xml index 587aa02de3..2d89a5d83e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3082900.xml @@ -1,5 +1,5 @@ - + 30829 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083000.xml index 72d67fe651..a0c62f1561 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083000.xml @@ -1,5 +1,5 @@ - + 30830 @@ -68,4 +68,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083100.xml index 46a65ac813..c5f8677a5f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083100.xml @@ -1,5 +1,5 @@ - + 30831 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083400.xml index d5e024cd18..86eadb9ebf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083400.xml @@ -1,5 +1,5 @@ - + 30834 @@ -91,4 +91,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083401.xml index b3d26ae56f..317ef34a8c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083401.xml @@ -1,5 +1,5 @@ - + 30834 @@ -52,4 +52,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083700.xml index 7eb1b461f0..cc9b286ba0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083700.xml @@ -1,5 +1,5 @@ - + 30837 @@ -81,4 +81,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083701.xml index 0c263f977a..0c42bc0d8e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083701.xml @@ -1,5 +1,5 @@ - + 30837 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083800.xml index 8fc56ae2d9..6b4f527bb7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083800.xml @@ -1,5 +1,5 @@ - + 30838 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083801.xml index 28f58759de..0a698f11f0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083801.xml @@ -1,5 +1,5 @@ - + 30838 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083900.xml index f5fd34e39d..7d16233aee 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3083900.xml @@ -1,5 +1,5 @@ - + 30839 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084000.xml index 72b0181aec..dc996387e8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084000.xml @@ -1,5 +1,5 @@ - + 30840 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084100.xml index dd4cf41363..e25ea42b3e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084100.xml @@ -1,5 +1,5 @@ - + 30841 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084101.xml index 528d8ed788..d78fa5ba0f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084101.xml @@ -1,5 +1,5 @@ - + 30841 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084102.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084102.xml index e452b9ca59..10da2eebdd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084102.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084102.xml @@ -1,5 +1,5 @@ - + 30841 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084200.xml index b1be2e7915..30481b42ee 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3084200.xml @@ -1,5 +1,5 @@ - + 30842 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3086900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3086900.xml index 89ba97c589..9a538a35e0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3086900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3086900.xml @@ -1,5 +1,5 @@ - + 30869 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3087900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3087900.xml index a95959510d..bbdf7f37bc 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3087900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3087900.xml @@ -1,5 +1,5 @@ - + 30879 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089000.xml index a558c92485..aa26a4cdc8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089000.xml @@ -1,5 +1,5 @@ - + 30890 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089001.xml index a6896a55c5..e2821435e8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089001.xml @@ -1,5 +1,5 @@ - + 30890 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089100.xml index 2cfc65b77e..7682a4f779 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089100.xml @@ -1,5 +1,5 @@ - + 30891 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089101.xml index 3de65307ed..cb6dc779ab 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089101.xml @@ -1,5 +1,5 @@ - + 30891 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089200.xml index b849a81903..3109ed3df3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089200.xml @@ -1,5 +1,5 @@ - + 30892 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089300.xml index d4f90facde..055dcd499a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089300.xml @@ -1,5 +1,5 @@ - + 30893 @@ -9,11 +9,13 @@ + + @@ -46,6 +48,12 @@ + + + + + + @@ -75,7 +83,6 @@ - @@ -96,7 +103,6 @@ - @@ -107,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089301.xml index 5f22a3f64a..662fe1af0c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3089301.xml @@ -1,5 +1,5 @@ - + 30893 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3104500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3104500.xml index 819e516fc0..a010eabc4d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3104500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3104500.xml @@ -1,81 +1,116 @@ - + 31045 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3106700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3106700.xml index 361daa056d..17d929e580 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3106700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3106700.xml @@ -1,5 +1,5 @@ - + 31067 @@ -86,4 +86,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125600.xml index e83a2ccfe8..ed51c2d6e5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125600.xml @@ -1,5 +1,5 @@ - + 31256 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125601.xml index 658690aadc..d19b106aca 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125601.xml @@ -1,5 +1,5 @@ - + 31256 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125602.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125602.xml index 34a0c96e1a..5a0284dd2e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125602.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125602.xml @@ -1,5 +1,5 @@ - + 31256 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125603.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125603.xml index fa522e73a5..e308fcddf0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125603.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125603.xml @@ -1,5 +1,5 @@ - + 31256 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125700.xml index 554ea9d37b..76af30c423 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125700.xml @@ -1,5 +1,5 @@ - + 31257 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125701.xml index b53d14ba4d..c88702e68f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125701.xml @@ -1,5 +1,5 @@ - + 31257 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125702.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125702.xml index 24e0ec13bc..40835089c1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125702.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125702.xml @@ -1,5 +1,5 @@ - + 31257 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125703.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125703.xml index 759ee3170e..e0bfa28ece 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125703.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125703.xml @@ -1,5 +1,5 @@ - + 31257 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125800.xml index 76a7c1c46e..0aafd5e660 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125800.xml @@ -1,5 +1,5 @@ - + 31258 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125801.xml index 9bdba27a05..f0d3e4065b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125801.xml @@ -1,5 +1,5 @@ - + 31258 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125802.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125802.xml index 8f5bf9ca08..e88c3c1bff 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125802.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125802.xml @@ -1,5 +1,5 @@ - + 31258 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125803.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125803.xml index a1fc8f5256..d4a0515338 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125803.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125803.xml @@ -1,5 +1,5 @@ - + 31258 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125900.xml index ffc2acdb5d..d717f65dc4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125900.xml @@ -1,5 +1,5 @@ - + 31259 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125901.xml index 353f910744..e0500de022 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125901.xml @@ -1,5 +1,5 @@ - + 31259 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125902.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125902.xml index 0d0ad94603..c423f23bd0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125902.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125902.xml @@ -1,5 +1,5 @@ - + 31259 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125903.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125903.xml index cabdd801b2..6ea4724bc5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125903.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3125903.xml @@ -1,5 +1,5 @@ - + 31259 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126000.xml index f9c04ce381..4dd2c64fb3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126000.xml @@ -1,5 +1,5 @@ - + 31260 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126001.xml index de434b8efe..9561e91efe 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126001.xml @@ -1,5 +1,5 @@ - + 31260 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126100.xml index cac307a7e5..c89726c2e7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126100.xml @@ -1,5 +1,5 @@ - + 31261 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126101.xml index 6c893b04d6..d8054cb689 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126101.xml @@ -1,5 +1,5 @@ - + 31261 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126200.xml index 74b25beb63..8b2185b6df 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126200.xml @@ -1,5 +1,5 @@ - + 31262 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126300.xml index 72d320f4b6..348cf06868 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126300.xml @@ -1,5 +1,5 @@ - + 31263 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126301.xml index ba7034bdf2..def9ecc072 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126301.xml @@ -1,5 +1,5 @@ - + 31263 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126500.xml index b1c2e0bf5f..d7c73889cb 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3126500.xml @@ -1,5 +1,5 @@ - + 31265 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3127400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3127400.xml index b354fd9eb4..8b6925221a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3127400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3127400.xml @@ -1,5 +1,5 @@ - + 31274 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130000.xml index 340a30e4a4..9bb77060b4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130000.xml @@ -1,5 +1,5 @@ - + 31300 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130001.xml index 99669c3a71..d8d9dbb755 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130001.xml @@ -1,5 +1,5 @@ - + 31300 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130100.xml index fc3e9d1622..7be1df6352 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130100.xml @@ -1,5 +1,5 @@ - + 31301 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130101.xml index 1528dc42dc..687912cbaf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130101.xml @@ -1,5 +1,5 @@ - + 31301 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130200.xml index 5f7dd538ab..c2a06d75bd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130200.xml @@ -1,5 +1,5 @@ - + 31302 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130201.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130201.xml index 738118f186..3057144246 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130201.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130201.xml @@ -1,5 +1,5 @@ - + 31302 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130300.xml index a5ff2459b8..73fd46bef4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130300.xml @@ -1,5 +1,5 @@ - + 31303 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130301.xml index 8d61da58f6..a80a82cd4f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130301.xml @@ -1,5 +1,5 @@ - + 31303 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130400.xml index 1396ba019d..315d202b36 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130400.xml @@ -1,5 +1,5 @@ - + 31304 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130500.xml index 03804356fe..8fead7714a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130500.xml @@ -1,5 +1,5 @@ - + 31305 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130600.xml index 4774f3d4ab..22deacb502 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130600.xml @@ -1,5 +1,5 @@ - + 31306 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130700.xml index 6a424c58ea..3fcfecfdcd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130700.xml @@ -1,5 +1,5 @@ - + 31307 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130701.xml index 1281659b95..4b0463093c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130701.xml @@ -1,5 +1,5 @@ - + 31307 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130900.xml index e8014e8971..83c89722c6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3130900.xml @@ -1,5 +1,5 @@ - + 31309 @@ -86,4 +86,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3131800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3131800.xml index 079526d9e6..31e46fdbb6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3131800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3131800.xml @@ -1,5 +1,5 @@ - + 31318 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3131900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3131900.xml index ae2bf84aef..cdf8a9f934 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3131900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3131900.xml @@ -1,5 +1,5 @@ - + 31319 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3135100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3135100.xml index 4dd1278d97..caf5d20205 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3135100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3135100.xml @@ -1,5 +1,5 @@ - + 31351 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3136600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3136600.xml index a87904816d..bcc26fa7cf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3136600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3136600.xml @@ -1,5 +1,5 @@ - + 31366 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3138600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3138600.xml index a9a9541489..47823de404 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3138600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3138600.xml @@ -1,5 +1,5 @@ - + 31386 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141300.xml index 21d84fbab6..7bf08c2b82 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141300.xml @@ -1,5 +1,5 @@ - + 31413 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141400.xml index 3d1229325c..b6df861de7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141400.xml @@ -1,5 +1,5 @@ - + 31414 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141500.xml index 63e2ca7fdc..aa31f97c3e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141500.xml @@ -1,5 +1,5 @@ - + 31415 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141600.xml index 1bec460006..bcd60c83c4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141600.xml @@ -1,5 +1,5 @@ - + 31416 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141700.xml index 60e4778dd6..96300413f1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141700.xml @@ -1,5 +1,5 @@ - + 31417 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141800.xml index 8ab2138e78..f390f89f3e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141800.xml @@ -1,5 +1,5 @@ - + 31418 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141900.xml index 7b6941f4d1..f8afc28bf0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3141900.xml @@ -1,5 +1,5 @@ - + 31419 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142000.xml index 5d3899e9f7..7a5d1ceedd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142000.xml @@ -1,5 +1,5 @@ - + 31420 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142100.xml index c35a2b3ab7..236aad2a43 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142100.xml @@ -1,5 +1,5 @@ - + 31421 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142200.xml index 1d122950e4..6858b456ec 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142200.xml @@ -1,5 +1,5 @@ - + 31422 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142300.xml index cf243f261b..a4bfdcfcd7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142300.xml @@ -1,5 +1,5 @@ - + 31423 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142400.xml index f0eef17f26..1f727940d2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142400.xml @@ -1,5 +1,5 @@ - + 31424 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142500.xml index 77f79efc3a..9580ad707d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142500.xml @@ -1,5 +1,5 @@ - + 31425 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142600.xml index fab5b386b3..6796c56597 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142600.xml @@ -1,5 +1,5 @@ - + 31426 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142700.xml index a44fc322ab..b4ae4053e6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142700.xml @@ -1,5 +1,5 @@ - + 31427 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142800.xml index e5539d5238..95510cf96c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142800.xml @@ -1,5 +1,5 @@ - + 31428 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142900.xml index fc06a66383..57f63b53b1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3142900.xml @@ -1,5 +1,5 @@ - + 31429 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143000.xml index 063f61fb37..4cc499ca88 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143000.xml @@ -1,5 +1,5 @@ - + 31430 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143100.xml index 50cc465abc..14add57056 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143100.xml @@ -1,5 +1,5 @@ - + 31431 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143200.xml index 194f0b87a3..07bb9b3512 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143200.xml @@ -1,5 +1,5 @@ - + 31432 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143300.xml index 21ebbc9ba8..7082b56454 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143300.xml @@ -1,5 +1,5 @@ - + 31433 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143400.xml index fe67847877..a503222fa5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143400.xml @@ -1,5 +1,5 @@ - + 31434 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143500.xml index a256a32890..b0265fa5ef 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143500.xml @@ -1,5 +1,5 @@ - + 31435 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143600.xml index bef64fb21c..0fab588ef1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143600.xml @@ -1,5 +1,5 @@ - + 31436 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143700.xml index dbdd1a1738..686360370d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143700.xml @@ -1,5 +1,5 @@ - + 31437 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143800.xml index 87cc571e71..3333c26636 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143800.xml @@ -1,5 +1,5 @@ - + 31438 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143900.xml index 6e36408c86..32bbce1b32 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3143900.xml @@ -1,5 +1,5 @@ - + 31439 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144000.xml index e45a96ca11..32e1a2d935 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144000.xml @@ -1,5 +1,5 @@ - + 31440 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144100.xml index a915fe79f8..5cb91a2d08 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144100.xml @@ -1,5 +1,5 @@ - + 31441 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144200.xml index 3146bf7dc6..654fd41101 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144200.xml @@ -1,17 +1,17 @@ - + 31442 - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144300.xml index 42c0113a09..7101dc7ca9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144300.xml @@ -1,5 +1,5 @@ - + 31443 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144400.xml index 0fb5fa1de5..d743f68e6c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144400.xml @@ -1,5 +1,5 @@ - + 31444 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144500.xml index c2fce59cd3..de938e45de 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3144500.xml @@ -1,5 +1,5 @@ - + 31445 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156300.xml index ea3f99ad45..8daa3e35d2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156300.xml @@ -1,5 +1,5 @@ - + 31563 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156700.xml index 6d0ee28811..c213b286ba 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156700.xml @@ -1,5 +1,5 @@ - + 31567 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156800.xml index fdb1b568ba..8110e7135a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3156800.xml @@ -1,5 +1,5 @@ - + 31568 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157000.xml index 5484b76ab8..ac69379fcf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157000.xml @@ -1,5 +1,5 @@ - + 31570 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157100.xml index d8fa2029a3..c070491193 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157100.xml @@ -1,5 +1,5 @@ - + 31571 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157200.xml index 4e8398b9fe..83dc91f2ff 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157200.xml @@ -1,5 +1,5 @@ - + 31572 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157300.xml index 69cafd073a..14313bd208 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157300.xml @@ -1,5 +1,5 @@ - + 31573 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157400.xml index 1ac63f46dd..2052f17a66 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157400.xml @@ -1,5 +1,5 @@ - + 31574 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157500.xml index fcf62bee8c..e62610f8ac 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157500.xml @@ -1,5 +1,5 @@ - + 31575 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157600.xml index 9d9447b933..532fd49209 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157600.xml @@ -1,5 +1,5 @@ - + 31576 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157700.xml index b7b667ece6..2cbcd82911 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157700.xml @@ -1,5 +1,5 @@ - + 31577 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157800.xml index 739b5dc625..95f15512e3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157800.xml @@ -1,5 +1,5 @@ - + 31578 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157900.xml index 7446d877cd..b3b990905f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3157900.xml @@ -1,5 +1,5 @@ - + 31579 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166600.xml index b326f8222c..bc22d13140 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166600.xml @@ -1,5 +1,5 @@ - + 31666 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166700.xml index db105df248..ae62f73b31 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166700.xml @@ -1,5 +1,5 @@ - + 31667 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166800.xml index a53bc3746c..dc44cebca3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166800.xml @@ -1,5 +1,5 @@ - + 31668 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166900.xml index 521962b456..dc1a50c4da 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3166900.xml @@ -1,5 +1,5 @@ - + 31669 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3167000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3167000.xml index e610f9c0e2..23abfe3c48 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3167000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3167000.xml @@ -1,5 +1,5 @@ - + 31670 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3169600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3169600.xml index 034e1a9975..ecc1433ab0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3169600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3169600.xml @@ -1,5 +1,5 @@ - + 31696 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3169700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3169700.xml index e2db54a589..62e1b5f2e5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3169700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3169700.xml @@ -1,5 +1,5 @@ - + 31697 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175601.xml index 746b4dc1c0..6c0a1b7326 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175601.xml @@ -1,174 +1,174 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175602.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175602.xml index bab8fc8800..5493371fb3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175602.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175602.xml @@ -1,44 +1,44 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175603.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175603.xml index a0b0f1f789..7a63460eac 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175603.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175603.xml @@ -1,120 +1,120 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175604.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175604.xml index 3f2f3f2bb1..7b4a19573c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175604.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175604.xml @@ -1,161 +1,161 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175605.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175605.xml index d3f9c025d4..c756f4ec23 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175605.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175605.xml @@ -1,144 +1,144 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175606.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175606.xml index f5f4030195..e121d0f96e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175606.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175606.xml @@ -1,155 +1,155 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175607.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175607.xml index 376023d33e..4f51da5d22 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175607.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175607.xml @@ -1,162 +1,162 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175608.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175608.xml index d063b94daa..19661dcecf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175608.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3175608.xml @@ -1,119 +1,119 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194500.xml index fb1f967e70..77f8dadd26 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194500.xml @@ -1,5 +1,5 @@ - + 31945 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194501.xml index 4df13d9752..961716e0a5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194501.xml @@ -1,5 +1,5 @@ - + 31945 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194600.xml index b2317a6383..6c2507af23 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194600.xml @@ -1,5 +1,5 @@ - + 31946 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194601.xml index f0a36e6d77..b345720e23 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194601.xml @@ -1,5 +1,5 @@ - + 31946 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194700.xml index a48a031a06..e52d2ea6ca 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194700.xml @@ -1,5 +1,5 @@ - + 31947 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194701.xml index 921039e71a..eda5f96cc9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194701.xml @@ -1,5 +1,5 @@ - + 31947 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194800.xml index 87904ecd0c..7fe536361e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194800.xml @@ -1,5 +1,5 @@ - + 31948 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194801.xml index 5624af6231..7f1450010d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194801.xml @@ -1,5 +1,5 @@ - + 31948 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194900.xml index d0796103e1..458666118a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3194900.xml @@ -1,5 +1,5 @@ - + 31949 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195000.xml index 625aab2e35..2f20e43391 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195000.xml @@ -1,5 +1,5 @@ - + 31950 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195100.xml index c3891aa8f6..15adde8709 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195100.xml @@ -1,5 +1,5 @@ - + 31951 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195200.xml index c05ffefaae..d530d8fe80 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195200.xml @@ -1,5 +1,5 @@ - + 31952 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195201.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195201.xml index 720e5dfb11..b28a9d5661 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195201.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195201.xml @@ -1,5 +1,5 @@ - + 31952 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195400.xml index 38355f1962..171cb4bf22 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3195400.xml @@ -1,5 +1,5 @@ - + 31954 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3196200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3196200.xml index f11d4d2fa4..d5528660ee 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3196200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3196200.xml @@ -1,5 +1,5 @@ - + 31962 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3196300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3196300.xml index 2f15dc2a44..8d7e80be97 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3196300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3196300.xml @@ -1,5 +1,5 @@ - + 31963 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3197300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3197300.xml index aff89d5009..ab1a5fb358 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3197300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3197300.xml @@ -1,5 +1,5 @@ - + 31973 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3198000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3198000.xml index 869a43a333..d089bac38f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3198000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3198000.xml @@ -1,5 +1,5 @@ - + 31980 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3198900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3198900.xml index 8c31c0dc94..b35e6b2864 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3198900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3198900.xml @@ -1,5 +1,5 @@ - + 31989 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3200700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3200700.xml index 167dd290d3..90e5921c59 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3200700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3200700.xml @@ -1,9 +1,24 @@ - + + 31563 + 31567 + 31568 + 31570 + 31571 + 31572 + 31573 + 31574 + 31575 + 31576 + 31577 + 31578 + 31579 + 31696 + 31697 + 31989 32007 - diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3210500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3210500.xml index 70bb097553..5becbd6dfb 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3210500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3210500.xml @@ -1,5 +1,5 @@ - + 32105 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3210600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3210600.xml index ab3c21eb2d..9fb0fd6422 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3210600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3210600.xml @@ -1,5 +1,5 @@ - + 32106 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216400.xml index 165958fabc..de56b0e3f7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216400.xml @@ -1,5 +1,5 @@ - + 32164 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216401.xml index e79df3304f..b804eaec0f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216401.xml @@ -1,5 +1,5 @@ - + 32164 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216500.xml index a4f9aa2fdf..70d0a1e8af 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216500.xml @@ -1,5 +1,5 @@ - + 32165 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216501.xml index e46c516d1f..6101e3ce26 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216501.xml @@ -1,5 +1,5 @@ - + 32165 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216600.xml index cb69d3405a..9b021b6711 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216600.xml @@ -1,5 +1,5 @@ - + 32166 @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216700.xml index 909c21f5de..4fdb5e34a1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216700.xml @@ -1,5 +1,5 @@ - + 32167 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216900.xml index ceb575e21f..f86951d7d4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3216900.xml @@ -1,5 +1,5 @@ - + 32169 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3229800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3229800.xml index 36d3f0f827..98040eb41f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3229800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3229800.xml @@ -1,5 +1,6 @@ - + + 32298 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287400.xml index aac7c17549..086cffdf82 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287400.xml @@ -1,5 +1,5 @@ - + 32874 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287500.xml index 7f150cf221..40e5723230 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287500.xml @@ -1,5 +1,5 @@ - + 32875 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287600.xml index ca62ca560f..b35acefc5f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287600.xml @@ -1,5 +1,5 @@ - + 32876 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287700.xml index 6b2ad15882..8c4bb05784 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287700.xml @@ -1,5 +1,5 @@ - + 32877 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287800.xml index 3f406d6f48..398ce99ea1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287800.xml @@ -1,5 +1,5 @@ - + 32878 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287900.xml index b4c46a58c9..826882200d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3287900.xml @@ -1,5 +1,5 @@ - + 32879 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288000.xml index 57c8c44bce..202c50d88f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288000.xml @@ -1,5 +1,5 @@ - + 32880 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288100.xml index 250b028e17..7d8b887d74 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288100.xml @@ -1,5 +1,5 @@ - + 32881 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288200.xml index a3e269826e..b05b7d5fb9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288200.xml @@ -1,5 +1,5 @@ - + 32882 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288300.xml index 1e8c25b2fc..9001118f78 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288300.xml @@ -1,5 +1,5 @@ - + 32883 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288700.xml index 251429e17f..82c98cc6d9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3288700.xml @@ -1,5 +1,5 @@ - + 32887 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3289700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3289700.xml index 00afc82b74..36cd1a2ca7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3289700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3289700.xml @@ -1,5 +1,5 @@ - + 32897 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3357900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3357900.xml index 406de80c04..3a196449a1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3357900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3357900.xml @@ -1,5 +1,5 @@ - + 33579 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393400.xml index 5524722b09..a4c1ace51f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393400.xml @@ -1,5 +1,5 @@ - + 33934 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393401.xml index b248104a25..1d36c1d793 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393401.xml @@ -1,5 +1,5 @@ - + 33934 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393500.xml index e2716bb9e0..207aa40511 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393500.xml @@ -1,5 +1,5 @@ - + 33935 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393501.xml index 7743cb0c45..3965dd5b9b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393501.xml @@ -1,5 +1,5 @@ - + 33935 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393600.xml index 500205f360..b379393935 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393600.xml @@ -1,5 +1,5 @@ - + 33936 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393700.xml index a9673e1580..8204b13e41 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3393700.xml @@ -1,5 +1,5 @@ - + 33937 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538400.xml index ee50f8f855..50dbb71d5c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538400.xml @@ -1,9 +1,9 @@ - + 35384 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538401.xml index 70b600ec4d..0c6700f1ee 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538401.xml @@ -1,5 +1,5 @@ - + 35384 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538402.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538402.xml index 46a8a7cb2c..023ef09f09 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538402.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538402.xml @@ -1,5 +1,5 @@ - + 35384 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538600.xml index 35e71f6de5..6c83b22671 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538600.xml @@ -1,9 +1,9 @@ - + 35386 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538601.xml index f50562cbe2..ada5fb486d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538601.xml @@ -1,5 +1,5 @@ - + 35386 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538602.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538602.xml index 52b3570e56..b4468d3806 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538602.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538602.xml @@ -1,5 +1,5 @@ - + 35386 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538800.xml index 6f1e7a4e2d..94fa0f35f2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538800.xml @@ -1,9 +1,9 @@ - + 35388 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538801.xml index ef01e41384..c616612ad1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538801.xml @@ -1,5 +1,5 @@ - + 35388 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538802.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538802.xml index 2472dd6ce4..57440ba594 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538802.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3538802.xml @@ -1,5 +1,5 @@ - + 35388 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539200.xml index 1869a99f44..e54354d05f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539200.xml @@ -1,9 +1,9 @@ - + 35392 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539201.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539201.xml index 947e416108..77413ff2a9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539201.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539201.xml @@ -1,5 +1,5 @@ - + 35392 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539202.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539202.xml index 7cd4ab31d6..029f7918d8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539202.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539202.xml @@ -1,5 +1,5 @@ - + 35392 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539400.xml index 8fd555c2d4..af0a2e400b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539400.xml @@ -1,9 +1,9 @@ - + 35394 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539401.xml index 5663046576..a1a215804f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539401.xml @@ -1,5 +1,5 @@ - + 35394 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539402.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539402.xml index 73a041fbbb..f8c31378e5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539402.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539402.xml @@ -1,5 +1,5 @@ - + 35394 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539600.xml index d1627e1839..7300df9790 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539600.xml @@ -1,9 +1,9 @@ - + 35396 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539601.xml index 4dfea49275..37a1ff0b7d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539601.xml @@ -1,5 +1,5 @@ - + 35396 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539602.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539602.xml index b0ae647a05..232a1c60db 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539602.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539602.xml @@ -1,5 +1,5 @@ - + 35396 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539800.xml index 4035f3199b..1a1d6fbfd9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539800.xml @@ -1,9 +1,9 @@ - + 35398 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539801.xml index 4b160e42be..b005e91fc0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539801.xml @@ -1,5 +1,5 @@ - + 35398 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539802.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539802.xml index 1f4c981fd1..4e27d60315 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539802.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3539802.xml @@ -1,5 +1,5 @@ - + 35398 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540000.xml index 5eb2550eea..7e7dff5c9e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540000.xml @@ -1,9 +1,9 @@ - + 35400 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540001.xml index 5e3b1ed812..56f709aeaa 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540001.xml @@ -1,5 +1,5 @@ - + 35400 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540002.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540002.xml index df8449fbf9..91664c4540 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540002.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540002.xml @@ -1,5 +1,5 @@ - + 35400 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540300.xml index 1b7598cc0f..02d575638c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540300.xml @@ -1,9 +1,9 @@ - + 35403 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540301.xml index 603f859c09..b45fee7699 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540301.xml @@ -1,5 +1,5 @@ - + 35403 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540302.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540302.xml index e6a076ed8c..0b4daa2792 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540302.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540302.xml @@ -1,5 +1,5 @@ - + 35403 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540500.xml index 1e5dd9cd7a..1e3b6b7b1c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540500.xml @@ -1,9 +1,9 @@ - + 35405 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540501.xml index 97c9cd08b4..29b8d2f981 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540501.xml @@ -1,5 +1,5 @@ - + 35405 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540502.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540502.xml index 3e91ce6d2b..5c0cd06f48 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540502.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540502.xml @@ -1,5 +1,5 @@ - + 35405 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540700.xml index 8d43cb672d..f1e2cb9403 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540700.xml @@ -1,9 +1,9 @@ - + 35407 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540701.xml index 2583b6a38a..db2d697f7b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540701.xml @@ -1,5 +1,5 @@ - + 35407 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540702.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540702.xml index 6d426e2483..223ace3856 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540702.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3540702.xml @@ -1,5 +1,5 @@ - + 35407 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543900.xml index ef77885181..3f94d66939 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543900.xml @@ -1,9 +1,9 @@ - + 35439 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543901.xml index 39f13ee2ac..1136de24fd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543901.xml @@ -1,5 +1,5 @@ - + 35439 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543902.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543902.xml index 26069b941a..8d77b4b9ec 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543902.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3543902.xml @@ -1,5 +1,5 @@ - + 35439 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544100.xml index f22b3a29da..02bd80580a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544100.xml @@ -1,9 +1,9 @@ - + 35441 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544101.xml index 468d29021f..0e29dcd193 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544101.xml @@ -1,5 +1,5 @@ - + 35441 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544102.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544102.xml index 52f32828d4..cd5266edb1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544102.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544102.xml @@ -1,5 +1,5 @@ - + 35441 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544300.xml index c979f1aebb..116d282b61 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544300.xml @@ -1,9 +1,9 @@ - + 35443 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544301.xml index 0c4edf9a31..b3d96407ed 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544301.xml @@ -1,5 +1,5 @@ - + 35443 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544302.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544302.xml index 25306ab486..5eb1294acd 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544302.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544302.xml @@ -1,5 +1,5 @@ - + 35443 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544500.xml index 4c9186dc9b..53afa9685b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544500.xml @@ -1,9 +1,9 @@ - + 35445 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544501.xml index 8640569f3d..6d02dca477 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544501.xml @@ -1,5 +1,5 @@ - + 35445 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544502.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544502.xml index ec40cc64de..264626f1fc 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544502.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544502.xml @@ -1,5 +1,5 @@ - + 35445 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544700.xml index 17e8bd00e3..e8195ff43b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544700.xml @@ -1,9 +1,9 @@ - + 35447 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544701.xml index 1a3dcfd2ef..dcda2135f5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544701.xml @@ -1,5 +1,5 @@ - + 35447 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544702.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544702.xml index 19fe5aeccd..40a40c0c41 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544702.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544702.xml @@ -1,5 +1,5 @@ - + 35447 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544900.xml index 0adb8a2b30..8cdb0740a3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544900.xml @@ -1,9 +1,9 @@ - + 35449 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544901.xml index 0528b75878..e8fa1086d8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544901.xml @@ -1,5 +1,5 @@ - + 35449 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544902.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544902.xml index b42c87c3a0..191a3af046 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544902.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3544902.xml @@ -1,5 +1,5 @@ - + 35449 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545100.xml index 1cd1aaa4a7..757e4e3022 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545100.xml @@ -1,9 +1,9 @@ - + 35451 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545101.xml index 3ca1ace28e..e73a5a039a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545101.xml @@ -1,5 +1,5 @@ - + 35451 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545102.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545102.xml index bc183bd9be..9531082d92 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545102.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545102.xml @@ -1,5 +1,5 @@ - + 35451 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545300.xml index bd75af7679..ffd091f8a5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545300.xml @@ -1,9 +1,9 @@ - + 35453 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545301.xml index 1879bef821..49958cc001 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545301.xml @@ -1,5 +1,5 @@ - + 35453 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545302.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545302.xml index 7d87c620cf..6e7fa0cd15 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545302.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545302.xml @@ -1,5 +1,5 @@ - + 35453 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545500.xml index 392619e352..343ec97ad2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545500.xml @@ -1,9 +1,9 @@ - + 35455 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545501.xml index 963ad988c1..8280c0a99a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545501.xml @@ -1,5 +1,5 @@ - + 35455 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545502.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545502.xml index e7b9bab43d..02d33fdef7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545502.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545502.xml @@ -1,5 +1,5 @@ - + 35455 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545700.xml index b62a44d7ab..a6b392ce7b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545700.xml @@ -1,9 +1,9 @@ - + 35457 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545701.xml index 17e12e4a6c..ba5813d069 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545701.xml @@ -1,5 +1,5 @@ - + 35457 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545702.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545702.xml index 1b0dfb721e..0e56127b54 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545702.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545702.xml @@ -1,5 +1,5 @@ - + 35457 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545900.xml index 17b28d399a..b723f46803 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545900.xml @@ -1,9 +1,9 @@ - + 35459 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545901.xml index 8b87bb8d96..e761f09bbf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545901.xml @@ -1,5 +1,5 @@ - + 35459 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545902.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545902.xml index 8f6cae0ed1..3c3fe6f3e8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545902.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3545902.xml @@ -1,5 +1,5 @@ - + 35459 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546100.xml index 5075b488df..753e0a7579 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546100.xml @@ -1,9 +1,9 @@ - + 35461 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546101.xml index f85ef9e588..608ec55b5d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546101.xml @@ -1,5 +1,5 @@ - + 35461 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546102.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546102.xml index 67e4a54af6..c8b332b435 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546102.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546102.xml @@ -1,5 +1,5 @@ - + 35461 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546300.xml index 408f6c8d9d..8dc912e3e2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546300.xml @@ -1,9 +1,9 @@ - + 35463 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546301.xml index e8cb2abc0f..435d212576 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546301.xml @@ -1,5 +1,5 @@ - + 35463 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546302.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546302.xml index a2496f4eee..9170a51817 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546302.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546302.xml @@ -1,5 +1,5 @@ - + 35463 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546500.xml index 18357b91d1..76c62e3cf5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546500.xml @@ -1,9 +1,9 @@ - + 35465 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546501.xml index 68ff755bf1..98b5bd359b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546501.xml @@ -1,5 +1,5 @@ - + 35465 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546502.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546502.xml index de82f242d3..ed8306e9ea 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546502.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546502.xml @@ -1,5 +1,5 @@ - + 35465 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546700.xml index cbf63aadf8..ba8159e65c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546700.xml @@ -1,9 +1,9 @@ - + 35467 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546701.xml index 41cac8a0c4..b6fe2eafcf 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546701.xml @@ -1,5 +1,5 @@ - + 35467 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546702.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546702.xml index f3d464cbdf..27b63ce264 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546702.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3546702.xml @@ -1,5 +1,5 @@ - + 35467 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556600.xml index ffe706469b..e05cd5a14b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556600.xml @@ -1,9 +1,9 @@ - + 35566 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556601.xml index c7b5d2d45d..36443d9392 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556601.xml @@ -1,5 +1,5 @@ - + 35566 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556602.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556602.xml index 22a77702f0..8deb389256 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556602.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556602.xml @@ -1,5 +1,5 @@ - + 35566 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556800.xml index bb75834da6..22b5cc9911 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556800.xml @@ -1,9 +1,9 @@ - + 35568 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556801.xml index 209872b603..5bea0a549e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556801.xml @@ -1,5 +1,5 @@ - + 35568 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556802.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556802.xml index c383cbc628..cd9247c904 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556802.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3556802.xml @@ -1,5 +1,5 @@ - + 35568 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557000.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557000.xml index 80557c9571..5f52b282d9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557000.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557000.xml @@ -1,9 +1,9 @@ - + 35570 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557001.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557001.xml index e79dddb192..0dbfab1fed 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557001.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557001.xml @@ -1,5 +1,5 @@ - + 35570 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557002.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557002.xml index 0ccb32be94..50a1a5c8f3 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557002.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557002.xml @@ -1,5 +1,5 @@ - + 35570 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557200.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557200.xml index 2f78b6d2f3..de4e798050 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557200.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557200.xml @@ -1,9 +1,9 @@ - + 35572 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557201.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557201.xml index 156066ccf4..14acd30412 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557201.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557201.xml @@ -1,5 +1,5 @@ - + 35572 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557202.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557202.xml index fbb6ada0ef..8532267bc9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557202.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557202.xml @@ -1,5 +1,5 @@ - + 35572 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557400.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557400.xml index b3281ad3de..40d891d9b8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557400.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557400.xml @@ -1,9 +1,9 @@ - + 35574 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557401.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557401.xml index 0b1e3b9821..96744ad937 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557401.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557401.xml @@ -1,5 +1,5 @@ - + 35574 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557402.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557402.xml index 25a9a721de..e633f058c4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557402.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557402.xml @@ -1,5 +1,5 @@ - + 35574 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557600.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557600.xml index 827c7a9302..1bf2b20fae 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557600.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557600.xml @@ -1,9 +1,9 @@ - + 35576 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557601.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557601.xml index b64ff1fe65..ff932dc94c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557601.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557601.xml @@ -1,5 +1,5 @@ - + 35576 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557602.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557602.xml index af54f7275f..6a2d49663b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557602.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557602.xml @@ -1,5 +1,5 @@ - + 35576 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557800.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557800.xml index 54702e0036..f6d615a3e5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557800.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557800.xml @@ -1,9 +1,9 @@ - + 35578 - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557801.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557801.xml index 08156b377b..7a04af2d7e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557801.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557801.xml @@ -1,5 +1,5 @@ - + 35578 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557802.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557802.xml index 9f7a09f8ed..27637ed7af 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557802.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3557802.xml @@ -1,5 +1,5 @@ - + 35578 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672100.xml index 3f451a717e..3325982c6a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672100.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672101.xml index c03c623470..c90d15f3af 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672101.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672102.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672102.xml index 050f8aad74..1dc0569b7e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672102.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672102.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672300.xml index 310123b491..8402c24d50 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672300.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672301.xml index c0675987e7..eed821b6fa 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672301.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672302.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672302.xml index fbae3053b0..57fd05555f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672302.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672302.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672500.xml index cd69a4d152..279366c886 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672500.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672501.xml index 38957f1317..a44266b326 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672501.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672502.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672502.xml index eb167dfa6b..904fe752d9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672502.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672502.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672700.xml index 1451249349..8353518970 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672700.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672701.xml index 6777b33168..dd494e389c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672701.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672702.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672702.xml index 0f11e81451..9699d4b69c 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672702.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672702.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672900.xml index 431a45d293..493f7671f0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672900.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672901.xml index b1bf700e64..8ec803287b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672901.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672902.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672902.xml index 1c86e28ae8..49f6a174ed 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672902.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3672902.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673100.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673100.xml index ac390e3487..0a3e95adf4 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673100.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673100.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673101.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673101.xml index 597b8b7636..144ef10545 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673101.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673101.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673102.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673102.xml index 199d26a901..a0919c5f22 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673102.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673102.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673300.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673300.xml index 8648b1abde..6f1b72a3bb 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673300.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673300.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673301.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673301.xml index 721d28750a..05911ed2fa 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673301.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673301.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673302.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673302.xml index 0243ff4d28..24b3ec9ba0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673302.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673302.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673500.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673500.xml index 0a6199fb86..115adfb7e6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673500.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673500.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673501.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673501.xml index c9b2613e67..7a3b5f7655 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673501.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673501.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673502.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673502.xml index b5abe67078..e022ac516d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673502.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673502.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673700.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673700.xml index c6c91b2c5a..03214db660 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673700.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673700.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673701.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673701.xml index af3738b2e0..50ca337f69 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673701.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673701.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673702.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673702.xml index e36d3d5e61..809bd6cb74 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673702.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673702.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673900.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673900.xml index f9c3700a88..ab9a0c3ebc 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673900.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673900.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673901.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673901.xml index 9cdd79e334..69395e9fb1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673901.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673901.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673902.xml b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673902.xml index 7d13911629..1e2fdfd3da 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673902.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/buylists/3673902.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/zone.htm b/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/zone.htm index 8fabc38c8b..4db84a7ac1 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/zone.htm +++ b/L2J_Mobius_2.5_Underground/dist/game/data/html/admin/zone.htm @@ -14,7 +14,7 @@
Peace:%PEACE%
Pvp:%PVP%
Siege:%SIEGE%
-
Town:%TOWN%
+
Tax:%TAX%
Castle:%CASTLE%
Fort:%FORT%
HQ:%HQ%
diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/multisell/1004.xml b/L2J_Mobius_2.5_Underground/dist/game/data/multisell/1004.xml deleted file mode 100644 index 0e82576b63..0000000000 --- a/L2J_Mobius_2.5_Underground/dist/game/data/multisell/1004.xml +++ /dev/null @@ -1,338 +0,0 @@ - - - - 30283 - 30298 - 30300 - 30307 - 30317 - 30363 - 30458 - 30471 - 30526 - 30527 - 30564 - 30678 - 30688 - 30846 - 30898 - 31271 - 31316 - 31583 - 31960 - 31990 - 32159 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/multisell/719.xml b/L2J_Mobius_2.5_Underground/dist/game/data/multisell/719.xml index 2e80baacdf..8dd350e3e5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/multisell/719.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/multisell/719.xml @@ -24,11 +24,11 @@ - - - - - + + + + +
@@ -40,11 +40,11 @@ - - - - - + + + + + @@ -56,11 +56,11 @@ - - - - - + + + + + @@ -72,11 +72,11 @@ - - - - - + + + + + @@ -88,11 +88,11 @@ - - - - - + + + + + @@ -104,10 +104,10 @@ - - - - - + + + + +
\ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/multisell/custom/600010.xml b/L2J_Mobius_2.5_Underground/dist/game/data/multisell/custom/600010.xml index 779216e9b3..e9e30d206b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/multisell/custom/600010.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/multisell/custom/600010.xml @@ -7,9 +7,11 @@ - + + - + +
@@ -17,9 +19,11 @@ - + + - + +
@@ -29,9 +33,11 @@ - + + - + +
@@ -39,17 +45,21 @@ - + + - + + - + + - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java index 735f4492f7..a23bedab7d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java @@ -19,11 +19,10 @@ package ai.others.DelusionTeleport; import java.util.HashMap; import java.util.Map; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; +import com.l2jmobius.gameserver.model.variables.PlayerVariables; import ai.AbstractNpcAI; @@ -50,20 +49,18 @@ public final class DelusionTeleport extends AbstractNpcAI new Location(-114597, -152501, -6750), new Location(-114589, -154162, -6750) }; - // Player Variables - private static final String DELUSION_RETURN = "DELUSION_RETURN"; private static final Map RETURN_LOCATIONS = new HashMap<>(); static { RETURN_LOCATIONS.put(0, new Location(43835, -47749, -792)); // Undefined origin, return to Rune - RETURN_LOCATIONS.put(7, new Location(-14023, 123677, -3112)); // Gludio - RETURN_LOCATIONS.put(8, new Location(18101, 145936, -3088)); // Dion - RETURN_LOCATIONS.put(10, new Location(80905, 56361, -1552)); // Oren - RETURN_LOCATIONS.put(14, new Location(42772, -48062, -792)); // Rune - RETURN_LOCATIONS.put(15, new Location(108469, 221690, -3592)); // Heine - RETURN_LOCATIONS.put(17, new Location(85991, -142234, -1336)); // Schuttgart + RETURN_LOCATIONS.put(20, new Location(-14023, 123677, -3112)); // Gludio + RETURN_LOCATIONS.put(30, new Location(18101, 145936, -3088)); // Dion + RETURN_LOCATIONS.put(40, new Location(80905, 56361, -1552)); // Heine + RETURN_LOCATIONS.put(50, new Location(108469, 221690, -3592)); // Oren + RETURN_LOCATIONS.put(60, new Location(85991, -142234, -1336)); // Schuttgart + RETURN_LOCATIONS.put(70, new Location(42772, -48062, -792)); // Rune } private DelusionTeleport() @@ -77,16 +74,15 @@ public final class DelusionTeleport extends AbstractNpcAI { if (npc.getId() == NPCS[0]) // Pathfinder Worker { - final L2TownZone town = TownManager.getTown(npc.getX(), npc.getY(), npc.getZ()); - final int townId = ((town == null) ? 0 : town.getTownId()); - player.getVariables().set(DELUSION_RETURN, townId); + final int locId = npc.getParameters().getInt("Level", -1); + player.getVariables().set(PlayerVariables.DELUSION_RETURN, RETURN_LOCATIONS.containsKey(locId) ? locId : 0); player.teleToLocation(HALL_LOCATIONS[getRandom(HALL_LOCATIONS.length)], false); } else { - final int townId = player.getVariables().getInt(DELUSION_RETURN, 0); + final int townId = player.getVariables().getInt(PlayerVariables.DELUSION_RETURN, 0); player.teleToLocation(RETURN_LOCATIONS.get(townId), true); - player.getVariables().remove(DELUSION_RETURN); + player.getVariables().remove(PlayerVariables.DELUSION_RETURN); } return super.onTalk(npc, player); } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java index 967d248bff..480462fea7 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java @@ -162,7 +162,7 @@ public class AdminElement implements IAdminCommandHandler } else { - itemInstance.setAttribute(new AttributeHolder(type, value)); + itemInstance.setAttribute(new AttributeHolder(type, value), true); } player.getInventory().equipItem(itemInstance); diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java index dde2ae8058..dfd8ab322b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java @@ -19,9 +19,10 @@ package handlers.admincommandhandlers; import java.util.logging.Logger; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; +import com.l2jmobius.gameserver.data.xml.impl.MultisellData; import com.l2jmobius.gameserver.handler.IAdminCommandHandler; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -40,7 +41,9 @@ public class AdminShop implements IAdminCommandHandler private static final String[] ADMIN_COMMANDS = { "admin_buy", - "admin_gmshop" + "admin_gmshop", + "admin_multisell", + "admin_exc_multisell" }; @Override @@ -61,6 +64,30 @@ public class AdminShop implements IAdminCommandHandler { AdminHtml.showAdminHtml(activeChar, "gmshops.htm"); } + else if (command.startsWith("admin_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(16).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } + else if (command.toLowerCase().startsWith("admin_exc_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(20).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, true); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } return true; } @@ -82,17 +109,16 @@ public class AdminShop implements IAdminCommandHandler _log.warning("admin buylist failed:" + command); } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); - + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList != null) { - activeChar.sendPacket(new BuyList(buyList, activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(buyList, activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else { _log.warning("no buylist with id:" + val); + activeChar.sendPacket(ActionFailed.STATIC_PACKET); } - activeChar.sendPacket(ActionFailed.STATIC_PACKET); } } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java index cfe7ee4957..d17921338b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java @@ -114,7 +114,6 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%PEACE%", activeChar.isInsideZone(ZoneId.PEACE) ? "YES" : "NO"); adminReply.replace("%PVP%", activeChar.isInsideZone(ZoneId.PVP) ? "YES" : "NO"); adminReply.replace("%SIEGE%", activeChar.isInsideZone(ZoneId.SIEGE) ? "YES" : "NO"); - adminReply.replace("%TOWN%", activeChar.isInsideZone(ZoneId.TOWN) ? "YES" : "NO"); adminReply.replace("%CASTLE%", activeChar.isInsideZone(ZoneId.CASTLE) ? "YES" : "NO"); adminReply.replace("%FORT%", activeChar.isInsideZone(ZoneId.FORT) ? "YES" : "NO"); adminReply.replace("%HQ%", activeChar.isInsideZone(ZoneId.HQ) ? "YES" : "NO"); @@ -128,6 +127,7 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%DANGER%", activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "YES" : "NO"); adminReply.replace("%NOSTORE%", activeChar.isInsideZone(ZoneId.NO_STORE) ? "YES" : "NO"); adminReply.replace("%SCRIPT%", activeChar.isInsideZone(ZoneId.SCRIPT) ? "YES" : "NO"); + adminReply.replace("%TAX%", (activeChar.isInsideZone(ZoneId.TAX) ? "YES" : "NO")); final StringBuilder zones = new StringBuilder(100); for (L2ZoneType zone : ZoneManager.getInstance().getZones(activeChar)) diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/bypasshandlers/Wear.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/bypasshandlers/Wear.java index 9291747b2a..40de431ce5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/bypasshandlers/Wear.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/bypasshandlers/Wear.java @@ -24,7 +24,7 @@ import com.l2jmobius.gameserver.data.xml.impl.BuyListData; import com.l2jmobius.gameserver.handler.IBypassHandler; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.ShopPreviewList; @@ -70,7 +70,7 @@ public class Wear implements IBypassHandler private static void showWearWindow(L2PcInstance player, int val) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/communityboard/HomeBoard.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/communityboard/HomeBoard.java index b39b9f0b38..9f7d9fb2f8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/communityboard/HomeBoard.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/communityboard/HomeBoard.java @@ -154,7 +154,7 @@ public final class HomeBoard implements IParseBoardHandler { final String page = command.replace("_bbssell;", ""); returnHtml = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/Custom/" + page + ".html"); - activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else if (command.startsWith("_bbsteleport")) diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/communityboard/RegionBoard.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/communityboard/RegionBoard.java index 7a9b5fd57d..ffb50fbf7b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/communityboard/RegionBoard.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/communityboard/RegionBoard.java @@ -18,6 +18,7 @@ package handlers.communityboard; import com.l2jmobius.gameserver.cache.HtmCache; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.handler.CommunityBoardHandler; import com.l2jmobius.gameserver.handler.IWriteBoardHandler; import com.l2jmobius.gameserver.instancemanager.CastleManager; @@ -64,7 +65,7 @@ public class RegionBoard implements IWriteBoardHandler link = link.replace("%region_name%", String.valueOf(REGIONS[i])); link = link.replace("%region_owning_clan%", (clan != null ? clan.getName() : "NPC")); link = link.replace("%region_owning_clan_alliance%", ((clan != null) && (clan.getAllyName() != null) ? clan.getAllyName() : "")); - link = link.replace("%region_tax_rate%", (castle.getTaxRate() * 100) + "%"); + link = link.replace("%region_tax_rate%", castle.getTaxPercent(TaxType.BUY) + "%"); sb.append(link); } diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java index 9e555bb17c..fb13b89a3e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java @@ -139,7 +139,7 @@ public final class ConvertItem extends AbstractEffect if (elementals != null) { - newItem.setAttribute(elementals); + newItem.setAttribute(elementals, true); } newItem.setEnchantLevel(enchantLevel); player.getInventory().equipItem(newItem); diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/itemhandlers/Seed.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/itemhandlers/Seed.java index b2a011e238..a5c7d19397 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/itemhandlers/Seed.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/handlers/itemhandlers/Seed.java @@ -22,13 +22,13 @@ import com.l2jmobius.Config; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.handler.IItemHandler; import com.l2jmobius.gameserver.instancemanager.CastleManorManager; -import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Seed; import com.l2jmobius.gameserver.model.actor.L2Playable; import com.l2jmobius.gameserver.model.actor.instance.L2ChestInstance; import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.entity.Castle; import com.l2jmobius.gameserver.model.holders.ItemSkillHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -81,7 +81,9 @@ public class Seed implements IItemHandler { return false; } - else if (seed.getCastleId() != MapRegionManager.getInstance().getAreaCastle(playable)) // TODO: replace me with tax zone + + final Castle taxCastle = target.getTaxCastle(); + if ((taxCastle == null) || (seed.getCastleId() != taxCastle.getResidenceId())) { playable.sendPacket(SystemMessageId.THIS_SEED_MAY_NOT_BE_SOWN_HERE); return false; diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/items/15400-15499.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/items/15400-15499.xml index 00f15db81e..420daac6fc 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/items/15400-15499.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/items/15400-15499.xml @@ -1361,6 +1361,7 @@ + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/buylist.xsd b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/buylist.xsd index e89cbf146d..6e842a25a6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/buylist.xsd +++ b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/buylist.xsd @@ -30,9 +30,11 @@ + + \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/multisell.xsd index 196695f377..99107d2612 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/multisell.xsd +++ b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/multisell.xsd @@ -22,7 +22,6 @@ - @@ -40,7 +39,8 @@ - + + \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/zones/custom_town.xml b/L2J_Mobius_2.5_Underground/dist/game/data/zones/custom_town.xml deleted file mode 100644 index 716130acf4..0000000000 --- a/L2J_Mobius_2.5_Underground/dist/game/data/zones/custom_town.xml +++ /dev/null @@ -1,639 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/zones/tax.xml b/L2J_Mobius_2.5_Underground/dist/game/data/zones/tax.xml index 7a8eb7d1f9..79393d8e7f 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/zones/tax.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/zones/tax.xml @@ -1,6 +1,5 @@ - - + @@ -313,7 +312,7 @@ - + diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/Config.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/Config.java index 1da64a6c7e..f94900f605 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/Config.java @@ -237,7 +237,6 @@ public final class Config public static double ALT_GAME_CREATION_XP_RATE; public static double ALT_GAME_CREATION_RARE_XPSP_RATE; public static double ALT_GAME_CREATION_SP_RATE; - public static boolean ALT_BLACKSMITH_USE_RECIPES; public static boolean ALT_CLAN_LEADER_INSTANT_ACTIVATION; public static int ALT_CLAN_JOIN_DAYS; public static int ALT_CLAN_CREATE_DAYS; @@ -1651,7 +1650,6 @@ public final class Config ALT_GAME_CREATION_XP_RATE = Character.getDouble("AltGameCreationXpRate", 1); ALT_GAME_CREATION_SP_RATE = Character.getDouble("AltGameCreationSpRate", 1); ALT_GAME_CREATION_RARE_XPSP_RATE = Character.getDouble("AltGameCreationRareXpSpRate", 2); - ALT_BLACKSMITH_USE_RECIPES = Character.getBoolean("AltBlacksmithUseRecipes", true); ALT_CLAN_LEADER_INSTANT_ACTIVATION = Character.getBoolean("AltClanLeaderInstantActivation", false); ALT_CLAN_JOIN_DAYS = Character.getInt("DaysBeforeJoinAClan", 1); ALT_CLAN_CREATE_DAYS = Character.getInt("DaysBeforeCreateAClan", 10); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java index 8c25ec2846..33e2d0df1d 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java @@ -28,15 +28,14 @@ import java.util.logging.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; /** @@ -47,7 +46,7 @@ public final class BuyListData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(BuyListData.class.getName()); - private final Map _buyLists = new HashMap<>(); + private final Map _buyLists = new HashMap<>(); private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); protected BuyListData() @@ -77,7 +76,7 @@ public final class BuyListData implements IGameXmlReader final int itemId = rs.getInt("item_id"); final long count = rs.getLong("count"); final long nextRestockTime = rs.getLong("next_restock_time"); - final L2BuyList buyList = getBuyList(buyListId); + final ProductList buyList = getBuyList(buyListId); if (buyList == null) { LOGGER.warning("BuyList found in database but not loaded from xml! BuyListId: " + buyListId); @@ -108,71 +107,44 @@ public final class BuyListData implements IGameXmlReader try { final int buyListId = Integer.parseInt(f.getName().replaceAll(".xml", "")); - - for (Node node = doc.getFirstChild(); node != null; node = node.getNextSibling()) + forEach(doc, "list", (list) -> { - if ("list".equalsIgnoreCase(node.getNodeName())) + final int defaultBaseTax = parseInteger(list.getAttributes(), "baseTax", 0); + final ProductList buyList = new ProductList(buyListId); + forEach(list, (node) -> { - final L2BuyList buyList = new L2BuyList(buyListId); - for (Node list_node = node.getFirstChild(); list_node != null; list_node = list_node.getNextSibling()) + switch (node.getNodeName()) { - if ("item".equalsIgnoreCase(list_node.getNodeName())) + case "item": { - int itemId = -1; - long price = -1; - long restockDelay = -1; - long count = -1; - final NamedNodeMap attrs = list_node.getAttributes(); - Node attr = attrs.getNamedItem("id"); - itemId = Integer.parseInt(attr.getNodeValue()); - attr = attrs.getNamedItem("price"); - if (attr != null) - { - price = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("restock_delay"); - if (attr != null) - { - restockDelay = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("count"); - if (attr != null) - { - count = Long.parseLong(attr.getNodeValue()); - } + final NamedNodeMap attrs = node.getAttributes(); + + final int itemId = parseInteger(attrs, "id"); final L2Item item = ItemTable.getInstance().getTemplate(itemId); if (item != null) { - if ((price > -1) && (item.getReferencePrice() > price) && (buyList.getNpcsAllowed() != null)) - { - LOGGER.warning("Item price is too low. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); - LOGGER.warning("Setting price to reference price " + item.getReferencePrice() + " instead of " + price + "."); - buyList.addProduct(new Product(buyList.getListId(), item, item.getReferencePrice(), restockDelay, count)); - } - else - { - buyList.addProduct(new Product(buyList.getListId(), item, price, restockDelay, count)); - } + final long price = parseLong(attrs, "price", -1L); + final long restockDelay = parseLong(attrs, "restock_delay", -1L); + final long count = parseLong(attrs, "count", -1L); + final int baseTax = parseInteger(attrs, "baseTax", defaultBaseTax); + + buyList.addProduct(new Product(buyListId, item, price, restockDelay, count, baseTax)); } else { - LOGGER.warning("Item not found. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); + LOGGER.warning("Item not found. BuyList:" + buyListId + " ItemID:" + itemId + " File:" + f); } + break; } - else if ("npcs".equalsIgnoreCase(list_node.getNodeName())) + case "npcs": { - for (Node npcs_node = list_node.getFirstChild(); npcs_node != null; npcs_node = npcs_node.getNextSibling()) - { - if ("npc".equalsIgnoreCase(npcs_node.getNodeName())) - { - buyList.addAllowedNpc(Integer.parseInt(npcs_node.getTextContent())); - } - } + forEach(node, "npc", (npcNode) -> buyList.addAllowedNpc(Integer.parseInt(npcNode.getTextContent()))); + break; } } - _buyLists.put(buyList.getListId(), buyList); - } - } + }); + _buyLists.put(buyListId, buyList); + }); } catch (Exception e) { @@ -186,7 +158,7 @@ public final class BuyListData implements IGameXmlReader return NUMERIC_FILTER; } - public L2BuyList getBuyList(int listId) + public ProductList getBuyList(int listId) { return _buyLists.get(listId); } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 01bd5c5942..8f4f7463aa 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -18,50 +18,44 @@ package com.l2jmobius.gameserver.data.xml.impl; import java.io.File; import java.io.FileFilter; +import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import org.w3c.dom.DOMException; import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.SpecialItemType; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ListContainer; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.ExPCCafePointInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.MultisellListHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.serverpackets.MultiSellList; -import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; import com.l2jmobius.gameserver.util.Util; public final class MultisellData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(MultisellData.class.getName()); - private final Map _entries = new HashMap<>(); - public static final int PAGE_SIZE = 40; - // Special IDs. - public static final int PC_CAFE_POINTS = -100; - public static final int CLAN_REPUTATION = -200; - public static final int FAME = -300; - public static final int FIELD_CYCLE_POINTS = -400; - public static final int RAIDBOSS_POINTS = -500; - // Misc private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); + private final Map _multisells = new HashMap<>(); + protected MultisellData() { load(); @@ -70,15 +64,14 @@ public final class MultisellData implements IGameXmlReader @Override public void load() { - _entries.clear(); + _multisells.clear(); parseDatapackDirectory("data/multisell", false); if (Config.CUSTOM_MULTISELL_LOAD) { parseDatapackDirectory("data/multisell/custom", false); } - verify(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _entries.size() + " multisell lists."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _multisells.size() + " multisell lists."); } @Override @@ -86,73 +79,88 @@ public final class MultisellData implements IGameXmlReader { try { - final int id = Integer.parseInt(f.getName().replaceAll(".xml", "")); - int entryId = 1; - Node att; - final ListContainer list = new ListContainer(id); - - for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) + forEach(doc, "list", listNode -> { - if ("list".equalsIgnoreCase(n.getNodeName())) + final StatsSet set = new StatsSet(parseAttributes(listNode)); + final int listId = Integer.parseInt(f.getName().substring(0, f.getName().length() - 4)); + final List entries = new ArrayList<>(listNode.getChildNodes().getLength()); + + forEach(listNode, itemNode -> { - list.setApplyTaxes(parseBoolean(n.getAttributes(), "applyTaxes", false)); - list.setIsChanceMultisell(parseBoolean(n.getAttributes(), "isChanceMultisell", false)); - list.setMaintainEnchantment(parseBoolean(n.getAttributes(), "maintainEnchantment", false)); - - att = n.getAttributes().getNamedItem("useRate"); - if (att != null) + if ("item".equalsIgnoreCase(itemNode.getNodeName())) { - try + final List ingredients = new ArrayList<>(1); + final List products = new ArrayList<>(1); + final MultisellEntryHolder entry = new MultisellEntryHolder(ingredients, products); + + for (Node d = itemNode.getFirstChild(); d != null; d = d.getNextSibling()) { - - list.setUseRate(Double.valueOf(att.getNodeValue())); - if (list.getUseRate() <= 1e-6) + if ("ingredient".equalsIgnoreCase(d.getNodeName())) { - throw new NumberFormatException("The value cannot be 0"); // threat 0 as invalid value - } - } - catch (NumberFormatException e) - { - try - { - list.setUseRate(Config.class.getField(att.getNodeValue()).getDouble(Config.class)); - } - catch (Exception e1) - { - LOGGER.warning(e1.getMessage() + doc.getLocalName()); - list.setUseRate(1.0); - } - } - catch (DOMException e) - { - LOGGER.warning(e.getMessage() + doc.getLocalName()); - } - } - - for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) - { - if ("item".equalsIgnoreCase(d.getNodeName())) - { - final Entry e = parseEntry(d, entryId++, list); - list.getEntries().add(e); - } - else if ("npcs".equalsIgnoreCase(d.getNodeName())) - { - for (Node b = d.getFirstChild(); b != null; b = b.getNextSibling()) - { - if ("npc".equalsIgnoreCase(b.getNodeName())) + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final ItemHolder ingredient = new ItemHolder(id, count); + + if (itemExists(ingredient)) { - if (Util.isDigit(b.getTextContent())) + ingredients.add(ingredient); + } + else + { + LOGGER.warning("Invalid ingredient id or count for itemId: " + ingredient.getId() + ", count: " + ingredient.getCount() + " in list: " + listId); + continue; + } + } + else if ("production".equalsIgnoreCase(d.getNodeName())) + { + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count); + + if (itemExists(product)) + { + // Check chance only of items that have set chance. Items without chance (NaN) are used for displaying purposes. + if ((!Double.isNaN(chance) && (chance < 0)) || (chance > 100)) { - list.allowNpc(Integer.parseInt(b.getTextContent())); + LOGGER.warning("Invalid chance for itemId: " + product.getId() + ", count: " + product.getCount() + ", chance: " + chance + " in list: " + listId); + continue; } + + products.add(product); + } + else + { + LOGGER.warning("Invalid product id or count for itemId: " + product.getId() + ", count: " + product.getCount() + " in list: " + listId); + continue; } } } + + final double totalChance = products.stream().filter(i -> !Double.isNaN(i.getChance())).mapToDouble(ItemChanceHolder::getChance).sum(); + if (totalChance > 100) + { + LOGGER.warning("Products' total chance of " + totalChance + "% exceeds 100% for list: " + listId + " at entry " + entries.size() + 1 + "."); + } + + entries.add(entry); } - } - } - _entries.put(id, list); + else if ("npcs".equalsIgnoreCase(itemNode.getNodeName())) + { + // Initialize NPCs with the size of child nodes. + final Set allowNpc = new HashSet<>(itemNode.getChildNodes().getLength()); + forEach(itemNode, n -> "npc".equalsIgnoreCase(n.getNodeName()) && Util.isDigit(n.getTextContent()), n -> allowNpc.add(Integer.parseInt(n.getTextContent()))); + + // Add npcs to stats set. + set.set("allowNpc", allowNpc); + } + }); + + set.set("listId", listId); + set.set("entries", entries); + + _multisells.put(listId, new MultisellListHolder(set)); + }); } catch (Exception e) { @@ -166,44 +174,6 @@ public final class MultisellData implements IGameXmlReader return NUMERIC_FILTER; } - private final Entry parseEntry(Node n, int entryId, ListContainer list) - { - final Node first = n.getFirstChild(); - final Entry entry = new Entry(entryId); - - NamedNodeMap attrs; - Node att; - StatsSet set; - - for (n = first; n != null; n = n.getNextSibling()) - { - if ("ingredient".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addIngredient(new Ingredient(set)); - } - else if ("production".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addProduct(new Ingredient(set)); - } - } - - return entry; - } - /** * This will generate the multisell list for the items.
* There exist various parameters in multisells that affect the way they will appear: @@ -230,38 +200,36 @@ public final class MultisellData implements IGameXmlReader * @param player * @param npc * @param inventoryOnly - * @param productMultiplier * @param ingredientMultiplier + * @param productMultiplier */ - public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double productMultiplier, double ingredientMultiplier) + public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double ingredientMultiplier, double productMultiplier) { - final ListContainer template = _entries.get(listId); + final MultisellListHolder template = _multisells.get(listId); if (template == null) { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find list ID: " + listId + " requested by player: " + player.getName() + ", NPC ID:" + (npc != null ? npc.getId() : 0)); + LOGGER.warning("Can't find list id: " + listId + " requested by player: " + player.getName() + ", npcId: " + (npc != null ? npc.getId() : 0)); return; } - if (!template.isNpcAllowed(-1) && (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly()))) + if (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly())) { - LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); - return; - } - - final PreparedListContainer list = new PreparedListContainer(template, inventoryOnly, player, npc); - - // Pass through this only when multipliers are different from 1 - if ((productMultiplier != 1) || (ingredientMultiplier != 1)) - { - list.getEntries().forEach(entry -> + if (player.isGM()) { - // Math.max used here to avoid dropping count to 0 - entry.getProducts().forEach(product -> product.setItemCount((long) Math.max(product.getItemCount() * productMultiplier, 1))); - - // Math.max used here to avoid dropping count to 0 - entry.getIngredients().forEach(ingredient -> ingredient.setItemCount((long) Math.max(ingredient.getItemCount() * ingredientMultiplier, 1))); - }); + player.sendMessage("Multisell " + listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); + return; + } } + + // Check if ingredient/product multipliers are set, if not, set them to the template value. + ingredientMultiplier = (Double.isNaN(ingredientMultiplier) ? template.getIngredientMultiplier() : ingredientMultiplier); + productMultiplier = (Double.isNaN(productMultiplier) ? template.getProductMultiplier() : productMultiplier); + + final PreparedMultisellListHolder list = new PreparedMultisellListHolder(template, inventoryOnly, player.getInventory(), npc, ingredientMultiplier, productMultiplier); int index = 0; do { @@ -276,172 +244,19 @@ public final class MultisellData implements IGameXmlReader public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly) { - separateAndSend(listId, player, npc, inventoryOnly, 1, 1); + separateAndSend(listId, player, npc, inventoryOnly, Double.NaN, Double.NaN); } - public static boolean hasSpecialIngredient(int id, long amount, L2PcInstance player) + private final boolean itemExists(ItemHolder holder) { - switch (id) + final SpecialItemType specialItem = SpecialItemType.getByClientId(holder.getId()); + if (specialItem != null) { - case PC_CAFE_POINTS: - { - if (player.getPcCafePoints() >= amount) - { - return true; - } - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); - break; - } - case CLAN_REPUTATION: - { - if (player.getClan() == null) - { - player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); - return false; - } - if (!player.isClanLeader()) - { - player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); - return false; - } - if (player.getClan().getReputationScore() < amount) - { - player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); - return false; - } - return true; - } - case FAME: - { - if (player.getFame() < amount) - { - player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); - return false; - } - return true; - } - case RAIDBOSS_POINTS: - { - if (player.getRaidbossPoints() < amount) - { - player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); - return false; - } - return true; - } - } - return false; - } - - public static boolean takeSpecialIngredient(int id, long amount, L2PcInstance player) - { - switch (id) - { - case PC_CAFE_POINTS: - { - final int cost = player.getPcCafePoints() - (int) amount; - player.setPcCafePoints(cost); - final SystemMessage smsgpc = SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_USING_S1_POINT); - smsgpc.addLong((int) amount); - player.sendPacket(smsgpc); - player.sendPacket(new ExPCCafePointInfo(player.getPcCafePoints(), (int) amount, 1)); - return true; - } - case CLAN_REPUTATION: - { - player.getClan().takeReputationScore((int) amount, true); - final SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); - smsg.addLong(amount); - player.sendPacket(smsg); - return true; - } - case FAME: - { - player.setFame(player.getFame() - (int) amount); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - return true; - } - case RAIDBOSS_POINTS: - { - player.setRaidbossPoints(player.getRaidbossPoints() - (int) amount); - player.sendPacket(new UserInfo(player)); - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(amount)); - return true; - } - } - return false; - } - - public static void giveSpecialProduct(int id, long amount, L2PcInstance player) - { - switch (id) - { - case CLAN_REPUTATION: - { - player.getClan().addReputationScore((int) amount, true); - break; - } - case FAME: - { - player.setFame((int) (player.getFame() + amount)); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - break; - } - case RAIDBOSS_POINTS: - { - player.increaseRaidbossPoints((int) amount); - player.sendPacket(new UserInfo(player)); - break; - } - } - } - - private final void verify() - { - ListContainer list; - final Iterator iter = _entries.values().iterator(); - while (iter.hasNext()) - { - list = iter.next(); - - for (Entry ent : list.getEntries()) - { - for (Ingredient ing : ent.getIngredients()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find ingredient with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - for (Ingredient ing : ent.getProducts()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find product with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - } - } - } - - private final boolean verifyIngredient(Ingredient ing) - { - switch (ing.getItemId()) - { - case PC_CAFE_POINTS: - case CLAN_REPUTATION: - case FAME: - case RAIDBOSS_POINTS: - { - return true; - } - default: - { - return ing.getTemplate() != null; - } + return true; } + + final L2Item template = ItemTable.getInstance().getTemplate(holder.getId()); + return (template != null) && (template.isStackable() ? (holder.getCount() >= 1) : (holder.getCount() == 1)); } public static MultisellData getInstance() diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java index 3706b281b4..bffa2b107c 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java @@ -83,12 +83,12 @@ public class OptionData implements IGameXmlReader } case "active_skill": { - option.setActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "passive_skill": { - option.setPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "attack_skill": diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/datatables/AugmentationData.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/datatables/AugmentationData.java index 82a79af4c1..8582c38326 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/datatables/AugmentationData.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/datatables/AugmentationData.java @@ -33,8 +33,7 @@ import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.L2Augmentation; -import com.l2jmobius.gameserver.model.holders.SkillHolder; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.options.Options; @@ -86,12 +85,11 @@ public class AugmentationData private final List> _redSkills = new ArrayList<>(); private final List> _yellowSkills = new ArrayList<>(); + private final Map _augmentations = new HashMap<>(); private final List _augmentationChances = new ArrayList<>(); private final List _augmentationChancesAcc = new ArrayList<>(); private final List _augmentationStones = new ArrayList<>(); - private final Map _allSkills = new HashMap<>(); - protected AugmentationData() { for (int i = 0; i < 10; i++) @@ -297,8 +295,6 @@ public class AugmentationData { _redSkills.get(k).add(augmentationId); } - - _allSkills.put(augmentationId, new SkillHolder(skillId, skillLvL)); } } } @@ -520,6 +516,11 @@ public class AugmentationData } } + public Augmentation getAugmentation(int id) + { + return _augmentations.computeIfAbsent(id, k -> new Augmentation(k)); + } + /** * Generate a new random augmentation * @param lifeStoneLevel @@ -529,7 +530,7 @@ public class AugmentationData * @param targetItem * @return */ - public L2Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) + public Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) { switch (bodyPart) { @@ -546,7 +547,7 @@ public class AugmentationData } } - private L2Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) + private Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) { int stat12 = 0; int stat34 = 0; @@ -739,7 +740,8 @@ public class AugmentationData } } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } boolean generateSkill = false; boolean generateGlow = false; @@ -916,10 +918,10 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; resultColor=" + resultColor + "; level=" + lifeStoneLevel + "; grade=" + lifeStoneGrade); } - return new L2Augmentation(((stat34 << 16) + stat12)); + return new Augmentation(((stat34 << 16) + stat12)); } - private L2Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) + private Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) { int stat12 = 0; int stat34 = 0; @@ -987,7 +989,8 @@ public class AugmentationData } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } lifeStoneLevel = Math.min(lifeStoneLevel, 9); int base = 0; @@ -1031,7 +1034,7 @@ public class AugmentationData op = OptionData.getInstance().getOptions(stat34); } - if ((op == null) || (!op.hasActiveSkill() && !op.hasPassiveSkill() && !op.hasActivationSkills())) + if ((op == null) || (!op.hasActiveSkills() && !op.hasPassiveSkills() && !op.hasActivationSkills())) { // second augmentation (stats) // calculating any different from stat12 value inside sub-block @@ -1048,7 +1051,8 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Accessory augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; level=" + lifeStoneLevel); } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } public boolean isAugmentaionStoneValid(int stoneId) diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java index 5294f6f231..6a3e232a26 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java @@ -74,7 +74,6 @@ public final class MapRegionManager implements IGameXmlReader String name; String town; int locId; - int castle; int bbs; for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) @@ -89,10 +88,9 @@ public final class MapRegionManager implements IGameXmlReader name = attrs.getNamedItem("name").getNodeValue(); town = attrs.getNamedItem("town").getNodeValue(); locId = parseInteger(attrs, "locId"); - castle = parseInteger(attrs, "castle"); bbs = parseInteger(attrs, "bbs"); - final L2MapRegion region = new L2MapRegion(name, town, locId, castle, bbs); + final L2MapRegion region = new L2MapRegion(name, town, locId, bbs); for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) { attrs = c.getAttributes(); @@ -224,22 +222,6 @@ public final class MapRegionManager implements IGameXmlReader return region.getTown(); } - /** - * @param activeChar - * @return - */ - public int getAreaCastle(L2Character activeChar) - { - final L2MapRegion region = getMapRegion(activeChar); - - if (region == null) - { - return 0; - } - - return region.getCastle(); - } - /** * @param activeChar * @param teleportWhere diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/TownManager.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/TownManager.java deleted file mode 100644 index b0543eb11a..0000000000 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/instancemanager/TownManager.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.instancemanager; - -import com.l2jmobius.gameserver.model.entity.Castle; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; - -public final class TownManager -{ - public static int getTownCastle(int townId) - { - switch (townId) - { - case 912: - { - return 1; - } - case 916: - { - return 2; - } - case 918: - { - return 3; - } - case 922: - { - return 4; - } - case 924: - { - return 5; - } - case 926: - { - return 6; - } - case 1538: - { - return 7; - } - case 1537: - { - return 8; - } - case 1714: - { - return 9; - } - default: - { - return 0; - } - } - } - - public static boolean townHasCastleInSiege(int townId) - { - final int castleId = getTownCastle(townId); - if (castleId > 0) - { - final Castle castle = CastleManager.getInstance().getCastleById(castleId); - if (castle != null) - { - return castle.getSiege().isInProgress(); - } - } - return false; - } - - public static boolean townHasCastleInSiege(int x, int y) - { - return townHasCastleInSiege(MapRegionManager.getInstance().getMapRegionLocId(x, y)); - } - - public static L2TownZone getTown(int townId) - { - for (L2TownZone temp : ZoneManager.getInstance().getAllZones(L2TownZone.class)) - { - if (temp.getTownId() == townId) - { - return temp; - } - } - return null; - } - - /** - * Returns the town at that position (if any) - * @param x - * @param y - * @param z - * @return - */ - public static L2TownZone getTown(int x, int y, int z) - { - for (L2ZoneType temp : ZoneManager.getInstance().getZones(x, y, z)) - { - if (temp instanceof L2TownZone) - { - return (L2TownZone) temp; - } - } - return null; - } -} diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2Augmentation.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/Augmentation.java similarity index 68% rename from L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2Augmentation.java rename to L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/Augmentation.java index 65ff4312c1..9a0e2b459d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2Augmentation.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/Augmentation.java @@ -1,107 +1,95 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.options.Options; - -/** - * Used to store an augmentation and its bonuses. - * @author durgus, UnAfraid - */ -public final class L2Augmentation -{ - private static final Logger LOGGER = Logger.getLogger(L2Augmentation.class.getName()); - private final List _options = new ArrayList<>(); - private boolean _active; - private final int _id; - - public L2Augmentation(int id) - { - _id = id; - _active = false; - final int[] stats = new int[2]; - stats[0] = 0x0000FFFF & id; - stats[1] = (id >> 16); - - for (int stat : stats) - { - final Options op = OptionData.getInstance().getOptions(stat); - if (op != null) - { - _options.add(op); - } - else - { - LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stat); - } - } - } - - /** - * Get the augmentation "id" used in serverpackets. - * @return augmentationId - */ - public int getId() - { - return _id; - } - - public List getOptions() - { - return _options; - } - - public void applyBonus(L2PcInstance player) - { - // make sure the bonuses are not applied twice.. - if (_active) - { - return; - } - - for (Options op : _options) - { - op.apply(player); - } - - player.getStat().recalculateStats(true); - _active = true; - } - - public void removeBonus(L2PcInstance player) - { - // make sure the bonuses are not removed twice - if (!_active) - { - return; - } - - for (Options op : _options) - { - op.remove(player); - } - - player.getStat().recalculateStats(true); - _active = false; - } -} +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model; + +import java.util.logging.Logger; + +import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.options.Options; + +/** + * Used to store an augmentation and its bonuses. + * @author durgus, UnAfraid + */ +public final class Augmentation +{ + private static final Logger LOGGER = Logger.getLogger(Augmentation.class.getName()); + private final Options[] _options; + private final int _id; + + public Augmentation(int id) + { + _id = id; + final int[] stats = new int[2]; + stats[0] = 0x0000FFFF & id; + stats[1] = (id >> 16); + _options = new Options[stats.length]; + + for (int i = 0; i < stats.length; i++) + { + final Options op = OptionData.getInstance().getOptions(stats[i]); + if (op != null) + { + _options[i] = op; + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stats[i]); + } + } + } + + /** + * Get the augmentation "id" used in serverpackets. + * @return augmentationId + */ + public int getId() + { + return _id; + } + + public Options[] getOptions() + { + return _options; + } + + public int getOptionId(int index) + { + if ((index >= 0) && (index < _options.length) && (_options[index] != null)) + { + return _options[index].getId(); + } + return 0; + } + + public void applyBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.apply(player); + } + } + + public void removeBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.remove(player); + } + } +} diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java index 00e25a5f8f..ec138037fb 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java @@ -50,7 +50,7 @@ public class CharSelectInfoPackage private int _reputation = 0; private int _pkKills = 0; private int _pvpKills = 0; - private int _augmentationId = 0; + private Augmentation _augmentation; private int _x = 0; private int _y = 0; private int _z = 0; @@ -336,14 +336,14 @@ public class CharSelectInfoPackage return _reputation; } - public void setAugmentationId(int augmentationId) + public void setAugmentation(Augmentation augmentation) { - _augmentationId = augmentationId; + _augmentation = augmentation; } - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } public void setPkKills(int PkKills) diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/ItemInfo.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/ItemInfo.java index e8e8b21cd0..fb42cf8124 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/ItemInfo.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/ItemInfo.java @@ -39,10 +39,10 @@ public class ItemInfo private L2Item _item; /** The level of enchant on the L2ItemInstance */ - private int _enchant; + private int _enchantLevel; /** The augmentation of the item */ - private int _augmentation; + private Augmentation _augmentation; /** The quantity of L2ItemInstance */ private long _count; @@ -68,7 +68,7 @@ public class ItemInfo private byte _elemAtkType = -2; private int _elemAtkPower = 0; - private final int[] _elemDefAttr = + private final int[] _attributeDefence = { 0, 0, @@ -99,17 +99,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentation().getId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -150,7 +143,7 @@ public class ItemInfo _elemAtkPower = item.getAttackAttributePower(); for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) { - _elemDefAttr[type.getClientId()] = item.getDefenceAttribute(type); + _attributeDefence[type.getClientId()] = item.getDefenceAttribute(type); } _option = item.getEnchantOptions(); _soulCrystalOptions = item.getSpecialAbilities(); @@ -179,10 +172,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchant(); + _enchantLevel = item.getEnchant(); // Get the augmentation bonus - _augmentation = item.getAugmentId(); + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -207,7 +200,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); @@ -230,10 +223,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = 0; + _enchantLevel = 0; - // Get the augmentation boni - _augmentation = 0; + // Get the augmentation bonus + _augmentation = null; // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -272,17 +265,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentationId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -303,7 +289,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); _soulCrystalOptions = item.getSoulCrystalOptions(); @@ -320,26 +306,16 @@ public class ItemInfo return _item; } - public int getEnchant() + public int getEnchantLevel() { - return _enchant; + return _enchantLevel; } - public int getAugmentationBonus() + public Augmentation getAugmentation() { return _augmentation; } - public int get1stAugmentationId() - { - return 0x0000FFFF & getAugmentationBonus(); - } - - public int get2ndAugmentationId() - { - return getAugmentationBonus() >> 16; - } - public long getCount() { return _count; @@ -395,9 +371,9 @@ public class ItemInfo return _elemAtkPower; } - public int getElementDefAttr(byte i) + public int getAttributeDefence(AttributeType attribute) { - return _elemDefAttr[i]; + return _attributeDefence[attribute.getClientId()]; } public int[] getEnchantOptions() @@ -412,12 +388,12 @@ public class ItemInfo public Collection getSoulCrystalOptions() { - return _soulCrystalOptions; + return _soulCrystalOptions != null ? _soulCrystalOptions : Collections.emptyList(); } public Collection getSoulCrystalSpecialOptions() { - return _soulCrystalSpecialOptions; + return _soulCrystalSpecialOptions != null ? _soulCrystalSpecialOptions : Collections.emptyList(); } public long getVisualExpiration() diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2MapRegion.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2MapRegion.java index 1fc3170544..bf0bb6353b 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2MapRegion.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2MapRegion.java @@ -33,7 +33,6 @@ public class L2MapRegion private final String _name; private final String _town; private final int _locId; - private final int _castle; private final int _bbs; private List _maps = null; @@ -44,12 +43,11 @@ public class L2MapRegion private final Map _bannedRace = new HashMap<>(); - public L2MapRegion(String name, String town, int locId, int castle, int bbs) + public L2MapRegion(String name, String town, int locId, int bbs) { _name = name; _town = town; _locId = locId; - _castle = castle; _bbs = bbs; } @@ -68,11 +66,6 @@ public class L2MapRegion return _locId; } - public final int getCastle() - { - return _castle; - } - public final int getBbs() { return _bbs; diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/StatsSet.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/StatsSet.java index 8bd7bed637..67277686c3 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/StatsSet.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/StatsSet.java @@ -711,6 +711,20 @@ public class StatsSet implements IParserAdvUtils return (A) obj; } + @SuppressWarnings("unchecked") + public final
A getObject(String name, Class type, A defaultValue) + { + Objects.requireNonNull(name); + Objects.requireNonNull(type); + final Object obj = _set.get(name); + if ((obj == null) || !type.isAssignableFrom(obj.getClass())) + { + return defaultValue; + } + + return (A) obj; + } + public SkillHolder getSkillHolder(String key) { Objects.requireNonNull(key); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/TradeItem.java index b37de23dd2..b688345ebf 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -51,7 +51,7 @@ public class TradeItem private final Collection _soulCrystalOptions; private final Collection _soulCrystalSpecialOptions; private int _visualId; - private int _augmentId; + private Augmentation _augmentation; public TradeItem(L2ItemInstance item, long count, long price) { @@ -74,7 +74,7 @@ public class TradeItem _soulCrystalOptions = item.getSpecialAbilities(); _soulCrystalSpecialOptions = item.getAdditionalSpecialAbilities(); _visualId = item.getVisualId(); - _augmentId = item.isAugmented() ? item.getAugmentation().getId() : 0; + _augmentation = item.getAugmentation(); } public TradeItem(L2Item item, long count, long price) @@ -215,9 +215,9 @@ public class TradeItem return _soulCrystalSpecialOptions; } - public int getAugmentId() + public Augmentation getAugmentation() { - return _augmentId; + return _augmentation; } public int getVisualId() diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/TradeList.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/TradeList.java index 762195553a..29362b8549 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/TradeList.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/TradeList.java @@ -323,6 +323,12 @@ public class TradeList return null; } + if (count < 0) + { + _log.warning(_owner.getName() + ": Attempt to remove " + count + " items from TradeList!"); + return null; + } + for (TradeItem titem : _items) { if ((titem.getObjectId() == objectId) || (titem.getItem().getId() == itemId)) @@ -881,10 +887,10 @@ public class TradeList /** * Sell items to this PrivateStore list * @param player - * @param items + * @param requestedItems * @return : boolean true if success */ - public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] items) + public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] requestedItems) { if (_locked) { @@ -907,12 +913,14 @@ public class TradeList long totalPrice = 0; - for (ItemRequest item : items) + final TradeItem[] sellerItems = _items.toArray(new TradeItem[0]); + + for (ItemRequest item : requestedItems) { // searching item in tradelist using itemId boolean found = false; - for (TradeItem ti : _items) + for (TradeItem ti : sellerItems) { if (ti.getItem().getId() == item.getItemId()) { @@ -956,8 +964,19 @@ public class TradeList continue; } + if ((item.getObjectId() < 1) || (item.getObjectId() > sellerItems.length)) + { + continue; + } + + final TradeItem tradeItem = sellerItems[item.getObjectId() - 1]; + if ((tradeItem == null) || (tradeItem.getItem().getId() != item.getItemId())) + { + continue; + } + // Check if requested item is available for manipulation - int objectId = item.getObjectId(); + int objectId = tradeItem.getObjectId(); L2ItemInstance oldItem = player.checkItemManipulation(objectId, item.getCount(), "sell"); // private store - buy use same objectId for buying several non-stackable items if (oldItem == null) diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Npc.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Npc.java index b669e16e76..5dc7a521bb 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Npc.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/L2Npc.java @@ -34,6 +34,7 @@ import com.l2jmobius.gameserver.enums.MpRewardAffectType; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.ShotType; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.enums.Team; import com.l2jmobius.gameserver.enums.UserInfoType; import com.l2jmobius.gameserver.handler.BypassHandler; @@ -42,7 +43,6 @@ import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager.DBStatusType; import com.l2jmobius.gameserver.instancemanager.FortManager; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.L2Object; @@ -83,6 +83,7 @@ import com.l2jmobius.gameserver.model.spawns.NpcSpawnTemplate; import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.variables.NpcVariables; import com.l2jmobius.gameserver.model.zone.ZoneId; +import com.l2jmobius.gameserver.model.zone.type.L2TaxZone; import com.l2jmobius.gameserver.network.NpcStringId; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; @@ -154,6 +155,9 @@ public class L2Npc extends L2Character private StatsSet _params; private DBSpawnManager.DBStatusType _raidStatus; + /** Contains information about local tax payments. */ + private L2TaxZone _taxZone = null; + /** * Constructor of L2NpcInstance (use L2Character constructor).
* Actions: @@ -519,6 +523,48 @@ public class L2Npc extends L2Character return true; } + /** + * Set another tax zone which will be used for tax payments. + * @param zone newly entered tax zone + */ + public final void setTaxZone(L2TaxZone zone) + { + _taxZone = ((zone != null) && !isInInstance()) ? zone : null; + } + + /** + * Gets castle for tax payments. + * @return instance of {@link Castle} when NPC is inside {@link L2TaxZone} otherwise {@code null} + */ + public final Castle getTaxCastle() + { + return (_taxZone != null) ? _taxZone.getCastle() : null; + } + + /** + * Gets castle tax rate + * @param type type of tax + * @return tax rate when NPC is inside tax zone otherwise {@code 0} + */ + public final double getCastleTaxRate(TaxType type) + { + final Castle castle = getTaxCastle(); + return (castle != null) ? (castle.getTaxPercent(type) / 100.0) : 0; + } + + /** + * Increase castle vault by specified tax amount. + * @param amount tax amount + */ + public final void handleTaxPayment(long amount) + { + final Castle taxCastle = getTaxCastle(); + if (taxCastle != null) + { + taxCastle.addToTreasury(amount); + } + } + /** * @return the nearest L2Castle this L2NpcInstance belongs to. Otherwise null. */ @@ -560,11 +606,6 @@ public class L2Npc extends L2Character return FortManager.getInstance().findNearestFort(this, maxDistance); } - public final boolean isInTown() - { - return TownManager.getTown(getX(), getY(), getZ()) != null; - } - /** * Open a quest or chat window on client with the text of the L2NpcInstance in function of the command.
* Example of use : @@ -1063,14 +1104,9 @@ public class L2Npc extends L2Character WalkingManager.getInstance().onSpawn(this); } - // Display clan flag - if (isInsideZone(ZoneId.TOWN) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) + if (isInsideZone(ZoneId.TAX) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) { - final int townId = TownManager.getTown(getX(), getY(), getZ()).getTownId(); - if ((townId != 33) && (townId != 22)) - { - setClanId(getCastle().getOwnerId()); - } + setClanId(getCastle().getOwnerId()); } } @@ -1079,12 +1115,12 @@ public class L2Npc extends L2Character */ public void onRespawn() { - // Stop all effects and recalculate stats without broadcasting. - getEffectList().stopAllEffects(false); - // Make it alive setIsDead(false); + // Stop all effects and recalculate stats without broadcasting. + getEffectList().stopAllEffects(false); + // Reset decay info setDecayed(false); @@ -1827,11 +1863,17 @@ public class L2Npc extends L2Character initSeenCreatures(getTemplate().getAggroRange()); } + /** + * @return the NpcStringId for name + */ public NpcStringId getNameString() { return _nameString; } + /** + * @return the NpcStringId for title + */ public NpcStringId getTitleString() { return _titleString; diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java index b48afd7f29..71096be532 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java @@ -21,7 +21,7 @@ import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -52,8 +52,7 @@ public class L2MerchantInstance extends L2NpcInstance @Override public String getHtmlPath(int npcId, int val) { - String pom = ""; - + String pom; if (val == 0) { pom = "" + npcId; @@ -62,7 +61,6 @@ public class L2MerchantInstance extends L2NpcInstance { pom = npcId + "-" + val; } - return "data/html/merchant/" + pom + ".htm"; } @@ -71,9 +69,9 @@ public class L2MerchantInstance extends L2NpcInstance showBuyWindow(player, val, true); } - public final void showBuyWindow(L2PcInstance player, int val, boolean applyTax) + public final void showBuyWindow(L2PcInstance player, int val, boolean applyCastleTax) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); @@ -90,23 +88,7 @@ public class L2MerchantInstance extends L2NpcInstance player.setInventoryBlockingStatus(true); - player.sendPacket(new BuyList(buyList, player.getAdena(), (applyTax) ? getTotalTaxRate(TaxType.BUY) : 0)); - player.sendPacket(new ExBuySellList(player, false, (applyTax) ? getTotalTaxRate(TaxType.SELL) : 0)); - player.sendPacket(ActionFailed.STATIC_PACKET); - } - - public boolean hasCastle() - { - return getCastle() != null; - } - - public int getTotalTax(TaxType taxType) - { - return hasCastle() ? getCastle().getTaxPercent(taxType) : 0; - } - - public double getTotalTaxRate(TaxType taxType) - { - return getTotalTax(taxType) / 100.0; + player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0)); + player.sendPacket(new ExBuySellList(player, false, (applyCastleTax) ? getCastleTaxRate(TaxType.SELL) : 0)); } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java index 9429bcdb82..560f8b89c4 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java @@ -161,7 +161,6 @@ import com.l2jmobius.gameserver.model.actor.stat.PcStat; import com.l2jmobius.gameserver.model.actor.status.PcStatus; import com.l2jmobius.gameserver.model.actor.tasks.player.DismountTask; import com.l2jmobius.gameserver.model.actor.tasks.player.FameTask; -import com.l2jmobius.gameserver.model.actor.tasks.player.GameGuardCheckTask; import com.l2jmobius.gameserver.model.actor.tasks.player.HennaDurationTask; import com.l2jmobius.gameserver.model.actor.tasks.player.InventoryEnableTask; import com.l2jmobius.gameserver.model.actor.tasks.player.PetFeedTask; @@ -211,6 +210,7 @@ import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerSubCh import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.model.holders.MovieHolder; import com.l2jmobius.gameserver.model.holders.PlayerEventHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import com.l2jmobius.gameserver.model.holders.SellBuffHolder; import com.l2jmobius.gameserver.model.holders.SkillUseHolder; import com.l2jmobius.gameserver.model.holders.TrainingHolder; @@ -234,7 +234,6 @@ import com.l2jmobius.gameserver.model.items.type.ArmorType; import com.l2jmobius.gameserver.model.items.type.EtcItemType; import com.l2jmobius.gameserver.model.items.type.WeaponType; import com.l2jmobius.gameserver.model.matching.MatchingRoom; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameTask; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; @@ -288,7 +287,6 @@ import com.l2jmobius.gameserver.network.serverpackets.ExUseSharedGroupItem; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight; -import com.l2jmobius.gameserver.network.serverpackets.GameGuardQuery; import com.l2jmobius.gameserver.network.serverpackets.GetOnVehicle; import com.l2jmobius.gameserver.network.serverpackets.HennaInfo; import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -559,7 +557,7 @@ public final class L2PcInstance extends L2Playable private TradeList _buyList; // Multisell - private PreparedListContainer _currentMultiSell = null; + private PreparedMultisellListHolder _currentMultiSell = null; private int _nobleLevel = 0; private boolean _hero = false; @@ -4334,6 +4332,8 @@ public final class L2PcInstance extends L2Playable return getClan().getAllyCrestId(); } + //@formatter:off + /* public void queryGameGuard() { if (getClient() != null) @@ -4343,9 +4343,10 @@ public final class L2PcInstance extends L2Playable } if (Config.GAMEGUARD_ENFORCE) { - ThreadPoolManager.schedule(new GameGuardCheckTask(this), 30 * 1000); + ThreadPoolManager.scheduleGeneral(new GameGuardCheckTask(this), 30 * 1000); } - } + }*/ + //@formatter:on /** * Send a Server->Client packet StatusUpdate to the L2PcInstance. @@ -4710,12 +4711,12 @@ public final class L2PcInstance extends L2Playable } } - public final PreparedListContainer getMultiSell() + public final PreparedMultisellListHolder getMultiSell() { return _currentMultiSell; } - public final void setMultiSell(PreparedListContainer list) + public final void setMultiSell(PreparedMultisellListHolder list) { _currentMultiSell = list; } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/Product.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/Product.java index 10242424c7..0da19f8ec7 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/Product.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/Product.java @@ -25,9 +25,11 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; +import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.type.EtcItemType; /** * @author NosBit @@ -41,28 +43,25 @@ public final class Product private final long _price; private final long _restockDelay; private final long _maxCount; + private final double _baseTax; private AtomicLong _count = null; private ScheduledFuture _restockTask = null; - public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount) + public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount, int baseTax) { Objects.requireNonNull(item); _buyListId = buyListId; _item = item; - _price = price; + _price = (price < 0) ? item.getReferencePrice() : price; _restockDelay = restockDelay * 60000; _maxCount = maxCount; + _baseTax = baseTax / 100.0; if (hasLimitedStock()) { _count = new AtomicLong(maxCount); } } - public int getBuyListId() - { - return _buyListId; - } - public L2Item getItem() { return _item; @@ -75,11 +74,17 @@ public final class Product public long getPrice() { - if (_price < 0) + long price = _price; + if (_item.getItemType().equals(EtcItemType.CASTLE_GUARD)) { - return getItem().getReferencePrice(); + price *= Config.RATE_SIEGE_GUARDS_PRICE; } - return _price; + return price; + } + + public double getBaseTaxRate() + { + return _baseTax; } public long getRestockDelay() @@ -155,7 +160,7 @@ public final class Product try (Connection con = DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("INSERT INTO `buylists`(`buylist_id`, `item_id`, `count`, `next_restock_time`) VALUES(?, ?, ?, ?) ON DUPLICATE KEY UPDATE `count` = ?, `next_restock_time` = ?")) { - statement.setInt(1, getBuyListId()); + statement.setInt(1, _buyListId); statement.setInt(2, getItemId()); statement.setLong(3, getCount()); statement.setLong(5, getCount()); @@ -174,7 +179,7 @@ public final class Product } catch (Exception e) { - _log.log(Level.WARNING, "Failed to save Product buylist_id:" + getBuyListId() + " item_id:" + getItemId(), e); + _log.log(Level.WARNING, "Failed to save Product buylist_id:" + _buyListId + " item_id:" + getItemId(), e); } } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/ProductList.java similarity index 88% rename from L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java rename to L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/ProductList.java index 3a2f60297b..884bd110a6 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/ProductList.java @@ -25,13 +25,13 @@ import java.util.Set; /** * @author NosBit */ -public final class L2BuyList +public final class ProductList { private final int _listId; private final Map _products = new LinkedHashMap<>(); private Set _allowedNpcs = null; - public L2BuyList(int listId) + public ProductList(int listId) { _listId = listId; } @@ -70,8 +70,8 @@ public final class L2BuyList return (_allowedNpcs != null) && _allowedNpcs.contains(npcId); } - public Set getNpcsAllowed() - { - return _allowedNpcs; - } + //public Set getNpcsAllowed() + //{ + // return _allowedNpcs; + //} } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java index 18b06f6692..e6dc9d5e58 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java @@ -49,4 +49,10 @@ public class EnsoulOption extends SkillHolder { return _desc; } + + @Override + public String toString() + { + return "Ensoul Id: " + _id + " Name: " + _name + " Desc: " + _desc; + } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/entity/Castle.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/entity/Castle.java index b657df5013..f1aa77737c 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/entity/Castle.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/entity/Castle.java @@ -78,7 +78,6 @@ public final class Castle extends AbstractResidence private boolean _isTimeRegistrationOver = true; // true if Castle Lords set the time, or 24h is elapsed after the siege private Calendar _siegeTimeRegistrationEndDate; // last siege end date + 1 day private CastleSide _castleSide = null; - private double _taxRate; private long _treasury = 0; private boolean _showNpcCrest = false; private L2SiegeZone _zone = null; @@ -301,7 +300,7 @@ public final class Castle extends AbstractResidence final Castle rune = CastleManager.getInstance().getCastle("rune"); if (rune != null) { - final long runeTax = (long) (amount * rune.getTaxRate()); + final long runeTax = (long) (amount * rune.getTaxRate(TaxType.BUY)); if (rune.getOwnerId() > 0) { rune.addToTreasury(runeTax); @@ -319,7 +318,7 @@ public final class Castle extends AbstractResidence final Castle aden = CastleManager.getInstance().getCastle("aden"); if (aden != null) { - final long adenTax = (long) (amount * aden.getTaxRate()); // Find out what Aden gets from the current castle instance's income + final long adenTax = (long) (amount * aden.getTaxRate(TaxType.BUY)); // Find out what Aden gets from the current castle instance's income if (aden.getOwnerId() > 0) { aden.addToTreasury(adenTax); // Only bother to really add the tax to the treasury if not npc owned @@ -673,7 +672,6 @@ public final class Castle extends AbstractResidence } } - setTaxRate(getTaxPercent(TaxType.BUY) / 100); ps2.setInt(1, getResidenceId()); try (ResultSet rs = ps2.executeQuery()) { @@ -980,14 +978,9 @@ public final class Castle extends AbstractResidence return taxPercent; } - public void setTaxRate(double taxRate) + public final double getTaxRate(TaxType taxType) { - _taxRate = taxRate; - } - - public final double getTaxRate() - { - return _taxRate; + return getTaxPercent(taxType) / 100.0; } public final long getTreasury() @@ -1229,7 +1222,6 @@ public final class Castle extends AbstractResidence _log.log(Level.WARNING, e.getMessage(), e); } _castleSide = side; - setTaxRate(getTaxPercent(TaxType.BUY) / 100); Broadcast.toAllOnlinePlayers(new ExCastleState(this)); spawnSideNpcs(); } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/events/AbstractScript.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/events/AbstractScript.java index e7e77b497a..fac1d64c29 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/events/AbstractScript.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/events/AbstractScript.java @@ -2700,7 +2700,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime // set enchant level for item if that item is not adena if ((attributeType != null) && (attributeValue > 0)) { - item.setAttribute(new AttributeHolder(attributeType, attributeValue)); + item.setAttribute(new AttributeHolder(attributeType, attributeValue), true); if (item.isEquipped()) { // Recalculate all stats diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java index 09f3f798a1..0c4c87491d 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java @@ -16,7 +16,7 @@ */ package com.l2jmobius.gameserver.model.events.impl.character.player; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.events.EventType; import com.l2jmobius.gameserver.model.events.impl.IBaseEvent; @@ -29,10 +29,10 @@ public class OnPlayerAugment implements IBaseEvent { private final L2PcInstance _activeChar; private final L2ItemInstance _item; - private final L2Augmentation _augmentation; + private final Augmentation _augmentation; private final boolean _isAugment; // true = is being augmented // false = augment is being removed - public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, L2Augmentation augment, boolean isAugment) + public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, Augmentation augment, boolean isAugment) { _activeChar = activeChar; _item = item; @@ -50,7 +50,7 @@ public class OnPlayerAugment implements IBaseEvent return _item; } - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java index 5ca4c5c7af..5a1e474b7f 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java @@ -16,6 +16,10 @@ */ package com.l2jmobius.gameserver.model.holders; +import java.util.List; + +import com.l2jmobius.commons.util.Rnd; + /** * A DTO for items; contains item ID, count and chance.
* Complemented by {@link QuestItemHolder}. @@ -45,6 +49,34 @@ public class ItemChanceHolder extends ItemHolder return _chance; } + /** + * Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected. + * @param holders list of holders to calculate chance from. + * @return {@code ItemChanceHolder} of the successful random roll or {@code null} if there was no lucky holder selected. + */ + public static ItemChanceHolder getRandomHolder(List holders) + { + double itemRandom = 100 * Rnd.nextDouble(); + + for (ItemChanceHolder holder : holders) + { + // Any mathmatical expression including NaN will result in either NaN or 0 of converted to something other than double. + // We would usually want to skip calculating any holders that include NaN as a chance, because that ruins the overall process. + if (!Double.isNaN(holder.getChance())) + { + // Calculate chance + if (holder.getChance() > itemRandom) + { + return holder; + } + + itemRandom -= holder.getChance(); + } + } + + return null; + } + @Override public String toString() { diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java new file mode 100644 index 0000000000..68a6ee23b1 --- /dev/null +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java @@ -0,0 +1,56 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.items.L2Item; + +/** + * @author Nik + */ +public class MultisellEntryHolder +{ + private final boolean _stackable; + private final List _ingredients; + private final List _products; + + public MultisellEntryHolder(List ingredients, List products) + { + _ingredients = Collections.unmodifiableList(ingredients); + _products = Collections.unmodifiableList(products); + _stackable = products.stream().map(i -> ItemTable.getInstance().getTemplate(i.getId())).filter(Objects::nonNull).allMatch(L2Item::isStackable); + } + + public final List getIngredients() + { + return _ingredients; + } + + public final List getProducts() + { + return _products; + } + + public final boolean isStackable() + { + return _stackable; + } +} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java new file mode 100644 index 0000000000..df7ddfa43d --- /dev/null +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java @@ -0,0 +1,112 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.interfaces.IIdentifiable; + +/** + * A static list container of all multisell entries of a given list. + * @author Nik + */ +public class MultisellListHolder implements IIdentifiable +{ + private final int _listId; + private final boolean _isChanceMultisell; + private final boolean _applyTaxes; + private final boolean _maintainEnchantment; + private final double _ingredientMultiplier; + private final double _productMultiplier; + + protected List _entries; + protected final Set _npcsAllowed; + + public MultisellListHolder(int listId, boolean isChanceMultisell, boolean applyTaxes, boolean maintainEnchantment, double ingredientMultiplier, double productMultiplier, List entries, Set npcsAllowed) + { + _listId = listId; + _isChanceMultisell = isChanceMultisell; + _applyTaxes = applyTaxes; + _maintainEnchantment = maintainEnchantment; + _ingredientMultiplier = ingredientMultiplier; + _productMultiplier = productMultiplier; + _entries = entries; + _npcsAllowed = npcsAllowed; + } + + @SuppressWarnings("unchecked") + public MultisellListHolder(StatsSet set) + { + _listId = set.getInt("listId"); + _isChanceMultisell = set.getBoolean("isChanceMultisell", false); + _applyTaxes = set.getBoolean("applyTaxes", false); + _maintainEnchantment = set.getBoolean("maintainEnchantment", false); + _ingredientMultiplier = set.getDouble("ingredientMultiplier", 1.0); + _productMultiplier = set.getDouble("productMultiplier", 1.0); + _entries = Collections.unmodifiableList(set.getList("entries", MultisellEntryHolder.class, Collections.emptyList())); + _npcsAllowed = set.getObject("allowNpc", Set.class); + } + + public List getEntries() + { + return _entries; + } + + @Override + public final int getId() + { + return _listId; + } + + public final boolean isChanceMultisell() + { + return _isChanceMultisell; + } + + public final boolean isApplyTaxes() + { + return _applyTaxes; + } + + public final boolean isMaintainEnchantment() + { + return _maintainEnchantment; + } + + public final double getIngredientMultiplier() + { + return _ingredientMultiplier; + } + + public final double getProductMultiplier() + { + return _productMultiplier; + } + + public final boolean isNpcAllowed(int npcId) + { + return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); + } + + public final boolean isNpcOnly() + { + return _npcsAllowed != null; + } +} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java new file mode 100644 index 0000000000..db693465a0 --- /dev/null +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java @@ -0,0 +1,107 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.ArrayList; +import java.util.List; + +import com.l2jmobius.gameserver.enums.TaxType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; +import com.l2jmobius.gameserver.model.itemcontainer.ItemContainer; + +/** + * A modified version of {@link MultisellListHolder} that may include altered data of the original and other dynamic data resulted from players' interraction. + * @author Nik + */ +public class PreparedMultisellListHolder extends MultisellListHolder +{ + private int _npcObjectId; + private final boolean _inventoryOnly; + private double _taxRate; + private List _itemInfos; + + public PreparedMultisellListHolder(MultisellListHolder list, boolean inventoryOnly, ItemContainer inventory, L2Npc npc, double ingredientMultiplier, double productMultiplier) + { + super(list.getId(), list.isChanceMultisell(), list.isApplyTaxes(), list.isMaintainEnchantment(), list.getIngredientMultiplier(), list.getProductMultiplier(), list._entries, list._npcsAllowed); + + _inventoryOnly = inventoryOnly; + + if (npc != null) + { + _npcObjectId = npc.getObjectId(); + _taxRate = npc.getCastleTaxRate(TaxType.BUY); + } + + // Display items from inventory that are available for exchange. + if (inventoryOnly) + { + _entries = new ArrayList<>(); + _itemInfos = new ArrayList<>(); + + // Only do the match up on equippable items that are not currently equipped. For each appropriate item, produce a set of entries for the multisell list. + inventory.getItems(item -> !item.isEquipped() && (item.isArmor() || item.isWeapon())).forEach(item -> + { + // Check ingredients of each entry to see if it's an entry we'd like to include. + list.getEntries().stream().filter(e -> e.getIngredients().stream().anyMatch(i -> i.getId() == item.getId())).forEach(e -> + { + _entries.add(e); + _itemInfos.add(new ItemInfo(item)); + }); + }); + } + } + + public ItemInfo getItemEnchantment(int index) + { + return _itemInfos != null ? _itemInfos.get(index) : null; + } + + public double getTaxRate() + { + return isApplyTaxes() ? _taxRate : 0; + } + + public boolean isInventoryOnly() + { + return _inventoryOnly; + } + + public final boolean checkNpcObjectId(int npcObjectId) + { + return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); + } + + /** + * @param ingredient + * @return the new count of the given ingredient after applying ingredient multiplier and adena tax rate. + */ + public long getIngredientCount(ItemHolder ingredient) + { + return (ingredient.getId() == Inventory.ADENA_ID) ? Math.round(ingredient.getCount() * getIngredientMultiplier() * (1 + _taxRate)) : Math.round(ingredient.getCount() * getIngredientMultiplier()); + } + + /** + * @param product + * @return the new count of the given product after applying product multiplier. + */ + public long getProductCount(ItemChanceHolder product) + { + return Math.round(product.getCount() * getProductMultiplier()); + } +} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java index 22f7a0625a..48d6d470a6 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -16,9 +16,10 @@ */ package com.l2jmobius.gameserver.model.itemauction; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.idfactory.IdFactory; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; @@ -83,10 +84,10 @@ public final class AuctionItem L2World.getInstance().storeObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); - final int augmentationId = _itemExtra.getInt("augmentation_id", 0); - if (augmentationId > 0) + final Augmentation augmentation = AugmentationData.getInstance().getAugmentation(_itemExtra.getInt("augmentation_id", 0)); + if (augmentation != null) { - item.setAugmentation(new L2Augmentation(augmentationId)); + item.setAugmentation(augmentation, false); } return item; } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 88575164db..679ddd1b8f 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.ItemLocation; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2ArmorSet; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.PcCondOverride; @@ -1021,10 +1022,10 @@ public abstract class Inventory extends ItemContainer return (item != null) ? item.getVisualId() : 0; } - public int getPaperdollAugmentationId(int slot) + public Augmentation getPaperdollAugmentation(int slot) { final L2ItemInstance item = _paperdoll[slot]; - return ((item != null) && (item.getAugmentation() != null)) ? item.getAugmentation().getId() : 0; + return (item != null) ? item.getAugmentation() : null; } /** diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java index 9450e02823..8b80a1d496 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java @@ -159,50 +159,6 @@ public class PcInventory extends Inventory return list; } - /** - * Returns the list of items in inventory available for transaction Allows an item to appear twice if and only if there is a difference in enchantment level. - * @param allowAdena - * @param allowAncientAdena - * @return L2ItemInstance : items in inventory - */ - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena) - { - return getUniqueItemsByEnchantLevel(allowAdena, allowAncientAdena, true); - } - - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena, boolean onlyAvailable) - { - final Collection list = new LinkedList<>(); - for (L2ItemInstance item : _items.values()) - { - if (!allowAdena && (item.getId() == ADENA_ID)) - { - continue; - } - if (!allowAncientAdena && (item.getId() == ANCIENT_ADENA_ID)) - { - continue; - } - - boolean isDuplicate = false; - for (L2ItemInstance litem : list) - { - if ((litem.getId() == item.getId()) && (litem.getEnchantLevel() == item.getEnchantLevel())) - { - isDuplicate = true; - break; - } - } - - if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false, false)))) - { - list.add(item); - } - } - - return list; - } - /** * @param itemId * @return diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java index 49f470e282..b108dba8f0 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Objects; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.type.CrystalType; @@ -44,8 +45,7 @@ public class L2WarehouseItem private final int _locationSlot; private final int _enchant; private final CrystalType _grade; - private boolean _isAugmented; - private int _augmentationId; + private final Augmentation _augmentation; private final int _customType1; private final int _customType2; private final int _mana; @@ -81,15 +81,7 @@ public class L2WarehouseItem _customType1 = item.getCustomType1(); _customType2 = item.getCustomType2(); _grade = item.getItem().getCrystalType(); - if (item.isAugmented()) - { - _isAugmented = true; - _augmentationId = item.getAugmentation().getId(); - } - else - { - _isAugmented = false; - } + _augmentation = item.getAugmentation(); _mana = item.getMana(); _time = item.isTimeLimitedItem() ? (int) (item.getRemainingTime() / 1000) : -1; @@ -232,20 +224,12 @@ public class L2WarehouseItem return _item.getName(); } - /** - * @return {@code true} if the item is augmented, {@code false} otherwise. - */ - public boolean isAugmented() - { - return _isAugmented; - } - /** * @return the augmentation If. */ - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } /** diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java index 551733f42a..8d47089f05 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.data.xml.impl.AppearanceItemData; import com.l2jmobius.gameserver.data.xml.impl.EnchantItemOptionsData; import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.InstanceType; @@ -53,8 +54,8 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import com.l2jmobius.gameserver.instancemanager.SiegeGuardManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.DropProtection; -import com.l2jmobius.gameserver.model.L2Augmentation; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; @@ -135,7 +136,7 @@ public final class L2ItemInstance extends L2Object private boolean _wear; /** Augmented Item */ - private L2Augmentation _augmentation = null; + private Augmentation _augmentation = null; /** Shadow item */ private int _mana = -1; @@ -948,7 +949,7 @@ public final class L2ItemInstance extends L2Object * Returns the augmentation object for this item * @return augmentation */ - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } @@ -956,9 +957,10 @@ public final class L2ItemInstance extends L2Object /** * Sets a new augmentation * @param augmentation + * @param updateDatabase * @return return true if successfully */ - public boolean setAugmentation(L2Augmentation augmentation) + public boolean setAugmentation(Augmentation augmentation, boolean updateDatabase) { // there shall be no previous augmentation.. if (_augmentation != null) @@ -968,13 +970,9 @@ public final class L2ItemInstance extends L2Object } _augmentation = augmentation; - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemAttributes(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e); + updateItemOptions(); } EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); return true; @@ -991,7 +989,7 @@ public final class L2ItemInstance extends L2Object } // Copy augmentation before removing it. - final L2Augmentation augment = _augmentation; + final Augmentation augment = _augmentation; _augmentation = null; try (Connection con = DatabaseFactory.getInstance().getConnection(); @@ -1023,7 +1021,7 @@ public final class L2ItemInstance extends L2Object final int aug_attributes = rs.getInt(1); if (aug_attributes != -1) { - _augmentation = new L2Augmentation(rs.getInt("augAttributes")); + _augmentation = AugmentationData.getInstance().getAugmentation(rs.getInt("augAttributes")); } } } @@ -1048,7 +1046,19 @@ public final class L2ItemInstance extends L2Object } } - private void updateItemAttributes(Connection con) + public void updateItemOptions() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemOptions(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + toString() + " from DB:", e); + } + } + + private void updateItemOptions(Connection con) { try (PreparedStatement ps = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?)")) { @@ -1062,6 +1072,18 @@ public final class L2ItemInstance extends L2Object } } + public void updateItemElementals() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemElements(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + toString() + " from DB: ", e); + } + } + private void updateItemElements(Connection con) { try (PreparedStatement ps = con.prepareStatement("DELETE FROM item_elementals WHERE itemId = ?")) @@ -1187,17 +1209,14 @@ public final class L2ItemInstance extends L2Object /** * Add elemental attribute to item and save to db * @param holder + * @param updateDatabase */ - public void setAttribute(AttributeHolder holder) + public void setAttribute(AttributeHolder holder, boolean updateDatabase) { applyAttribute(holder); - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemElements(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + this + " from DB:", e); + updateItemElementals(); } } @@ -1646,12 +1665,16 @@ public final class L2ItemInstance extends L2Object if (_augmentation != null) { - updateItemAttributes(con); + updateItemOptions(con); } if (_elementals != null) { updateItemElements(con); } + if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) + { + updateSpecialAbilities(con); + } } catch (Exception e) { @@ -2217,10 +2240,21 @@ public final class L2ItemInstance extends L2Object } } - private void updateSpecialAbilities() + public void updateSpecialAbilities() { - try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateSpecialAbilities(con); + } + catch (Exception e) + { + LOGGER.log(Level.WARNING, "Couldn't update item special abilities", e); + } + } + + private void updateSpecialAbilities(Connection con) + { + try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); for (Entry entry : _ensoulOptions.entrySet()) diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/Entry.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/Entry.java deleted file mode 100644 index 3a54373813..0000000000 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/Entry.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author DS - */ -public class Entry -{ - protected int _entryId; - protected boolean _stackable = true; - - protected List _products; - protected List _ingredients; - - public Entry(int entryId) - { - _entryId = entryId; - _products = new ArrayList<>(); - _ingredients = new ArrayList<>(); - } - - /** - * This constructor used in PreparedEntry only, ArrayLists not created. - */ - protected Entry() - { - } - - public final void setEntryId(int id) - { - _entryId = id; - } - - public final int getEntryId() - { - return _entryId; - } - - public final void addProduct(Ingredient product) - { - _products.add(product); - - if (!product.isStackable()) - { - _stackable = false; - } - } - - public final List getProducts() - { - return _products; - } - - public final void addIngredient(Ingredient ingredient) - { - _ingredients.add(ingredient); - } - - public final List getIngredients() - { - return _ingredients; - } - - public final boolean isStackable() - { - return _stackable; - } - - public long getTaxAmount() - { - return 0; - } -} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java deleted file mode 100644 index b0dd180176..0000000000 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Item; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class Ingredient -{ - private int _itemId; - private long _itemCount; - private final int _enchantmentLevel; - private boolean _isTaxIngredient; - private boolean _maintainIngredient; - private L2Item _template = null; - private ItemInfo _itemInfo = null; - private final double _chance; - - public Ingredient(StatsSet set) - { - this(set.getInt("id"), set.getLong("count"), set.getInt("enchantmentLevel", 0), set.getDouble("chance", 0), set.getBoolean("isTaxIngredient", false), set.getBoolean("maintainIngredient", false)); - } - - public Ingredient(int itemId, long itemCount, int enchantmentLevel, double chance, boolean isTaxIngredient, boolean maintainIngredient) - { - _itemId = itemId; - _itemCount = itemCount; - _enchantmentLevel = enchantmentLevel; - _chance = chance; - _isTaxIngredient = isTaxIngredient; - _maintainIngredient = maintainIngredient; - if (_itemId > 0) - { - _template = ItemTable.getInstance().getTemplate(_itemId); - } - } - - /** - * @return a new Ingredient instance with the same values as this. - */ - public Ingredient getCopy() - { - return new Ingredient(_itemId, _itemCount, _enchantmentLevel, _chance, _isTaxIngredient, _maintainIngredient); - } - - public final L2Item getTemplate() - { - return _template; - } - - public final void setItemInfo(L2ItemInstance item) - { - _itemInfo = new ItemInfo(item); - } - - public final void setItemInfo(ItemInfo info) - { - _itemInfo = info; - } - - public final ItemInfo getItemInfo() - { - return _itemInfo; - } - - public final int getEnchantLevel() - { - return _itemInfo == null ? _enchantmentLevel : _itemInfo.getEnchantLevel(); - } - - public final void setItemId(int itemId) - { - _itemId = itemId; - } - - public final int getItemId() - { - return _itemId; - } - - public final void setItemCount(long itemCount) - { - _itemCount = itemCount; - } - - public final long getItemCount() - { - return _itemCount; - } - - public double getChance() - { - return _chance; - } - - public final void setIsTaxIngredient(boolean isTaxIngredient) - { - _isTaxIngredient = isTaxIngredient; - } - - public final boolean isTaxIngredient() - { - return _isTaxIngredient; - } - - public final void setMaintainIngredient(boolean maintainIngredient) - { - _maintainIngredient = maintainIngredient; - } - - public final boolean getMaintainIngredient() - { - return _maintainIngredient; - } - - public final boolean isStackable() - { - return (_template == null) || _template.isStackable(); - } - - public final boolean isArmorOrWeapon() - { - return (_template != null) && ((_template instanceof L2Armor) || (_template instanceof L2Weapon)); - } - - public final int getWeight() - { - return _template == null ? 0 : _template.getWeight(); - } -} diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java deleted file mode 100644 index 4658a69daf..0000000000 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.Collection; - -import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.variables.ItemVariables; - -/** - * @author DS - */ -public class ItemInfo -{ - private final int _enchantLevel, _augmentId; - private final byte _elementId; - private final int _elementPower; - private final AttributeHolder[] _attributes; - private final int _visualId; - private final int _visualStoneId; - private final long _visualIdLifetime; - private final Collection _specialAbilities; - private final Collection _additionalSpecialAbilities; - - public ItemInfo(L2ItemInstance item) - { - _enchantLevel = item.getEnchantLevel(); - _augmentId = item.getAugmentation() != null ? item.getAugmentation().getId() : 0; - _elementId = item.getAttackAttributeType().getClientId(); - _elementPower = item.getAttackAttributePower(); - _attributes = item.getAttributes() != null ? item.getAttributes().toArray(new AttributeHolder[6]) : new AttributeHolder[6]; - _visualId = item.getVisualId(); - _visualStoneId = item.getVariables().getInt(ItemVariables.VISUAL_APPEARANCE_STONE_ID, 0); - _visualIdLifetime = item.getVisualLifeTime(); - _specialAbilities = item.getSpecialAbilities(); - _additionalSpecialAbilities = item.getAdditionalSpecialAbilities(); - } - - public final int getEnchantLevel() - { - return _enchantLevel; - } - - public final int getAugmentId() - { - return _augmentId; - } - - public final byte getElementId() - { - return _elementId; - } - - public final int getElementPower() - { - return _elementPower; - } - - public final AttributeHolder[] getElementals() - { - return _attributes; - } - - public int getVisualId() - { - return _visualId; - } - - public int getVisualStoneId() - { - return _visualStoneId; - } - - public long getVisualIdLifeTime() - { - return _visualIdLifetime; - } - - public Collection getSpecialAbilities() - { - return _specialAbilities; - } - - public Collection getAdditionalSpecialAbilities() - { - return _additionalSpecialAbilities; - } -} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java deleted file mode 100644 index ce1783c276..0000000000 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * @author DS - */ -public class ListContainer -{ - private final int _listId; - private boolean _isChanceMultisell; - private boolean _applyTaxes = false; - private boolean _maintainEnchantment = false; - private double _useRate = 1.0; - - protected List _entries = new ArrayList<>(); - protected Set _npcsAllowed = null; - - public ListContainer(int listId) - { - _listId = listId; - } - - public ListContainer(ListContainer container) - { - _listId = container.getListId(); - _isChanceMultisell = container.isChanceMultisell(); - _maintainEnchantment = container.getMaintainEnchantment(); - } - - public final List getEntries() - { - return _entries; - } - - public final int getListId() - { - return _listId; - } - - public boolean isChanceMultisell() - { - return _isChanceMultisell; - } - - public void setIsChanceMultisell(boolean val) - { - _isChanceMultisell = val; - } - - public final void setApplyTaxes(boolean applyTaxes) - { - _applyTaxes = applyTaxes; - } - - public final boolean getApplyTaxes() - { - return _applyTaxes; - } - - public final void setMaintainEnchantment(boolean maintainEnchantment) - { - _maintainEnchantment = maintainEnchantment; - } - - public double getUseRate() - { - return _useRate; - } - - /** - * Set this to create multisell with increased products, all product counts will be multiplied by the rate specified.
- * NOTE: It affects only parser, it won't change values of already parsed multisell since MultiSells' parseEntry method handles this feature. - * @param rate - */ - public void setUseRate(double rate) - { - _useRate = rate; - } - - public final boolean getMaintainEnchantment() - { - return _maintainEnchantment; - } - - public void allowNpc(int npcId) - { - if (_npcsAllowed == null) - { - _npcsAllowed = new HashSet<>(); - } - _npcsAllowed.add(npcId); - } - - public boolean isNpcAllowed(int npcId) - { - return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); - } - - public boolean isNpcOnly() - { - return _npcsAllowed != null; - } -} diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java deleted file mode 100644 index 46f4aac588..0000000000 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import static com.l2jmobius.gameserver.model.itemcontainer.Inventory.ADENA_ID; - -import java.util.ArrayList; - -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class PreparedEntry extends Entry -{ - private long _taxAmount = 0; - - public PreparedEntry(Entry template, L2ItemInstance item, boolean applyTaxes, boolean maintainEnchantment, double taxRate) - { - _entryId = template.getEntryId() * 100000; - if (maintainEnchantment && (item != null)) - { - _entryId += item.getEnchantLevel(); - } - - ItemInfo info = null; - long adenaAmount = 0; - - _ingredients = new ArrayList<>(template.getIngredients().size()); - for (Ingredient ing : template.getIngredients()) - { - if (ing.getItemId() == ADENA_ID) - { - // Tax ingredients added only if taxes enabled - if (ing.isTaxIngredient()) - { - // if taxes are to be applied, modify/add the adena count based on the template adena/ancient adena count - if (applyTaxes) - { - _taxAmount += Math.round(ing.getItemCount() * taxRate); - } - } - else - { - adenaAmount += ing.getItemCount(); - } - // do not yet add this adena amount to the list as non-taxIngredient adena might be entered later (order not guaranteed) - continue; - } - if (maintainEnchantment && (item != null) && ing.isArmorOrWeapon()) - { - info = new ItemInfo(item); - final Ingredient newIngredient = ing.getCopy(); - newIngredient.setItemInfo(info); - _ingredients.add(newIngredient); - } - else - { - _ingredients.add(ing.getCopy()); - } - } - - // now add the adena, if any. - adenaAmount += _taxAmount; // do not forget tax - if (adenaAmount > 0) - { - _ingredients.add(new Ingredient(ADENA_ID, adenaAmount, 0, 0, false, false)); - } - - // now copy products - _products = new ArrayList<>(template.getProducts().size()); - for (Ingredient ing : template.getProducts()) - { - if (!ing.isStackable()) - { - _stackable = false; - } - - final Ingredient newProduct = ing.getCopy(); - if (maintainEnchantment && ing.isArmorOrWeapon()) - { - newProduct.setItemInfo(info); - } - _products.add(newProduct); - } - } - - @Override - public final long getTaxAmount() - { - return _taxAmount; - } -} diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java deleted file mode 100644 index 2e78fa3019..0000000000 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedList; - -import com.l2jmobius.gameserver.model.actor.L2Npc; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -public class PreparedListContainer extends ListContainer -{ - private int _npcObjectId = 0; - - public PreparedListContainer(ListContainer template, boolean inventoryOnly, L2PcInstance player, L2Npc npc) - { - super(template); - - setMaintainEnchantment(template.getMaintainEnchantment()); - setApplyTaxes(false); - double taxRate = 0; - if (npc != null) - { - _npcObjectId = npc.getObjectId(); - if (template.getApplyTaxes() && npc.isInTown() && (npc.getCastle().getOwnerId() > 0)) - { - setApplyTaxes(true); - taxRate = npc.getCastle().getTaxRate(); - } - } - - if (inventoryOnly) - { - if (player == null) - { - return; - } - - final Collection items; - if (getMaintainEnchantment()) - { - items = player.getInventory().getUniqueItemsByEnchantLevel(false, false, false); - } - else - { - items = player.getInventory().getUniqueItems(false, false, false); - } - - _entries = new LinkedList<>(); - for (L2ItemInstance item : items) - { - // only do the match up on equippable items that are not currently equipped - // so for each appropriate item, produce a set of entries for the multisell list. - if (!item.isEquipped() && ((item.getItem() instanceof L2Armor) || (item.getItem() instanceof L2Weapon))) - { - // loop through the entries to see which ones we wish to include - for (Entry ent : template.getEntries()) - { - // check ingredients of this entry to see if it's an entry we'd like to include. - for (Ingredient ing : ent.getIngredients()) - { - if (item.getId() == ing.getItemId()) - { - _entries.add(new PreparedEntry(ent, item, getApplyTaxes(), getMaintainEnchantment(), taxRate)); - break; // next entry - } - } - } - } - } - } - else - { - _entries = new ArrayList<>(template.getEntries().size()); - for (Entry ent : template.getEntries()) - { - _entries.add(new PreparedEntry(ent, null, getApplyTaxes(), false, taxRate)); - } - } - } - - public final boolean checkNpcObjectId(int npcObjectId) - { - return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); - } -} diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/options/Options.java index 2c24b77b7e..660c49c76e 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/options/Options.java @@ -32,12 +32,10 @@ import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime; public class Options { private final int _id; - private final List _effects = new ArrayList<>(); - - private SkillHolder _activeSkill = null; - private SkillHolder _passiveSkill = null; - - private final List _activationSkills = new ArrayList<>(); + private List _effects = null; + private List _activeSkill = null; + private List _passiveSkill = null; + private List _activationSkills = null; /** * @param id @@ -54,6 +52,10 @@ public class Options public void addEffect(AbstractEffect effect) { + if (_effects == null) + { + _effects = new ArrayList<>(); + } _effects.add(effect); } @@ -64,51 +66,62 @@ public class Options public boolean hasEffects() { - return !_effects.isEmpty(); + return _effects != null; } - public boolean hasActiveSkill() + public boolean hasActiveSkills() { return _activeSkill != null; } - public SkillHolder getActiveSkill() + public List getActiveSkills() { return _activeSkill; } - public void setActiveSkill(SkillHolder holder) + public void addActiveSkill(SkillHolder holder) { - _activeSkill = holder; + if (_activeSkill == null) + { + _activeSkill = new ArrayList<>(); + } + _activeSkill.add(holder); } - public boolean hasPassiveSkill() + public boolean hasPassiveSkills() { return _passiveSkill != null; } - public SkillHolder getPassiveSkill() + public List getPassiveSkills() { return _passiveSkill; } - public void setPassiveSkill(SkillHolder holder) + public void addPassiveSkill(SkillHolder holder) { - _passiveSkill = holder; + if (_passiveSkill == null) + { + _passiveSkill = new ArrayList<>(); + } + _passiveSkill.add(holder); } public boolean hasActivationSkills() { - return !_activationSkills.isEmpty(); + return _activationSkills != null; } public boolean hasActivationSkills(OptionsSkillType type) { - for (OptionsSkillHolder holder : _activationSkills) + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - return true; + if (holder.getSkillType() == type) + { + return true; + } } } return false; @@ -121,12 +134,15 @@ public class Options public List getActivationsSkills(OptionsSkillType type) { - final List temp = new ArrayList<>(); - for (OptionsSkillHolder holder : _activationSkills) + List temp = new ArrayList<>(); + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - temp.add(holder); + if (holder.getSkillType() == type) + { + temp.add(holder); + } } } return temp; @@ -134,6 +150,10 @@ public class Options public void addActivationSkill(OptionsSkillHolder holder) { + if (_activationSkills == null) + { + _activationSkills = new ArrayList<>(); + } _activationSkills.add(holder); } @@ -171,15 +191,21 @@ public class Options player.getEffectList().add(info); } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - addSkill(player, getActiveSkill().getSkill()); - player.sendDebugMessage("Adding active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - addSkill(player, getPassiveSkill().getSkill()); - player.sendDebugMessage("Adding passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { @@ -208,15 +234,21 @@ public class Options } } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - player.removeSkill(getActiveSkill().getSkill(), false, false); - player.sendDebugMessage("Removing active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + player.removeSkill(holder.getSkill(), false, false); + player.sendDebugMessage("Removing active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - player.removeSkill(getPassiveSkill().getSkill(), false, true); - player.sendDebugMessage("Removing passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + player.removeSkill(holder.getSkill(), false, true); + player.sendDebugMessage("Removing passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java index fd1fb41f5f..269911c172 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -59,6 +59,7 @@ public class PlayerVariables extends AbstractVariables public static final String EXTEND_DROP = "EXTEND_DROP"; public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; + public static final String DELUSION_RETURN = "DELUSION_RETURN"; private final int _objectId; diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/ZoneId.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/ZoneId.java index d3e223d4e3..41f3e41947 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/ZoneId.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/ZoneId.java @@ -37,7 +37,6 @@ public enum ZoneId NO_SUMMON_FRIEND, FORT, NO_STORE, - TOWN, SCRIPT, HQ, DANGER_AREA, @@ -47,7 +46,8 @@ public enum ZoneId NO_RESTART, SAYUNE, FISHING, - UNDYING; + UNDYING, + TAX; public static int getZoneCount() { diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java similarity index 54% rename from L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java rename to L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java index 3304f6cbe3..996f7888a2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java @@ -1,85 +1,86 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.zone.type; - -import com.l2jmobius.gameserver.model.actor.L2Character; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.ZoneId; - -/** - * A Town zone - * @author durgus - */ -public class L2TownZone extends L2ZoneType -{ - private int _townId; - private int _taxById; - - public L2TownZone(int id) - { - super(id); - - _taxById = 0; - } - - @Override - public void setParameter(String name, String value) - { - if (name.equals("townId")) - { - _townId = Integer.parseInt(value); - } - else if (name.equals("taxById")) - { - _taxById = Integer.parseInt(value); - } - else - { - super.setParameter(name, value); - } - } - - @Override - protected void onEnter(L2Character character) - { - character.setInsideZone(ZoneId.TOWN, true); - } - - @Override - protected void onExit(L2Character character) - { - character.setInsideZone(ZoneId.TOWN, false); - } - - /** - * Returns this zones town id (if any) - * @return - */ - public int getTownId() - { - return _townId; - } - - /** - * Returns this town zones castle id - * @return - */ - public final int getTaxById() - { - return _taxById; - } -} +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.zone.type; + +import com.l2jmobius.gameserver.instancemanager.CastleManager; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.entity.Castle; +import com.l2jmobius.gameserver.model.zone.L2ZoneType; +import com.l2jmobius.gameserver.model.zone.ZoneId; + +/** + * Tax zone type. + * @author malyelfik + */ +public class L2TaxZone extends L2ZoneType +{ + private int _domainId; + private Castle _castle; + + public L2TaxZone(int id) + { + super(id); + } + + @Override + public void setParameter(String name, String value) + { + if (name.equalsIgnoreCase("domainId")) + { + _domainId = Integer.parseInt(value); + } + else + { + super.setParameter(name, value); + } + } + + @Override + protected void onEnter(L2Character character) + { + character.setInsideZone(ZoneId.TAX, true); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(this); + } + } + + @Override + protected void onExit(L2Character character) + { + character.setInsideZone(ZoneId.TAX, false); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(null); + } + } + + /** + * Gets castle associated with tax zone.
+ * @return instance of {@link Castle} if found otherwise {@code null} + */ + public Castle getCastle() + { + // Lazy loading is used because zone is loaded before residence + if (_castle == null) + { + _castle = CastleManager.getInstance().getCastleById(_domainId); + } + return _castle; + } +} diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java index 05d5921904..febb0c0f84 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java @@ -16,31 +16,39 @@ */ package com.l2jmobius.gameserver.network.clientpackets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedHashMap; +import java.util.Collections; +import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.Map.Entry; +import java.util.OptionalLong; +import java.util.stream.Collectors; -import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.commons.util.Rnd; +import com.l2jmobius.commons.util.CommonUtil; +import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; import com.l2jmobius.gameserver.data.xml.impl.MultisellData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.enums.SpecialItemType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.model.variables.ItemVariables; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; +import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import com.l2jmobius.gameserver.network.serverpackets.UserInfo; /** * The Class MultiSellChoose. @@ -50,6 +58,19 @@ public class MultiSellChoose implements IClientIncomingPacket private int _listId; private int _entryId; private long _amount; + private int _enchantLevel; + private int _augmentOption1; + private int _augmentOption2; + private short _attackAttribute; + private short _attributePower; + private short _fireDefence; + private short _waterDefence; + private short _windDefence; + private short _earthDefence; + private short _holyDefence; + private short _darkDefence; + private EnsoulOption[] _soulCrystalOptions; + private EnsoulOption[] _soulCrystalSpecialOptions; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -57,17 +78,29 @@ public class MultiSellChoose implements IClientIncomingPacket _listId = packet.readD(); _entryId = packet.readD(); _amount = packet.readQ(); - // _unk1 = packet.readH(); - // _unk2 = packet.readD(); - // _unk3 = packet.readD(); - // _unk4 = packet.readH(); // elemental attributes - // _unk5 = packet.readH(); // elemental attributes - // _unk6 = packet.readH(); // elemental attributes - // _unk7 = packet.readH(); // elemental attributes - // _unk8 = packet.readH(); // elemental attributes - // _unk9 = packet.readH(); // elemental attributes - // _unk10 = packet.readH(); // elemental attributes - // _unk11 = packet.readH(); // elemental attributes + _enchantLevel = packet.readH(); + _augmentOption1 = packet.readD(); + _augmentOption2 = packet.readD(); + _attackAttribute = (short) packet.readH(); + _attributePower = (short) packet.readH(); + _fireDefence = (short) packet.readH(); + _waterDefence = (short) packet.readH(); + _windDefence = (short) packet.readH(); + _earthDefence = (short) packet.readH(); + _holyDefence = (short) packet.readH(); + _darkDefence = (short) packet.readH(); + _soulCrystalOptions = new EnsoulOption[packet.readC()]; // Ensoul size + for (int i = 0; i < _soulCrystalOptions.length; i++) + { + final int ensoulId = packet.readD(); // Ensoul option id + _soulCrystalOptions[i] = EnsoulData.getInstance().getOption(ensoulId); + } + _soulCrystalSpecialOptions = new EnsoulOption[packet.readC()]; // Special ensoul size + for (int i = 0; i < _soulCrystalSpecialOptions.length; i++) + { + final int ensoulId = packet.readD(); // Special ensoul option id. + _soulCrystalSpecialOptions[i] = EnsoulData.getInstance().getOption(ensoulId); + } return true; } @@ -86,411 +119,471 @@ public class MultiSellChoose implements IClientIncomingPacket return; } - if ((_amount < 1) || (_amount > 5000)) + if ((_amount < 1) || (_amount > 999999)) // 999 999 is client max. { - player.setMultiSell(null); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); return; } - final PreparedListContainer list = player.getMultiSell(); - if ((list == null) || (list.getListId() != _listId)) + PreparedMultisellListHolder list = player.getMultiSell(); + if ((list == null) || (list.getId() != _listId)) { player.setMultiSell(null); return; } final L2Npc npc = player.getLastFolkNPC(); - if (!list.isNpcAllowed(-1) && !isAllowedToUse(player, npc, list)) + if (!isAllowedToUse(player, npc, list)) { + if (player.isGM()) + { + player.sendMessage("Multisell " + _listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + player.setMultiSell(null); + return; + } + } + + if (((_soulCrystalOptions != null) && CommonUtil.contains(_soulCrystalOptions, null)) || ((_soulCrystalSpecialOptions != null) && CommonUtil.contains(_soulCrystalSpecialOptions, null))) + { + _log.severe("Character: " + player.getName() + " requested multisell entry with invalid soul crystal options. Multisell: " + _listId + " entry: " + _entryId); player.setMultiSell(null); return; } - for (Entry entry : list.getEntries()) + final MultisellEntryHolder entry = list.getEntries().get(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + if (entry == null) { - if (entry.getEntryId() == _entryId) + _log.severe("Character: " + player.getName() + " requested inexistant prepared multisell entry. Multisell: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + if (!entry.isStackable() && (_amount > 1)) + { + _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final ItemInfo itemEnchantment = list.getItemEnchantment(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + + // Validate the requested item with its full stats. + //@formatter:off + if ((itemEnchantment != null) && ((_amount > 1) + || (itemEnchantment.getEnchantLevel() != _enchantLevel) + || (itemEnchantment.getAttackElementType() != _attackAttribute) + || (itemEnchantment.getAttackElementPower() != _attributePower) + || (itemEnchantment.getAttributeDefence(AttributeType.FIRE) != _fireDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WATER) != _waterDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WIND) != _windDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.EARTH) != _earthDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.HOLY) != _holyDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.DARK) != _darkDefence) + || ((itemEnchantment.getAugmentation() == null) && ((_augmentOption1 != 0) || (_augmentOption2 != 0))) + || ((itemEnchantment.getAugmentation() != null) && ((itemEnchantment.getAugmentation().getOptionId(0) != _augmentOption1) || (itemEnchantment.getAugmentation().getOptionId(1) != _augmentOption2))) + || ((_soulCrystalOptions != null) && itemEnchantment.getSoulCrystalOptions().stream().anyMatch(e -> !CommonUtil.contains(_soulCrystalOptions, e))) + || ((_soulCrystalOptions == null) && !itemEnchantment.getSoulCrystalOptions().isEmpty()) + || ((_soulCrystalSpecialOptions != null) && itemEnchantment.getSoulCrystalOptions().stream().anyMatch(e -> !CommonUtil.contains(_soulCrystalSpecialOptions, e))) + || ((_soulCrystalSpecialOptions == null) && !itemEnchantment.getSoulCrystalSpecialOptions().isEmpty()) + )) + //@formatter:on + { + _log.severe("Character: " + player.getName() + " is trying to upgrade equippable item, but the stats doesn't match. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final L2Clan clan = player.getClan(); + final PcInventory inventory = player.getInventory(); + + try + { + int slots = 0; + int weight = 0; + for (ItemChanceHolder product : entry.getProducts()) { - if (!entry.isStackable() && (_amount > 1)) + if (product.getId() < 0) + { + // Check if clan exists for clan reputation products. + if ((clan == null) && (SpecialItemType.CLAN_REPUTATION.getClientId() == product.getId())) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return; + } + + continue; + } + + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + if (template == null) { - _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell, id:" + _listId + ":" + _entryId); player.setMultiSell(null); return; } - final PcInventory inv = player.getInventory(); + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); - int slots = 0; - int weight = 0; - for (Ingredient e : entry.getProducts()) + if (!(totalCount >= 0) && (totalCount <= Integer.MAX_VALUE)) { - if (e.getItemId() < 0) - { - continue; - } - - if (!e.isStackable()) - { - slots += e.getItemCount() * _amount; - } - else if (player.getInventory().getItemByItemId(e.getItemId()) == null) - { - slots++; - } - weight += e.getItemCount() * _amount * e.getWeight(); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; } - if (!inv.validateWeight(weight)) + if (!template.isStackable() || (player.getInventory().getItemByItemId(product.getId()) == null)) + { + slots++; + } + + weight += totalCount * template.getWeight(); + + if (!inventory.validateWeight(weight)) { player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_WEIGHT_LIMIT); return; } - if (!inv.validateCapacity(slots)) + if ((slots > 0) && !inventory.validateCapacity(slots)) { player.sendPacket(SystemMessageId.YOUR_INVENTORY_IS_FULL); return; } - final ArrayList ingredientsList = new ArrayList<>(entry.getIngredients().size()); - // Generate a list of distinct ingredients and counts in order to check if the correct item-counts are possessed by the player - boolean newIng; - for (Ingredient e : entry.getIngredients()) + // If this is a chance multisell, reset slots and weight because only one item should be seleted. We just need to check if conditions for every item is met. + if (list.isChanceMultisell()) { - newIng = true; - // at this point, the template has already been modified so that enchantments are properly included - // whenever they need to be applied. Uniqueness of items is thus judged by item id AND enchantment level - for (int i = ingredientsList.size(); --i >= 0;) + slots = 0; + weight = 0; + } + } + + // Check for enchanted item if its present in the inventory. + if ((itemEnchantment != null) && (inventory.getItemByObjectId(itemEnchantment.getObjectId()) == null)) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(itemEnchantment.getItem().getId()); + player.sendPacket(sm); + return; + } + + // Summarize all item counts into one map. That would include non-stackable items under 1 id and multiple count. + final Map itemIdCount = entry.getIngredients().stream().collect(Collectors.toMap(i -> i.getId(), i -> list.getIngredientCount(i), (k1, k2) -> Math.addExact(k1, k2))); + + // Now check if the player has sufficient items in the inventory to cover the ingredients' expences. Take care for non-stackable items like 2 swords to dual. + boolean allOk = true; + for (Entry idCount : itemIdCount.entrySet()) + { + allOk &= checkIngredients(player, list, inventory, clan, idCount.getKey(), Math.multiplyExact(idCount.getValue(), _amount)); + } + + // The above operation should not be short-circuited, in order to show all missing ingredients. + if (!allOk) + { + return; + } + + final InventoryUpdate iu = new InventoryUpdate(); + boolean itemEnchantmentProcessed = (itemEnchantment == null); + + // Take all ingredients + for (ItemHolder ingredient : entry.getIngredients()) + { + final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId()); + if (specialItem != null) + { + // Take special item. + switch (specialItem) { - final Ingredient ex = ingredientsList.get(i); - // if the item was already added in the list, merely increment the count - // this happens if 1 list entry has the same ingredient twice (example 2 swords = 1 dual) - if ((ex.getItemId() == e.getItemId()) && (ex.getEnchantLevel() == e.getEnchantLevel())) + case CLAN_REPUTATION: { - if ((ex.getItemCount() + e.getItemCount()) > Integer.MAX_VALUE) + if (clan != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); - return; + clan.takeReputationScore((int) totalCount, true); + SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); + smsg.addLong(totalCount); + player.sendPacket(smsg); } - // two same ingredients, merge into one and replace old - final Ingredient ing = ex.getCopy(); - ing.setItemCount(ex.getItemCount() + e.getItemCount()); - ingredientsList.set(i, ing); - newIng = false; break; } - } - if (newIng) - { - // if it's a new ingredient, just store its info directly (item id, count, enchantment) - ingredientsList.add(e); + case FAME: + { + player.setFame(player.getFame() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.setRaidbossPoints(player.getRaidbossPoints() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(totalCount)); + break; + } + case PC_CAFE_POINTS: + { + player.setPcCafePoints((int) (player.getPcCafePoints() - totalCount)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special ingredient with id: " + ingredient.getId() + "."); + return; + } } } - - // now check if the player has sufficient items in the inventory to cover the ingredient expenses - for (Ingredient e : ingredientsList) + else if (!itemEnchantmentProcessed && (itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) { - if ((e.getItemCount() * _amount) > Integer.MAX_VALUE) + // Take the enchanted item. + final L2ItemInstance destroyedItem = inventory.destroyItem("Multisell", itemEnchantment.getObjectId(), totalCount, player, npc); + if (destroyedItem != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + itemEnchantmentProcessed = true; + iu.addItem(destroyedItem); + } + else + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(ingredient.getId()); + player.sendPacket(sm); return; } - if (e.getItemId() < 0) + } + else + { + // Take a regular item. + final L2ItemInstance destroyedItem = inventory.destroyItemByItemId("Multisell", ingredient.getId(), totalCount, player, npc); + if (destroyedItem != null) { - if (!MultisellData.hasSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) - { - return; - } + iu.addItem(destroyedItem); } else { - // if this is not a list that maintains enchantment, check the count of all items that have the given id. - // otherwise, check only the count of items with exactly the needed enchantment level - final long required = (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount(); - if (inv.getInventoryItemCount(e.getItemId(), (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) ? e.getEnchantLevel() : -1, false) < required) + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredient.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + return; + } + } + } + + // Generate the appropriate items + List products = entry.getProducts(); + if (list.isChanceMultisell()) + { + final ItemChanceHolder randomProduct = ItemChanceHolder.getRandomHolder(entry.getProducts()); + products = randomProduct != null ? Collections.singletonList(randomProduct) : Collections.emptyList(); + } + + for (ItemChanceHolder product : products) + { + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(product.getId()); + if (specialItem != null) + { + // Give special item. + switch (specialItem) + { + case CLAN_REPUTATION: { - if (e.getEnchantLevel() > 0) + if (clan != null) { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addString("+" + e.getEnchantLevel() + " " + e.getTemplate().getName()); - sm.addLong(required); - player.sendPacket(sm); - } - else - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addItemName(e.getTemplate()); - sm.addLong(required); - player.sendPacket(sm); + clan.addReputationScore((int) totalCount, true); } + break; + } + case FAME: + { + player.setFame((int) (player.getFame() + totalCount)); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.increaseRaidbossPoints((int) totalCount); + player.sendPacket(new UserInfo(player)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special product with id: " + product.getId() + "."); return; } } } - - final Map originalInfos = new LinkedHashMap<>(); - /** All ok, remove items and add final product */ - - for (Ingredient e : entry.getIngredients()) + else { - if (e.getItemId() < 0) + // Give item. + final L2ItemInstance addedItem = inventory.addItem("Multisell", product.getId(), totalCount, player, npc); + iu.addItem(addedItem); + + // Check if the newly given item should be enchanted. + if (itemEnchantmentProcessed && list.isMaintainEnchantment() && (itemEnchantment != null) && addedItem.isEquipable() && addedItem.getItem().getClass().equals(itemEnchantment.getItem().getClass())) { - if (!MultisellData.takeSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) + addedItem.setEnchantLevel(itemEnchantment.getEnchantLevel()); + addedItem.setAugmentation(itemEnchantment.getAugmentation(), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.findByClientId(itemEnchantment.getAttackElementType()), itemEnchantment.getAttackElementPower()), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.FIRE, itemEnchantment.getAttributeDefence(AttributeType.FIRE)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WATER, itemEnchantment.getAttributeDefence(AttributeType.WATER)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WIND, itemEnchantment.getAttributeDefence(AttributeType.WIND)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.EARTH, itemEnchantment.getAttributeDefence(AttributeType.EARTH)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.HOLY, itemEnchantment.getAttributeDefence(AttributeType.HOLY)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.DARK, itemEnchantment.getAttributeDefence(AttributeType.DARK)), false); + if (_soulCrystalOptions != null) { - return; - } - } - else - { - L2ItemInstance itemToTake = inv.getItemByItemId(e.getItemId()); // initialize and initial guess for the item to take. - if (itemToTake == null) - { // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - _log.severe("Character: " + player.getName() + " is trying to cheat in multisell, id:" + _listId + ":" + _entryId); - player.setMultiSell(null); - return; - } - - // if (itemToTake.isEquipped()) - // { - // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - // LOGGER.severe("Character: " + player.getName() + " is trying to cheat in multisell, exchanging equipped item, merchatnt id:" + merchant.getNpcId()); - // player.setMultiSell(null); - // return; - // } - - if (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) - { - // if it's a stackable item, just reduce the amount from the first (only) instance that is found in the inventory - if (itemToTake.isStackable()) + for (int i = 0; i < _soulCrystalOptions.length; i++) { - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), e.getItemCount() * _amount, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - else - { - // for non-stackable items, one of two scenaria are possible: - // a) list maintains enchantment: get the instances that exactly match the requested enchantment level - // b) list does not maintain enchantment: get the instances with the LOWEST enchantment level - - // a) if enchantment is maintained, then get a list of items that exactly match this enchantment - if (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) - { - // loop through this list and remove (one by one) each item until the required amount is taken. - final L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), e.getEnchantLevel(), false).toArray(new L2ItemInstance[0]); - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - originalInfos.put(i, new ItemInfo(inventoryContents[i])); - if (!player.destroyItem("Multisell", inventoryContents[i].getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } - else - // b) enchantment is not maintained. Get the instances with the LOWEST enchantment level - { - // NOTE: There are 2 ways to achieve the above goal. - // 1) Get all items that have the correct itemId, loop through them until the lowest enchantment - // level is found. Repeat all this for the next item until proper count of items is reached. - // 2) Get all items that have the correct itemId, sort them once based on enchantment level, - // and get the range of items that is necessary. - // Method 1 is faster for a small number of items to be exchanged. - // Method 2 is faster for large amounts. - // - // EXPLANATION: - // Worst case scenario for algorithm 1 will make it run in a number of cycles given by: - // m*(2n-m+1)/2 where m is the number of items to be exchanged and n is the total - // number of inventory items that have a matching id. - // With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle - // for case b (just grab the m first items) or in linear time for case a (find the beginning of items - // with correct enchantment, index x, and take all items from x to x+m). - // Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 > - // (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) + log(n/n*n) = - // nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n) - // So for m < log(n) then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n) - // - // IDEALLY: - // In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n - // if ( (2<<(e.getItemCount()// _amount)) < inventoryContents.length ) - // // do Algorithm 1, no sorting - // else - // // do Algorithm 2, sorting - // - // CURRENT IMPLEMENTATION: - // In general, it is going to be very rare for a person to do a massive exchange of non-stackable items - // For this reason, we assume that algorithm 1 will always suffice and we keep things simple. - // If, in the future, it becomes necessary that we optimize, the above discussion should make it clear - // what optimization exactly is necessary (based on the comments under "IDEALLY"). - // - - // choice 1. Small number of items exchanged. No sorting. - for (int i = 1; i <= (e.getItemCount() * _amount); i++) - { - final Collection inventoryContents = inv.getAllItemsByItemId(e.getItemId(), false); - - itemToTake = inventoryContents.iterator().next(); - // get item with the LOWEST enchantment level from the inventory... - // +0 is lowest by default... - if (itemToTake.getEnchantLevel() > 0) - { - for (L2ItemInstance item : inventoryContents) - { - if ((item.getEnchantLevel() < itemToTake.getEnchantLevel()) && (item.getEnchantLevel() >= e.getEnchantLevel())) - { - itemToTake = item; - // nothing will have enchantment less than 0. If a zero-enchanted - // item is found, just take it - if (itemToTake.getEnchantLevel() == 0) - { - break; - } - } - } - } - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } + addedItem.addSpecialAbility(_soulCrystalOptions[i], i + 1, 1, false); } } - } - } - - final double itemRandom = 100 * Rnd.nextDouble(); - float cumulativeChance = 0; - - boolean matched = false; - // Generate the appropriate items - for (Ingredient e : entry.getProducts()) - { - if (list.isChanceMultisell()) - { - // Skip first entry. - if (e.getChance() < 1) + if (_soulCrystalSpecialOptions != null) { - continue; + for (int i = 0; i < _soulCrystalSpecialOptions.length; i++) + { + addedItem.addSpecialAbility(_soulCrystalSpecialOptions[i], i + 1, 2, false); + } } - // Calculate chance - matched = itemRandom < (cumulativeChance += e.getChance()); - if (!matched) - { - continue; - } + addedItem.updateDatabase(); + + // Mark that we have already upgraded the item. + itemEnchantmentProcessed = false; } - if (e.getItemId() < 0) + if (addedItem.getCount() > 1) { - MultisellData.giveSpecialProduct(e.getItemId(), e.getItemCount() * _amount, player); + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); + sm.addItemName(addedItem.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + } + else if (addedItem.getEnchantLevel() > 0) + { + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); + sm.addLong(addedItem.getEnchantLevel()); + sm.addItemName(addedItem.getId()); + player.sendPacket(sm); } else { - if (e.isStackable()) - { - inv.addItem("Multisell", e.getItemId(), e.getItemCount() * _amount, player, player.getTarget()); - } - else - { - L2ItemInstance product = null; - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - product = inv.addItem("Multisell", e.getItemId(), 1, player, player.getTarget()); - if ((product != null) && (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0))) - { - final ItemInfo info = originalInfos.get(i); - if (info != null) - { - if (info.getAugmentId() > 0) - { - product.setAugmentation(new L2Augmentation(info.getAugmentId())); - } - if (info.getElementals().length > 0) - { - Arrays.stream(info.getElementals()).filter(Objects::nonNull).forEach(product::setAttribute); - } - if (info.getVisualId() > 0) - { - product.setVisualId(info.getVisualId()); - if (info.getVisualStoneId() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_STONE_ID, info.getVisualStoneId()); - } - if (info.getVisualIdLifeTime() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_LIFE_TIME, info.getVisualIdLifeTime()); - product.scheduleVisualLifeTime(); - } - } - if (!info.getSpecialAbilities().isEmpty()) - { - int position = 0; - for (EnsoulOption option : info.getSpecialAbilities()) - { - product.addSpecialAbility(option, position++, 1, true); - } - } - if (!info.getAdditionalSpecialAbilities().isEmpty()) - { - int position = 0; - for (EnsoulOption option : info.getAdditionalSpecialAbilities()) - { - product.addSpecialAbility(option, position++, 2, true); - } - } - } - product.setEnchantLevel(e.getEnchantLevel()); - product.updateDatabase(); - } - } - } - - final SystemMessage sm; - if ((e.getItemCount() * _amount) > 1) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); - sm.addItemName(e.getItemId()); - sm.addLong(e.getItemCount() * _amount); - player.sendPacket(sm); - } - else - { - if (list.getMaintainEnchantment() && (e.getEnchantLevel() > 0)) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); - sm.addLong(e.getEnchantLevel()); - sm.addItemName(e.getItemId()); - } - else - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); - sm.addItemName(e.getItemId()); - } - player.sendPacket(sm); - } - } - - if (matched) - { - break; + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); + sm.addItemName(addedItem); + player.sendPacket(sm); } } - player.sendItemList(false); - - // finally, give the tax to the castle... - if ((npc != null) && (entry.getTaxAmount() > 0)) + } + + // Update inventory and weight. + player.sendInventoryUpdate(iu); + + // finally, give the tax to the castle... + if ((npc != null) && list.isApplyTaxes()) + { + final OptionalLong taxPaid = entry.getIngredients().stream().filter(i -> i.getId() == Inventory.ADENA_ID).mapToLong(i -> Math.round(i.getCount() * list.getIngredientMultiplier() * list.getTaxRate()) * _amount).reduce(Math::multiplyExact); + if (taxPaid.isPresent()) { - npc.getCastle().addToTreasury(entry.getTaxAmount() * _amount); + npc.handleTaxPayment(taxPaid.getAsLong()); } - - break; } } + catch (ArithmeticException ae) + { + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; + } + + // Re-send multisell after successful exchange of inventory-only shown items. + if (list.isInventoryOnly()) + { + MultisellData.getInstance().separateAndSend(list.getId(), player, npc, list.isInventoryOnly(), list.getProductMultiplier(), list.getIngredientMultiplier()); + } + } + + /** + * @param player + * @param list + * @param inventory + * @param clan + * @param ingredientId + * @param totalCount + * @return {@code false} if ingredient amount is not enough, {@code true} otherwise. + */ + private boolean checkIngredients(final L2PcInstance player, PreparedMultisellListHolder list, final PcInventory inventory, final L2Clan clan, final int ingredientId, final long totalCount) + { + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredientId); + if (specialItem != null) + { + // Check special item. + switch (specialItem) + { + case CLAN_REPUTATION: + { + if (clan == null) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return false; + } + else if (!player.isClanLeader()) + { + player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); + return false; + } + else if (clan.getReputationScore() < totalCount) + { + player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); + return false; + } + return true; + } + case FAME: + { + if (player.getFame() < totalCount) + { + player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); + return false; + } + return true; + } + case RAIDBOSS_POINTS: + { + if (player.getRaidbossPoints() < totalCount) + { + player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); + return false; + } + return true; + } + case PC_CAFE_POINTS: + { + if (player.getPcCafePoints() < totalCount) + { + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); + return false; + } + return true; + } + default: + { + _log.severe("Multisell: " + _listId + " is using a non-implemented special ingredient with id: " + ingredientId + "."); + return false; + } + } + } + // Check if the necessary items are there. If list maintains enchantment, allow all enchanted items, otherwise only unenchanted. TODO: Check how retail does it. + else if (inventory.getInventoryItemCount(ingredientId, list.isMaintainEnchantment() ? -1 : 0, false) < totalCount) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredientId); + sm.addLong(totalCount); + player.sendPacket(sm); + return false; + } + + return true; } /** @@ -499,7 +592,7 @@ public class MultiSellChoose implements IClientIncomingPacket * @param list * @return {@code true} if player can buy stuff from the multisell, {@code false} otherwise. */ - private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedListContainer list) + private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedMultisellListHolder list) { if (npc != null) { @@ -507,7 +600,7 @@ public class MultiSellChoose implements IClientIncomingPacket { return false; } - else if (list.isNpcOnly() && ((npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) + else if (list.isNpcOnly() && (!list.checkNpcObjectId(npc.getObjectId()) || (npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) { return false; } @@ -518,4 +611,4 @@ public class MultiSellChoose implements IClientIncomingPacket } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java index 1cf01cc7b3..6f572174ad 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java @@ -29,8 +29,8 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -110,7 +110,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - merchant = (L2MerchantInstance) target; + merchant = (L2MerchantInstance) target; // FIXME: Doesn't work for GMs. } if ((merchant == null) && !player.isGM() && (_listId != CUSTOM_CB_SELL_LIST)) @@ -119,7 +119,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -134,7 +134,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - castleTaxRate = merchant.getTotalTaxRate(TaxType.BUY); + castleTaxRate = merchant.getCastleTaxRate(TaxType.BUY); } long subTotal = 0; @@ -159,11 +159,6 @@ public final class RequestBuyItem implements IClientIncomingPacket } long price = product.getPrice(); - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - price *= Config.RATE_SIEGE_GUARDS_PRICE; - } - if (price < 0) { _log.warning("ERROR, no price found .. wrong buylist ??"); @@ -194,7 +189,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } // first calculate price per item with tax, then multiply by count - price = (long) (price * (1 + castleTaxRate)); + price = (long) (price * (1 + castleTaxRate + product.getBaseTaxRate())); subTotal += i.getCount() * price; if (subTotal > MAX_ADENA) { @@ -257,7 +252,7 @@ public final class RequestBuyItem implements IClientIncomingPacket // add to castle treasury if (merchant != null) { - merchant.getCastle().addToTreasury((long) (subTotal * castleTaxRate)); + merchant.handleTaxPayment((long) (subTotal * castleTaxRate)); } client.sendPacket(new ExUserInfoInvenWeight(player)); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index f942ddc681..afbf88a5b9 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -202,6 +202,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket } } + item.updateItemElementals(); player.destroyItem("AttrEnchant", stone, usedStones, player, true); final AttributeHolder newElement = item.getAttribute(elementToAdd); final int newValue = newElement != null ? newElement.getValue() : 0; @@ -350,7 +351,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket if (success) { - item.setAttribute(new AttributeHolder(elementToAdd, newPower)); + item.setAttribute(new AttributeHolder(elementToAdd, newPower), false); } return success ? 1 : 0; diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java index c1db83f07e..7fb3de5cb4 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.buylist.Product; import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.items.L2Armor; @@ -157,7 +157,7 @@ public final class RequestPreviewItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(activeChar, "Warning!! Character " + activeChar.getName() + " of account " + activeChar.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index a30ac40863..0007b7ffb0 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -18,7 +18,7 @@ package com.l2jmobius.gameserver.network.clientpackets; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.datatables.AugmentationData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -118,12 +118,10 @@ public final class RequestRefine extends AbstractRefinePacket return; } - final L2Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); - targetItem.setAugmentation(aug); + final Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); + targetItem.setAugmentation(aug, true); - final int stat12 = 0x0000FFFF & aug.getId(); - final int stat34 = aug.getId() >> 16; - activeChar.sendPacket(new ExVariationResult(stat12, stat34, 1)); + activeChar.sendPacket(new ExVariationResult(aug.getOptionId(0), aug.getOptionId(1), 1)); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(targetItem); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java index 3cc8f4c564..9ab82245e8 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java @@ -21,11 +21,10 @@ import static com.l2jmobius.gameserver.model.actor.L2Npc.INTERACTION_DISTANCE; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; -import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -79,13 +78,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - if (_items == null) - { - client.sendPacket(ActionFailed.STATIC_PACKET); - return; - } - - if (!player.hasRefund()) + if ((_items == null) || !player.hasRefund()) { client.sendPacket(ActionFailed.STATIC_PACKET); return; @@ -109,7 +102,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -164,12 +157,7 @@ public final class RequestRefundItem implements IClientIncomingPacket final long count = item.getCount(); weight += count * template.getWeight(); - long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } - adena += price * count; + adena += (count * template.getReferencePrice()) / 2; if (!template.isStackable()) { slots += count; @@ -213,6 +201,6 @@ public final class RequestRefundItem implements IClientIncomingPacket // Update current load status on player client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java index e6538867b5..92704fff45 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.UniqueItemHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -129,7 +129,7 @@ public final class RequestSellItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -153,10 +153,6 @@ public final class RequestSellItem implements IClientIncomingPacket } long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } totalPrice += price * i.getCount(); if (((MAX_ADENA / i.getCount()) < price) || (totalPrice > MAX_ADENA)) { @@ -166,25 +162,27 @@ public final class RequestSellItem implements IClientIncomingPacket if (Config.ALLOW_REFUND) { - item = player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); + player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); } else { - item = player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); + player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); } } + // add to castle treasury + if (merchant != null) + { + // Keep here same formula as in {@link ExBuySellList} to produce same result. + final long profit = (long) (totalPrice * (1.0 - merchant.getCastleTaxRate(TaxType.SELL))); + merchant.handleTaxPayment(totalPrice - profit); + totalPrice = profit; + } + player.addAdena("Sell", totalPrice, merchant, false); - // add to castle treasury? - if (merchant != null) - { - final long taxCollection = (long) (totalPrice * (1.0 - merchant.getTotalTaxRate(TaxType.SELL))); - merchant.getCastle().addToTreasury(taxCollection); - } - // Update current load as well client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java index b8d4e6101b..ae8b7753d1 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java @@ -75,7 +75,7 @@ public class RequestChangeAttributeItem implements IClientIncomingPacket final int oldElementId = item.getAttackAttributeType().getClientId(); final int elementValue = item.getAttackAttribute().getValue(); item.clearAllAttributes(); - item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue)); + item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue), true); // send packets final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_S_S2_ATTRIBUTE_HAS_SUCCESSFULLY_CHANGED_TO_S3_ATTRIBUTE); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java index 940386aeba..d03199cbbb 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java @@ -17,6 +17,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.ItemListType; import com.l2jmobius.gameserver.model.ItemInfo; import com.l2jmobius.gameserver.model.TradeItem; @@ -62,22 +63,6 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket 0) + if (item.getAugmentation() != null) { mask |= ItemListType.AUGMENT_BONUS.getMask(); } - if (item.getAttackElementType() >= 0) + if ((item.getAttackElementType() >= 0) || (item.getAttributeDefence(AttributeType.FIRE) > 0) || (item.getAttributeDefence(AttributeType.WATER) > 0) || (item.getAttributeDefence(AttributeType.WIND) > 0) || (item.getAttributeDefence(AttributeType.EARTH) > 0) || (item.getAttributeDefence(AttributeType.HOLY) > 0) || (item.getAttributeDefence(AttributeType.DARK) > 0)) { mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); } - else - { - for (byte i = 0; i < 6; i++) - { - if (item.getElementDefAttr(i) > 0) - { - mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); - break; - } - } - } if (item.getEnchantOptions() != null) { @@ -178,6 +141,20 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket _list; private final long _money; - private double _taxRate = 0; + private final int _inventorySlots; + private final double _castleTaxRate; - public BuyList(L2BuyList list, long currentMoney, double taxRate) + public BuyList(ProductList list, L2PcInstance player, double castleTaxRate) { _listId = list.getListId(); _list = list.getProducts(); - _money = currentMoney; - _taxRate = taxRate; + _money = player.getAdena(); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); + _castleTaxRate = castleTaxRate; } @Override @@ -47,23 +49,14 @@ public final class BuyList extends AbstractItemPacket packet.writeD(0x00); // Type BUY packet.writeQ(_money); // current money packet.writeD(_listId); - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); packet.writeH(_list.size()); - for (Product product : _list) { if ((product.getCount() > 0) || !product.hasLimitedStock()) { writeItem(packet, product); - - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - packet.writeQ((long) (product.getPrice() * Config.RATE_SIEGE_GUARDS_PRICE * (1 + _taxRate))); - } - else - { - packet.writeQ((long) (product.getPrice() * (1 + _taxRate))); - } + packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate()))); } } return true; diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java index 9b55dceadd..162359aca0 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java @@ -21,6 +21,7 @@ import java.util.Set; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2DecoyInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent; @@ -133,7 +134,9 @@ public class CharInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrderAugument()) { - packet.writeQ(_activeChar.getInventory().getPaperdollAugmentationId(slot)); // Confirmed + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_armorEnchant); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java index e643321f18..6afdf31bf0 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java @@ -29,6 +29,7 @@ import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.entity.Hero; @@ -190,7 +191,8 @@ public class CharSelectionInfo implements IClientOutgoingPacket packet.writeD(i == _activeId ? 1 : 0); packet.writeC(charInfoPackage.getEnchantEffect() > 127 ? 127 : charInfoPackage.getEnchantEffect()); - packet.writeQ(charInfoPackage.getAugmentationId()); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(0) : 0); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(1) : 0); // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. @@ -364,7 +366,10 @@ public class CharSelectionInfo implements IClientOutgoingPacket if (result.next()) { final int augment = result.getInt("augAttributes"); - charInfopackage.setAugmentationId(augment == -1 ? 0 : augment); + if (augment > 0) + { + charInfopackage.setAugmentation(AugmentationData.getInstance().getAugmentation(augment)); + } } } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java index f793112067..547f24c351 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import java.util.Collection; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.model.actor.L2Summon; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -28,14 +29,17 @@ import com.l2jmobius.gameserver.network.OutgoingPackets; */ public class ExBuySellList extends AbstractItemPacket { - private Collection _sellList = null; + private Collection _sellList; private Collection _refundList = null; private final boolean _done; - private double _taxRate = 1; + private final int _inventorySlots; + private double _castleTaxRate = 1; public ExBuySellList(L2PcInstance player, boolean done) { - _sellList = player.getInventory().getAvailableItems(false, false, false); + final L2Summon pet = player.getPet(); + _sellList = player.getInventory().getItems(item -> !item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); if (player.hasRefund()) { _refundList = player.getRefund().getItems(); @@ -43,10 +47,10 @@ public class ExBuySellList extends AbstractItemPacket _done = done; } - public ExBuySellList(L2PcInstance player, boolean done, double taxRate) + public ExBuySellList(L2PcInstance player, boolean done, double castleTaxRate) { this(player, done); - _taxRate = 1 - taxRate; + _castleTaxRate = 1 - castleTaxRate; } @Override @@ -55,7 +59,7 @@ public class ExBuySellList extends AbstractItemPacket OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet); packet.writeD(0x01); // Type SELL - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); if ((_sellList != null)) { @@ -63,15 +67,15 @@ public class ExBuySellList extends AbstractItemPacket for (L2ItemInstance item : _sellList) { writeItem(packet, item); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _castleTaxRate)); } - } + } else { packet.writeH(0x00); } - if ((_refundList != null) && !_refundList.isEmpty()) + if ((_refundList != null) && !_refundList.isEmpty()) { packet.writeH(_refundList.size()); int i = 0; @@ -79,7 +83,7 @@ public class ExBuySellList extends AbstractItemPacket { writeItem(packet, item); packet.writeD(i++); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((item.getItem().getReferencePrice() / 2) * item.getCount()); } } else diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java index 362df12b76..791da494e7 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java @@ -26,15 +26,15 @@ public class ExPutItemResultForVariationCancel implements IClientOutgoingPacket private final int _itemId; private final int _itemAug1; private final int _itemAug2; - private final int _price; + private final long _price; - public ExPutItemResultForVariationCancel(L2ItemInstance item, int price) + public ExPutItemResultForVariationCancel(L2ItemInstance item, long price) { _itemObjId = item.getObjectId(); _itemId = item.getDisplayId(); _price = price; - _itemAug1 = ((short) item.getAugmentation().getId()); - _itemAug2 = item.getAugmentation().getId() >> 16; + _itemAug1 = item.getAugmentation().getOptionId(0); + _itemAug2 = item.getAugmentation().getOptionId(1); } @Override diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java index 45193eda4d..9e6d8f9a35 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java @@ -18,6 +18,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.enums.InventorySlot; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -73,10 +74,12 @@ public class ExUserInfoEquipSlot extends AbstractMaskPacket { if (containsMask(slot)) { + final Augmentation augment = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(inventory.getPaperdollObjectId(slot.getSlot())); packet.writeD(inventory.getPaperdollItemId(slot.getSlot())); - packet.writeQ(inventory.getPaperdollAugmentationId(slot.getSlot())); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); + packet.writeD(augment != null ? augment.getOptionId(1) : 0); packet.writeD(inventory.getPaperdollItemVisualId(slot.getSlot())); } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java index d1b7900f12..2f040f5e21 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java @@ -101,7 +101,8 @@ public class FakePlayerInfo implements IClientOutgoingPacket for (@SuppressWarnings("unused") int slot : getPaperdollOrderAugument()) { - packet.writeQ(0x00); + packet.writeD(0x00); + packet.writeD(0x00); } packet.writeC(_fpcHolder.getArmorEnchantLevel()); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java index d67302fa42..9a833551f8 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -88,7 +89,9 @@ public class GMViewCharacterInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrder()) { - packet.writeQ(_activeChar.getInventory().getPaperdollAugmentationId(slot)); + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_activeChar.getInventory().getTalismanSlots()); // CT2.3 diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java index 56b85ff361..5b66dbf2bb 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java @@ -48,7 +48,7 @@ public class GMViewSkillInfo implements IClientOutgoingPacket { packet.writeD(skill.isPassive() ? 1 : 0); packet.writeH(skill.getDisplayLevel()); - packet.writeH(0x00); // Sub level + packet.writeH(skill.getSubLevel()); packet.writeD(skill.getDisplayId()); packet.writeD(0x00); packet.writeC(isDisabled && skill.isClanSkill() ? 1 : 0); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java index 3a17aa00b1..d6b1669f5e 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java @@ -19,21 +19,22 @@ package com.l2jmobius.gameserver.network.serverpackets; import static com.l2jmobius.gameserver.data.xml.impl.MultisellData.PAGE_SIZE; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.ListContainer; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; -public final class MultiSellList implements IClientOutgoingPacket +public final class MultiSellList extends AbstractItemPacket { private int _size, _index; - private final ListContainer _list; + private final PreparedMultisellListHolder _list; private final boolean _finished; - public MultiSellList(ListContainer list, int index) + public MultiSellList(PreparedMultisellListHolder list, int index) { _list = list; _index = index; @@ -54,7 +55,7 @@ public final class MultiSellList implements IClientOutgoingPacket { OutgoingPackets.MULTI_SELL_LIST.writeId(packet); - packet.writeD(_list.getListId()); // list id + packet.writeD(_list.getId()); // list id packet.writeC(0x00); // GOD Unknown packet.writeD(1 + (_index / PAGE_SIZE)); // page started from 1 packet.writeD(_finished ? 0x01 : 0x00); // finished @@ -62,165 +63,61 @@ public final class MultiSellList implements IClientOutgoingPacket packet.writeD(_size); // list length packet.writeC(_list.isChanceMultisell() ? 0x01 : 0x00); // new multisell window - Entry ent; while (_size-- > 0) { - ent = _list.getEntries().get(_index++); - packet.writeD(ent.getEntryId()); - packet.writeC(ent.isStackable() ? 1 : 0); - packet.writeH(0x00); - packet.writeD(0x00); - packet.writeD(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } + final ItemInfo itemEnchantment = _list.getItemEnchantment(_index); + final MultisellEntryHolder entry = _list.getEntries().get(_index++); - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } + packet.writeD(_index); // Entry ID. Start from 1. + packet.writeC(entry.isStackable() ? 1 : 0); - packet.writeH(ent.getProducts().size()); - packet.writeH(ent.getIngredients().size()); + // Those values will be passed down to MultiSellChoose packet. + packet.writeH(itemEnchantment != null ? itemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, itemEnchantment); + writeItemElemental(packet, itemEnchantment); + writeItemEnsoulOptions(packet, itemEnchantment); - for (Ingredient ing : ent.getProducts()) + packet.writeH(entry.getProducts().size()); + packet.writeH(entry.getIngredients().size()); + + for (ItemChanceHolder product : entry.getProducts()) { - packet.writeD(ing.getItemId()); - if (ing.getTemplate() != null) + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + final ItemInfo displayItemEnchantment = (_list.isMaintainEnchantment() && (itemEnchantment != null) && (template != null) && template.getClass().equals(itemEnchantment.getItem().getClass())) ? itemEnchantment : null; + + packet.writeD(product.getId()); + if (template != null) { - packet.writeQ(ing.getTemplate().getBodyPart()); - packet.writeH(ing.getTemplate().getType2()); + packet.writeQ(template.getBodyPart()); + packet.writeH(template.getType2()); } else { packet.writeQ(0); packet.writeH(65535); } - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - - packet.writeC(item.getSpecialAbilities().size()); // Size of regular soul crystal options. - for (EnsoulOption option : item.getSpecialAbilities()) - { - packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - } - - packet.writeC(item.getAdditionalSpecialAbilities().size()); // Size of special soul crystal options. - for (EnsoulOption option : item.getAdditionalSpecialAbilities()) - { - packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } - - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } - } + packet.writeQ(_list.getProductCount(product)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + packet.writeD((int) Math.ceil(product.getChance())); // chance + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); + writeItemEnsoulOptions(packet, displayItemEnchantment); } - for (Ingredient ing : ent.getIngredients()) + for (ItemHolder ingredient : entry.getIngredients()) { - packet.writeD(ing.getItemId()); - packet.writeH(ing.getTemplate() != null ? ing.getTemplate().getType2() : 65535); - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - packet.writeC(item.getSpecialAbilities().size()); // Size of regular soul crystal options. - for (EnsoulOption option : item.getSpecialAbilities()) - { - packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - } - - packet.writeC(item.getAdditionalSpecialAbilities().size()); // Size of special soul crystal options. - for (EnsoulOption option : item.getAdditionalSpecialAbilities()) - { - packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } - - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } - } + final L2Item template = ItemTable.getInstance().getTemplate(ingredient.getId()); + final ItemInfo displayItemEnchantment = ((itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) ? itemEnchantment : null; + + packet.writeD(ingredient.getId()); + packet.writeH(template != null ? template.getType2() : 65535); + packet.writeQ(_list.getIngredientCount(ingredient)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); + writeItemEnsoulOptions(packet, displayItemEnchantment); } } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java deleted file mode 100644 index 433eae9095..0000000000 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.network.serverpackets; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.enums.AttributeType; -import com.l2jmobius.gameserver.enums.TaxType; -import com.l2jmobius.gameserver.model.actor.L2Summon; -import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.network.OutgoingPackets; - -public class SellList implements IClientOutgoingPacket -{ - private final L2PcInstance _activeChar; - private final L2MerchantInstance _merchant; - private final long _money; - private final List _sellList; - - public SellList(L2PcInstance player) - { - this(player, null); - } - - public SellList(L2PcInstance player, L2MerchantInstance lease) - { - _activeChar = player; - _merchant = lease; - _money = _activeChar.getAdena(); - - if (_merchant == null) - { - _sellList = new LinkedList<>(); - final L2Summon pet = _activeChar.getPet(); - for (L2ItemInstance item : _activeChar.getInventory().getItems()) - { - if (!item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))) // Pet is summoned and not the item that summoned the pet - { - _sellList.add(item); - } - } - } - else - { - _sellList = Collections.emptyList(); - } - } - - @Override - public boolean write(PacketWriter packet) - { - OutgoingPackets.SELL_LIST.writeId(packet); - - packet.writeQ(_money); - packet.writeD(_merchant == null ? 0x00 : 1000000 + _merchant.getTemplate().getId()); - packet.writeH(_sellList.size()); - - for (L2ItemInstance item : _sellList) - { - int price = item.getItem().getReferencePrice() / 2; - if (_merchant != null) - { - price -= (price * _merchant.getTotalTaxRate(TaxType.SELL)); - } - - packet.writeH(item.getItem().getType1()); - packet.writeD(item.getObjectId()); - packet.writeD(item.getDisplayId()); - packet.writeQ(item.getCount()); - packet.writeH(item.getItem().getType2()); - packet.writeH(item.isEquipped() ? 0x01 : 0x00); - packet.writeD(item.getItem().getBodyPart()); - packet.writeH(item.getEnchantLevel()); - packet.writeH(0x00); // TODO: Verify me - packet.writeH(item.getCustomType2()); - packet.writeQ(price); - // T1 - packet.writeH(item.getAttackAttributeType().getClientId()); - packet.writeH(item.getAttackAttributePower()); - for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) - { - packet.writeH(item.getDefenceAttribute(type)); - } - // Enchant Effects - for (int op : item.getEnchantOptions()) - { - packet.writeH(op); - } - } - return true; - } -} diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java index 438e259df2..cea58a11ac 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java @@ -20,8 +20,8 @@ import java.util.Collection; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -32,7 +32,7 @@ public class ShopPreviewList implements IClientOutgoingPacket private final long _money; private int _expertise; - public ShopPreviewList(L2BuyList list, long currentMoney, int expertiseIndex) + public ShopPreviewList(ProductList list, long currentMoney, int expertiseIndex) { _listId = list.getListId(); _list = list.getProducts(); diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeOtherAdd.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeOtherAdd.java index 2c0e8de7fc..50f74a4831 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeOtherAdd.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeOtherAdd.java @@ -37,7 +37,7 @@ public final class TradeOtherAdd extends AbstractItemPacket { OutgoingPackets.TRADE_OTHER_ADD.writeId(packet); packet.writeH(1); // item count - writeTradeItem(packet, _item); + writeItem(packet, _item); return true; } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeOwnAdd.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeOwnAdd.java index a36c067c1b..2f5a9b68bf 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeOwnAdd.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeOwnAdd.java @@ -37,7 +37,7 @@ public final class TradeOwnAdd extends AbstractItemPacket { OutgoingPackets.TRADE_OWN_ADD.writeId(packet); packet.writeH(1); // items added count - writeTradeItem(packet, _item); + writeItem(packet, _item); return true; } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java index caca53b0f5..5eb1460aab 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/TradeUpdate.java @@ -42,7 +42,7 @@ public class TradeUpdate extends AbstractItemPacket packet.writeH(1); packet.writeH((_newCount > 0) && _item.getItem().isStackable() ? 3 : 2); - writeTradeItem(packet, _item); + writeItem(packet, _item); return true; } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java index 24d153ef95..8d5ef1a54c 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java @@ -45,7 +45,7 @@ public class ExResponseCommissionBuyItem implements IClientOutgoingPacket if (_commissionItem != null) { final ItemInfo itemInfo = _commissionItem.getItemInfo(); - packet.writeD(itemInfo.getEnchant()); + packet.writeD(itemInfo.getEnchantLevel()); packet.writeD(itemInfo.getItem().getId()); packet.writeQ(itemInfo.getCount()); } diff --git a/L2J_Mobius_3.0_Helios/dist/game/config/Character.ini b/L2J_Mobius_3.0_Helios/dist/game/config/Character.ini index f731e8144e..af50adc3b7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/config/Character.ini +++ b/L2J_Mobius_3.0_Helios/dist/game/config/Character.ini @@ -553,10 +553,6 @@ AltGameCreationSpRate = 1 # Default: 2 AltGameCreationRareXpSpRate = 2 -# If set to False, blacksmiths don't take recipes from players inventory when crafting. -# Default: True -AltBlacksmithUseRecipes = True - # Store/Restore Dwarven Manufacture list # Keep manufacture shoplist after relog # Default: False diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0000382.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0000382.xml index d05356a23d..6070582cb9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0000382.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0000382.xml @@ -1,53 +1,53 @@ - + 31380 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0000383.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0000383.xml index 36e3fdba19..f9a1b4452e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0000383.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0000383.xml @@ -1,53 +1,53 @@ - + 31373 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335103.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335103.xml index c69a0adc37..5fba711e83 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335103.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335103.xml @@ -3,5 +3,5 @@ 35103 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335145.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335145.xml index ec17e22fb8..ae0307b2da 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335145.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335145.xml @@ -3,5 +3,5 @@ 35145 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335187.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335187.xml index ef525be37d..d080daa732 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335187.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335187.xml @@ -3,5 +3,5 @@ 35187 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335229.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335229.xml index acc22eeee1..ad8c2e1cc6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335229.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335229.xml @@ -3,5 +3,5 @@ 35229 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335230.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335230.xml index b90c9a4c22..a8adffc4b2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335230.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335230.xml @@ -3,5 +3,5 @@ 35230 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335231.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335231.xml index 1f7e23bf67..428fcd426c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335231.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335231.xml @@ -3,5 +3,5 @@ 35231 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335277.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335277.xml index 4e6c636983..ff25d9c7c0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335277.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335277.xml @@ -3,5 +3,5 @@ 35277 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335319.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335319.xml index f38fb0bf71..c20daba2b7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335319.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335319.xml @@ -3,5 +3,5 @@ 35319 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335366.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335366.xml index a3485c3efc..eb803c4097 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335366.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335366.xml @@ -3,5 +3,5 @@ 35366 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335383.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335383.xml index 5d8f360dee..9c74254a37 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335383.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335383.xml @@ -1,5 +1,5 @@ - + 35383 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335390.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335390.xml index b219307c04..7b23db5b63 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335390.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335390.xml @@ -1,5 +1,5 @@ - + 35390 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335421.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335421.xml index a7ae058c57..8e80c9d384 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335421.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335421.xml @@ -1,5 +1,5 @@ - + 35421 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335512.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335512.xml index 4b7f195288..618b8e9e97 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335512.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335512.xml @@ -3,5 +3,5 @@ 35512 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335558.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335558.xml index 61e5a9f0b3..5486e14ac4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335558.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335558.xml @@ -3,5 +3,5 @@ 35558 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335580.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335580.xml index 6ba9991715..427c6c2ace 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335580.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335580.xml @@ -1,5 +1,5 @@ - + 35580 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335582.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335582.xml index dcdaea99a4..2849a9823c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335582.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335582.xml @@ -1,5 +1,5 @@ - + 35582 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335584.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335584.xml index bc8e2fec98..6219e4c46c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335584.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335584.xml @@ -1,5 +1,5 @@ - + 35584 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335586.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335586.xml index 30e7bcc9cb..7aac1cf84d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335586.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335586.xml @@ -1,5 +1,5 @@ - + 35586 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335605.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335605.xml index 2a82ec8d75..16eccc7ddd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335605.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335605.xml @@ -1,5 +1,5 @@ - + 35605 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335644.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335644.xml index 97e9fc41dc..b6a51814be 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335644.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335644.xml @@ -3,5 +3,5 @@ 35644 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335645.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335645.xml index 205bbb24e0..eacf338808 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335645.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0335645.xml @@ -3,5 +3,5 @@ 35645 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0336456.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0336456.xml index 43e790cad0..7f926f898a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0336456.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0336456.xml @@ -3,5 +3,5 @@ 36456 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351001.xml index 2f7769194a..e88995d140 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351001.xml @@ -1,5 +1,5 @@ - + 35100 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351021.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351021.xml index f7adf3875a..6cc4206a6d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351021.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351021.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351022.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351022.xml index a5cb088853..85c2d9d62e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351022.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351022.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351023.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351023.xml index 7eead4f7dc..df952cfde0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351023.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351023.xml @@ -1,9 +1,9 @@ - + 35102 - - - + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351024.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351024.xml index bef9a9f1ff..7e19e6ae42 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351024.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351024.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351025.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351025.xml index 69c6f6af6d..32900e60e8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351025.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351025.xml @@ -1,8 +1,8 @@ - + 35102 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351026.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351026.xml index 58a26d4236..3f34104bef 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351026.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351026.xml @@ -1,26 +1,26 @@ - + 35102 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351421.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351421.xml index 3a640491b4..f4e85a2f4c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351421.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351421.xml @@ -1,5 +1,5 @@ - + 35142 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351441.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351441.xml index f32e38c86a..a21b2554f4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351441.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351441.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351442.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351442.xml index 0a671d4945..906455eb28 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351442.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351442.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351443.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351443.xml index ab83cdb179..c7211c5446 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351443.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351443.xml @@ -1,9 +1,9 @@ - + 35144 - - - + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351444.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351444.xml index 92b6372d8c..030931665f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351444.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351444.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351445.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351445.xml index 0958d4a81a..a48e7237f6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351445.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351445.xml @@ -1,8 +1,8 @@ - + 35144 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351446.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351446.xml index 8af7ec3f21..f5c6d54df3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351446.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351446.xml @@ -1,26 +1,26 @@ - + 35144 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351841.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351841.xml index 38b74dda2d..252563d558 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351841.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351841.xml @@ -1,5 +1,5 @@ - + 35184 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351861.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351861.xml index 36f1a4cfa6..93de34adc3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351861.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351861.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351862.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351862.xml index 0ac8eecd93..ace30c766a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351862.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351862.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351863.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351863.xml index 80dc328719..a5ee6ff042 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351863.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351863.xml @@ -1,9 +1,9 @@ - + 35186 - - - + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351864.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351864.xml index 06682728b6..64b579db8f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351864.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351864.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351865.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351865.xml index 83bf9e6402..9331ba7193 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351865.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351865.xml @@ -1,8 +1,8 @@ - + 35186 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351866.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351866.xml index 55fce9970e..4273c35718 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351866.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0351866.xml @@ -1,26 +1,26 @@ - + 35186 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352261.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352261.xml index f66eaa1615..0db97eea93 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352261.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352261.xml @@ -1,5 +1,5 @@ - + 35226 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352281.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352281.xml index 2b222fa598..c8da11c37b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352281.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352281.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352282.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352282.xml index 8bad8b7f88..e45b1db923 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352282.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352282.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352283.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352283.xml index 87cd9481f6..5fa6a8b8bc 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352283.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352283.xml @@ -1,9 +1,9 @@ - + 35228 - - - + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352284.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352284.xml index 62b8f1d41c..ec2af80da6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352284.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352284.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352285.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352285.xml index d389f8f520..e576154fc1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352285.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352285.xml @@ -1,8 +1,8 @@ - + 35228 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352286.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352286.xml index e85594e6d9..371594c8c0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352286.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352286.xml @@ -1,26 +1,26 @@ - + 35228 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352741.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352741.xml index 4550c3ce3c..9023bccee1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352741.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352741.xml @@ -1,5 +1,5 @@ - + 35274 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352761.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352761.xml index 3ebd07be31..a188befa2b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352761.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352761.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352762.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352762.xml index aced7ec0e5..7d81046cbc 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352762.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352762.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352763.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352763.xml index 035facf7b8..d5b5478d7a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352763.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352763.xml @@ -1,11 +1,11 @@ - + 35276 - - - - - + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352764.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352764.xml index 7dbe8182fa..0f6c2e61e5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352764.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352764.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352765.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352765.xml index 6a73e43392..2fc44382da 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352765.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352765.xml @@ -1,8 +1,8 @@ - + 35276 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352766.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352766.xml index dbf5b62a57..ac21e757f1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352766.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0352766.xml @@ -1,26 +1,26 @@ - + 35276 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353161.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353161.xml index 1acc907ae9..97cd7ab588 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353161.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353161.xml @@ -1,5 +1,5 @@ - + 35316 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353181.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353181.xml index 89e932a264..b9cac93a9b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353181.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353181.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353182.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353182.xml index 4a3bd8f461..fd8d084a9f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353182.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353182.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353183.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353183.xml index a0981c52b7..b4e6c0d00f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353183.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353183.xml @@ -1,9 +1,9 @@ - + 35318 - - - + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353184.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353184.xml index b8024cc5e5..e8986cc0b2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353184.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353184.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353185.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353185.xml index c270f3e916..36f9000538 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353185.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353185.xml @@ -1,8 +1,8 @@ - + 35318 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353186.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353186.xml index 1f5b86df6b..ef5fc103d5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353186.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353186.xml @@ -1,26 +1,26 @@ - + 35318 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353631.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353631.xml index 6cd0f9f83b..f0e259d7f6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353631.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353631.xml @@ -1,5 +1,5 @@ - + 35363 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353651.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353651.xml index e67fc3ff27..8361af5bd6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353651.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353651.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353652.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353652.xml index 08bdb3e69f..8d271d9b5a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353652.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353652.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353653.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353653.xml index a60c33027d..c199fd9a91 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353653.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353653.xml @@ -1,9 +1,9 @@ - + 35365 - - - + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353654.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353654.xml index 8f263e6076..34410877d3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353654.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353654.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353655.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353655.xml index 30483fb4eb..e5ddc20ed8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353655.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353655.xml @@ -1,8 +1,8 @@ - + 35365 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353656.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353656.xml index 47f61a5f8d..83db764b45 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353656.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0353656.xml @@ -1,26 +1,26 @@ - + 35365 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355091.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355091.xml index 64ce916c79..3cb72086ef 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355091.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355091.xml @@ -1,5 +1,5 @@ - + 35509 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355111.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355111.xml index d301023aab..224cc0331c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355111.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355111.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355112.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355112.xml index dde4df5a06..1af568b999 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355112.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355112.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355113.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355113.xml index f3d7809706..19aaf0588f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355113.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355113.xml @@ -1,11 +1,11 @@ - + 35511 - - - - - + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355114.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355114.xml index 082dde48cc..759597ddd0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355114.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355114.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355115.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355115.xml index 0662473717..546391b703 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355115.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355115.xml @@ -1,8 +1,8 @@ - + 35511 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355116.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355116.xml index 4c5e229488..36b173d77f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355116.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355116.xml @@ -1,26 +1,26 @@ - + 35511 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355551.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355551.xml index 8dfce69017..9da26ac5df 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355551.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355551.xml @@ -1,5 +1,5 @@ - + 35555 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355571.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355571.xml index 8baf9d5daa..c7f4be0fd3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355571.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355571.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355572.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355572.xml index 643f113a5a..a899f3e0f2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355572.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355572.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355573.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355573.xml index 0a686f4e94..3c4ea6cf29 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355573.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355573.xml @@ -1,9 +1,9 @@ - + 35557 - - - + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355574.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355574.xml index 91d2143aeb..6f1dac7286 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355574.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355574.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355575.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355575.xml index 64cbf11f50..632bcab90f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355575.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355575.xml @@ -1,8 +1,8 @@ - + 35557 - - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355576.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355576.xml index 03e5256308..7e2ba73d71 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355576.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0355576.xml @@ -1,26 +1,26 @@ - + 35557 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366531.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366531.xml index f124552697..9f21593f19 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366531.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366531.xml @@ -1,5 +1,5 @@ - + 36653 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366541.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366541.xml index b17cd76ac9..4c559b6ff1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366541.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366541.xml @@ -1,5 +1,5 @@ - + 36654 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366551.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366551.xml index e2af00ff71..f7b4c8cc88 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366551.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366551.xml @@ -1,5 +1,5 @@ - + 36655 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366561.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366561.xml index 28b7c008ea..d19e30ec6b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366561.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366561.xml @@ -1,5 +1,5 @@ - + 36656 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366571.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366571.xml index 459785aade..7a7fe9e445 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366571.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366571.xml @@ -1,5 +1,5 @@ - + 36657 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366581.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366581.xml index a6e07f5bd4..e845a51d46 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366581.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366581.xml @@ -1,5 +1,5 @@ - + 36658 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366591.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366591.xml index da24213c75..9159b2a59a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366591.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366591.xml @@ -1,5 +1,5 @@ - + 36659 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366601.xml index 71326ac100..6be90ac82f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366601.xml @@ -1,5 +1,5 @@ - + 36660 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366611.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366611.xml index 0855deaa00..c95462bee0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366611.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/0366611.xml @@ -1,5 +1,5 @@ - + 36661 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/1312801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/1312801.xml index e551478d59..244b670c3f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/1312801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/1312801.xml @@ -1,5 +1,5 @@ - + 13128 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000100.xml index 309643b83f..3020bec80b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000100.xml @@ -1,5 +1,5 @@ - + 30001 @@ -30,4 +30,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000101.xml index a4cbc0278f..355fd56dba 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000101.xml @@ -1,5 +1,5 @@ - + 30001 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000200.xml index 7944ea4f44..367b78f6f1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000200.xml @@ -1,5 +1,5 @@ - + 30002 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000201.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000201.xml index 77467ca3e8..a5dab01833 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000201.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000201.xml @@ -1,5 +1,5 @@ - + 30002 @@ -34,4 +34,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000300.xml index 799ac4784e..98f72b7a3b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000300.xml @@ -1,5 +1,5 @@ - + 30003 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000301.xml index 574fb6e530..d8fe4e34c6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000301.xml @@ -1,5 +1,5 @@ - + 30003 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000400.xml index fbe7c5dfd5..dd1f6c38b0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3000400.xml @@ -1,5 +1,5 @@ - + 30004 @@ -27,7 +27,6 @@ - @@ -52,4 +51,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3004700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3004700.xml index 8a5b084ce1..2d0b270e9c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3004700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3004700.xml @@ -1,5 +1,5 @@ - + 30047 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006000.xml index 5526b07ccd..23c01f239a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006000.xml @@ -1,5 +1,5 @@ - + 30060 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006001.xml index 59b4bec0f0..df6e62e5f5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006001.xml @@ -1,5 +1,5 @@ - + 30060 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006100.xml index 430ba9f8e4..3645494858 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006100.xml @@ -1,5 +1,5 @@ - + 30061 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006101.xml index 74250f09e4..e8267e3455 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006101.xml @@ -1,5 +1,5 @@ - + 30061 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006200.xml index 9510b6f513..b7fd95644d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006200.xml @@ -1,5 +1,5 @@ - + 30062 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006201.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006201.xml index 8d3a7b20ce..d594c7d9a7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006201.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006201.xml @@ -1,5 +1,5 @@ - + 30062 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006202.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006202.xml index 5bf9240df1..12cc6b5587 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006202.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006202.xml @@ -1,5 +1,5 @@ - + 30062 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006300.xml index 50520f9c68..0da7a583be 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006300.xml @@ -1,5 +1,5 @@ - + 30063 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006301.xml index 17fb26291d..0f7d8b8214 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3006301.xml @@ -1,5 +1,5 @@ - + 30063 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3007800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3007800.xml index 9ca9664c11..05eb3cb16a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3007800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3007800.xml @@ -1,81 +1,116 @@ - + 30078 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008100.xml index 49c5ac8c31..7b5968703c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008100.xml @@ -1,8 +1,7 @@ - + 30081 - 34190 @@ -10,11 +9,13 @@ + + @@ -47,7 +48,12 @@ - + + + + + + @@ -77,7 +83,6 @@ - @@ -98,7 +103,6 @@ - diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008101.xml index aa91428d67..b77e878362 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008101.xml @@ -1,5 +1,5 @@ - + 30081 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008200.xml index 5d7b07dbea..a127b556cf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008200.xml @@ -1,5 +1,5 @@ - + 30082 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008201.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008201.xml index b6a5b102af..1c4e759596 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008201.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008201.xml @@ -1,5 +1,5 @@ - + 30082 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008400.xml index 6e0c19b256..352ae71092 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008400.xml @@ -1,5 +1,5 @@ - + 30084 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008401.xml index 55d6aa9265..542b338565 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008401.xml @@ -1,5 +1,5 @@ - + 30084 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008500.xml index b0db68ddf9..78b2d1a7cf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008500.xml @@ -1,5 +1,5 @@ - + 30085 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008701.xml index ab088e77cd..6a58148cd2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008701.xml @@ -1,5 +1,5 @@ - + 30087 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008800.xml index d30b44e5de..0a005c2190 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3008800.xml @@ -1,5 +1,5 @@ - + 30088 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009000.xml index b596da225e..5e68eb6ef9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009000.xml @@ -1,5 +1,5 @@ - + 30090 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009001.xml index 2a9789db15..c37825efcd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009001.xml @@ -1,5 +1,5 @@ - + 30090 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009100.xml index 975660df9e..c6d5ae5550 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009100.xml @@ -1,5 +1,5 @@ - + 30091 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009101.xml index 59fb3b84e3..85f1ff1b4d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009101.xml @@ -1,5 +1,5 @@ - + 30091 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009300.xml index 3f56bafab4..76696df49c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009300.xml @@ -1,5 +1,5 @@ - + 30093 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009400.xml index 0021fd0bdf..12dbdb3977 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009400.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009401.xml index 8bed85e5d1..86e29204b6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009401.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009402.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009402.xml index cda9d39e1a..66ebbac372 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009402.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3009402.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013500.xml index 82877098bd..7c60c99b0f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013500.xml @@ -1,5 +1,5 @@ - + 30135 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013501.xml index 9b42b7f241..06f769d895 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013501.xml @@ -1,5 +1,5 @@ - + 30135 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013600.xml index 7ce171122a..8924cc4f14 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013600.xml @@ -1,5 +1,5 @@ - + 30136 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013601.xml index 9be0509e76..00d4bebb92 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013601.xml @@ -1,5 +1,5 @@ - + 30136 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013700.xml index 3d30071388..9bff93e506 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013700.xml @@ -1,5 +1,5 @@ - + 30137 @@ -108,4 +108,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013800.xml index 26c101a01d..3c1c47ac8d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013800.xml @@ -1,5 +1,5 @@ - + 30138 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013801.xml index 60e5e499f9..9796701e83 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3013801.xml @@ -1,5 +1,5 @@ - + 30138 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014700.xml index bccf348037..240b37c575 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014700.xml @@ -1,5 +1,5 @@ - + 30147 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014701.xml index 6da2295ae7..73fbe9848d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014701.xml @@ -1,5 +1,5 @@ - + 30147 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014800.xml index 8678bde7bb..e5a6bf931f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014800.xml @@ -1,5 +1,5 @@ - + 30148 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014801.xml index 977eedeab2..12d1f30036 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014801.xml @@ -1,5 +1,5 @@ - + 30148 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014900.xml index 4ad0978496..a46c7ecfe8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014900.xml @@ -1,5 +1,5 @@ - + 30149 @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014901.xml index 5e1395208c..5cbf611f38 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3014901.xml @@ -1,5 +1,5 @@ - + 30149 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3015000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3015000.xml index 92e65e15f2..b58949ce4c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3015000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3015000.xml @@ -1,5 +1,5 @@ - + 30150 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016300.xml index 077f1876a1..dbda979b38 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016300.xml @@ -1,5 +1,5 @@ - + 30163 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016400.xml index 1454cfb5ac..1f0df91229 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016400.xml @@ -1,5 +1,5 @@ - + 30164 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016500.xml index aca772d787..48ee4af133 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016500.xml @@ -1,5 +1,5 @@ - + 30165 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016501.xml index 7dba4e131b..32b2a5cf41 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016501.xml @@ -1,5 +1,5 @@ - + 30165 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016601.xml index bfb3e3d1ef..0d750ea8b6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3016601.xml @@ -1,5 +1,5 @@ - + 30166 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017800.xml index 505544d5bc..2c12406e46 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017800.xml @@ -1,5 +1,5 @@ - + 30178 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017801.xml index 3c7ea675c2..b136f17dce 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017801.xml @@ -1,5 +1,5 @@ - + 30178 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017900.xml index d73620d8a8..1285bf5c04 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017900.xml @@ -1,5 +1,5 @@ - + 30179 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017901.xml index cbcb623260..b57367e413 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3017901.xml @@ -1,5 +1,5 @@ - + 30179 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018000.xml index b01148851d..58fd785bf8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018000.xml @@ -1,5 +1,5 @@ - + 30180 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018001.xml index ecaeab10f4..c0e75f739e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018001.xml @@ -1,5 +1,5 @@ - + 30180 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018100.xml index 6bfe46e4a0..d1dacdaf27 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3018100.xml @@ -1,5 +1,5 @@ - + 30181 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020700.xml index a99aeb36d6..2f8ab58ee6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020700.xml @@ -1,5 +1,5 @@ - + 30207 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020701.xml index b415d6d4e3..3a8856b5d9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020701.xml @@ -1,5 +1,5 @@ - + 30207 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020800.xml index 4750f26a53..7f9f5c2a84 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020800.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020801.xml index 94149acb40..5d661cc641 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020801.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020802.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020802.xml index ebdbf6d3e8..e2912593e2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020802.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020802.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020803.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020803.xml index e285dbd868..33d617f651 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020803.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020803.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020900.xml index 72eb021070..f8f4d8822d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3020900.xml @@ -1,5 +1,5 @@ - + 30209 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023000.xml index e1676775e2..3a74565ab5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023000.xml @@ -1,5 +1,5 @@ - + 30230 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023001.xml index 3901f20315..f2bd84932c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023001.xml @@ -1,5 +1,5 @@ - + 30230 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023100.xml index ee38959bcd..39b448efdd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3023100.xml @@ -1,5 +1,5 @@ - + 30231 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025300.xml index e8f292cef7..89ee9799e8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025300.xml @@ -1,5 +1,5 @@ - + 30253 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025301.xml index b9f7e27133..4603a5a685 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025301.xml @@ -1,5 +1,5 @@ - + 30253 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025400.xml index f3bd028fe4..b25f7c2634 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025400.xml @@ -1,5 +1,5 @@ - + 30254 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025401.xml index a01a0d95ff..5870b5c91a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3025401.xml @@ -1,5 +1,5 @@ - + 30254 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3029400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3029400.xml index 88339b5469..47bb430e22 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3029400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3029400.xml @@ -1,5 +1,5 @@ - + 30294 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3030100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3030100.xml index e8a7ccd563..625930ba63 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3030100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3030100.xml @@ -1,5 +1,5 @@ - + 30301 @@ -9,11 +9,13 @@ + + @@ -46,6 +48,12 @@ + + + + + + @@ -75,7 +83,6 @@ - @@ -96,7 +103,6 @@ - @@ -107,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3030101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3030101.xml index 5f9f186327..cfbde210ef 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3030101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3030101.xml @@ -1,5 +1,5 @@ - + 30301 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031300.xml index d2c41b945c..f12b52dbc0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031300.xml @@ -1,5 +1,5 @@ - + 30313 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031400.xml index bef42ee4a4..a70bd2a68f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031400.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031401.xml index ce92ec84e7..c55eb598d0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031401.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031402.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031402.xml index a8f069398a..cc46756624 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031402.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031402.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031500.xml index b3ddb7eadb..bef1c865f8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3031500.xml @@ -1,5 +1,5 @@ - + 30315 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3032100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3032100.xml index cd33aa8c92..98a5e4598a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3032100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3032100.xml @@ -1,5 +1,5 @@ - + 30321 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3032101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3032101.xml index 45f097bc50..79c0ef6f34 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3032101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3032101.xml @@ -1,5 +1,5 @@ - + 30321 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3038700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3038700.xml index 6b2346e650..fd30e9fc4f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3038700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3038700.xml @@ -1,5 +1,5 @@ - + 30387 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3042000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3042000.xml index 8ebf130017..3122f0cc74 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3042000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3042000.xml @@ -1,5 +1,5 @@ - + 30420 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3043600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3043600.xml index 972b0ddc1b..5ede4b6022 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3043600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3043600.xml @@ -1,5 +1,5 @@ - + 30436 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3043700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3043700.xml index f96fcacec9..2ad6c59ff9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3043700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3043700.xml @@ -1,5 +1,5 @@ - + 30437 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051600.xml index 1034512a0d..7a107bb9d5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051600.xml @@ -1,5 +1,5 @@ - + 30516 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051601.xml index 36ac194b8a..6f83fdc514 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051601.xml @@ -1,5 +1,5 @@ - + 30516 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051700.xml index 1f47fb7d37..3b8d6f504f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051700.xml @@ -1,5 +1,5 @@ - + 30517 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051701.xml index 4d9eb38ab6..cfa2ce8508 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051701.xml @@ -1,5 +1,5 @@ - + 30517 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051800.xml index 4fbd11c07f..fdd8e62cdf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051800.xml @@ -1,5 +1,5 @@ - + 30518 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051900.xml index 348a20045d..d3d077b818 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051900.xml @@ -1,5 +1,5 @@ - + 30519 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051901.xml index 46a7179721..adac7cb3dc 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3051901.xml @@ -1,5 +1,5 @@ - + 30519 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055800.xml index 6286969148..b5d017f4a5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055800.xml @@ -1,5 +1,5 @@ - + 30558 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055801.xml index 4138155ceb..dcaae0ac98 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055801.xml @@ -1,5 +1,5 @@ - + 30558 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055900.xml index 65a015d431..77c46b2332 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055900.xml @@ -1,5 +1,5 @@ - + 30559 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055901.xml index 11f2ccad75..a42aba6e8a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3055901.xml @@ -1,5 +1,5 @@ - + 30559 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056000.xml index 978cab75ac..eab17fabea 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056000.xml @@ -1,5 +1,5 @@ - + 30560 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056001.xml index 27682a5b80..b6dd48ba73 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056001.xml @@ -1,5 +1,5 @@ - + 30560 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056100.xml index 1d40dc6d86..4a4f97713b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3056100.xml @@ -1,5 +1,5 @@ - + 30561 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3068400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3068400.xml index 9b5ab9cf56..01c59e4bda 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3068400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3068400.xml @@ -1,5 +1,5 @@ - + 30684 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3068401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3068401.xml index 4aaa8276ee..b763e8d2b0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3068401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3068401.xml @@ -1,5 +1,5 @@ - + 30684 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3073100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3073100.xml index ce0b4fd50c..4d397fa66e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3073100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3073100.xml @@ -1,5 +1,5 @@ - + 30731 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082700.xml index 25dc623035..3843f3fd38 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082700.xml @@ -1,5 +1,5 @@ - + 30827 @@ -68,4 +68,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082800.xml index 048f8c0e93..3adb732baa 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082800.xml @@ -1,5 +1,5 @@ - + 30828 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082900.xml index 587aa02de3..2d89a5d83e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3082900.xml @@ -1,5 +1,5 @@ - + 30829 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083000.xml index 72d67fe651..a0c62f1561 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083000.xml @@ -1,5 +1,5 @@ - + 30830 @@ -68,4 +68,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083100.xml index 46a65ac813..c5f8677a5f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083100.xml @@ -1,5 +1,5 @@ - + 30831 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083400.xml index d5e024cd18..86eadb9ebf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083400.xml @@ -1,5 +1,5 @@ - + 30834 @@ -91,4 +91,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083401.xml index b3d26ae56f..317ef34a8c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083401.xml @@ -1,5 +1,5 @@ - + 30834 @@ -52,4 +52,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083700.xml index 7eb1b461f0..cc9b286ba0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083700.xml @@ -1,5 +1,5 @@ - + 30837 @@ -81,4 +81,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083701.xml index 0c263f977a..0c42bc0d8e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083701.xml @@ -1,5 +1,5 @@ - + 30837 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083800.xml index 8fc56ae2d9..6b4f527bb7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083800.xml @@ -1,5 +1,5 @@ - + 30838 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083801.xml index 28f58759de..0a698f11f0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083801.xml @@ -1,5 +1,5 @@ - + 30838 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083900.xml index f5fd34e39d..7d16233aee 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3083900.xml @@ -1,5 +1,5 @@ - + 30839 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084000.xml index 72b0181aec..dc996387e8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084000.xml @@ -1,5 +1,5 @@ - + 30840 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084100.xml index dd4cf41363..e25ea42b3e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084100.xml @@ -1,5 +1,5 @@ - + 30841 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084101.xml index 528d8ed788..d78fa5ba0f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084101.xml @@ -1,5 +1,5 @@ - + 30841 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084102.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084102.xml index e452b9ca59..10da2eebdd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084102.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084102.xml @@ -1,5 +1,5 @@ - + 30841 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084200.xml index b1be2e7915..30481b42ee 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3084200.xml @@ -1,5 +1,5 @@ - + 30842 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3086900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3086900.xml index 89ba97c589..9a538a35e0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3086900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3086900.xml @@ -1,5 +1,5 @@ - + 30869 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3087900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3087900.xml index a95959510d..bbdf7f37bc 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3087900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3087900.xml @@ -1,5 +1,5 @@ - + 30879 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089000.xml index a558c92485..aa26a4cdc8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089000.xml @@ -1,5 +1,5 @@ - + 30890 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089001.xml index a6896a55c5..e2821435e8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089001.xml @@ -1,5 +1,5 @@ - + 30890 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089100.xml index 2cfc65b77e..7682a4f779 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089100.xml @@ -1,5 +1,5 @@ - + 30891 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089101.xml index 3de65307ed..cb6dc779ab 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089101.xml @@ -1,5 +1,5 @@ - + 30891 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089200.xml index b849a81903..3109ed3df3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089200.xml @@ -1,5 +1,5 @@ - + 30892 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089300.xml index d4f90facde..055dcd499a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089300.xml @@ -1,5 +1,5 @@ - + 30893 @@ -9,11 +9,13 @@ + + @@ -46,6 +48,12 @@ + + + + + + @@ -75,7 +83,6 @@ - @@ -96,7 +103,6 @@ - @@ -107,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089301.xml index 5f22a3f64a..662fe1af0c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3089301.xml @@ -1,5 +1,5 @@ - + 30893 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3104500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3104500.xml index 819e516fc0..a010eabc4d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3104500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3104500.xml @@ -1,81 +1,116 @@ - + 31045 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3106700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3106700.xml index 361daa056d..17d929e580 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3106700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3106700.xml @@ -1,5 +1,5 @@ - + 31067 @@ -86,4 +86,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125600.xml index e83a2ccfe8..ed51c2d6e5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125600.xml @@ -1,5 +1,5 @@ - + 31256 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125601.xml index 658690aadc..d19b106aca 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125601.xml @@ -1,5 +1,5 @@ - + 31256 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125602.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125602.xml index 34a0c96e1a..5a0284dd2e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125602.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125602.xml @@ -1,5 +1,5 @@ - + 31256 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125603.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125603.xml index fa522e73a5..e308fcddf0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125603.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125603.xml @@ -1,5 +1,5 @@ - + 31256 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125700.xml index 554ea9d37b..76af30c423 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125700.xml @@ -1,5 +1,5 @@ - + 31257 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125701.xml index b53d14ba4d..c88702e68f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125701.xml @@ -1,5 +1,5 @@ - + 31257 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125702.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125702.xml index 24e0ec13bc..40835089c1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125702.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125702.xml @@ -1,5 +1,5 @@ - + 31257 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125703.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125703.xml index 759ee3170e..e0bfa28ece 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125703.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125703.xml @@ -1,5 +1,5 @@ - + 31257 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125800.xml index 76a7c1c46e..0aafd5e660 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125800.xml @@ -1,5 +1,5 @@ - + 31258 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125801.xml index 9bdba27a05..f0d3e4065b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125801.xml @@ -1,5 +1,5 @@ - + 31258 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125802.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125802.xml index 8f5bf9ca08..e88c3c1bff 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125802.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125802.xml @@ -1,5 +1,5 @@ - + 31258 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125803.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125803.xml index a1fc8f5256..d4a0515338 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125803.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125803.xml @@ -1,5 +1,5 @@ - + 31258 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125900.xml index ffc2acdb5d..d717f65dc4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125900.xml @@ -1,5 +1,5 @@ - + 31259 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125901.xml index 353f910744..e0500de022 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125901.xml @@ -1,5 +1,5 @@ - + 31259 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125902.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125902.xml index 0d0ad94603..c423f23bd0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125902.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125902.xml @@ -1,5 +1,5 @@ - + 31259 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125903.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125903.xml index cabdd801b2..6ea4724bc5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125903.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3125903.xml @@ -1,5 +1,5 @@ - + 31259 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126000.xml index f9c04ce381..4dd2c64fb3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126000.xml @@ -1,5 +1,5 @@ - + 31260 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126001.xml index de434b8efe..9561e91efe 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126001.xml @@ -1,5 +1,5 @@ - + 31260 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126100.xml index cac307a7e5..c89726c2e7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126100.xml @@ -1,5 +1,5 @@ - + 31261 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126101.xml index 6c893b04d6..d8054cb689 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126101.xml @@ -1,5 +1,5 @@ - + 31261 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126200.xml index 74b25beb63..8b2185b6df 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126200.xml @@ -1,5 +1,5 @@ - + 31262 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126300.xml index 72d320f4b6..348cf06868 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126300.xml @@ -1,5 +1,5 @@ - + 31263 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126301.xml index ba7034bdf2..def9ecc072 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126301.xml @@ -1,5 +1,5 @@ - + 31263 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126500.xml index b1c2e0bf5f..d7c73889cb 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3126500.xml @@ -1,5 +1,5 @@ - + 31265 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3127400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3127400.xml index b354fd9eb4..8b6925221a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3127400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3127400.xml @@ -1,5 +1,5 @@ - + 31274 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130000.xml index 340a30e4a4..9bb77060b4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130000.xml @@ -1,5 +1,5 @@ - + 31300 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130001.xml index 99669c3a71..d8d9dbb755 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130001.xml @@ -1,5 +1,5 @@ - + 31300 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130100.xml index fc3e9d1622..7be1df6352 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130100.xml @@ -1,5 +1,5 @@ - + 31301 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130101.xml index 1528dc42dc..687912cbaf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130101.xml @@ -1,5 +1,5 @@ - + 31301 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130200.xml index 5f7dd538ab..c2a06d75bd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130200.xml @@ -1,5 +1,5 @@ - + 31302 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130201.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130201.xml index 738118f186..3057144246 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130201.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130201.xml @@ -1,5 +1,5 @@ - + 31302 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130300.xml index a5ff2459b8..73fd46bef4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130300.xml @@ -1,5 +1,5 @@ - + 31303 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130301.xml index 8d61da58f6..a80a82cd4f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130301.xml @@ -1,5 +1,5 @@ - + 31303 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130400.xml index 1396ba019d..315d202b36 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130400.xml @@ -1,5 +1,5 @@ - + 31304 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130500.xml index 03804356fe..8fead7714a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130500.xml @@ -1,5 +1,5 @@ - + 31305 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130600.xml index 4774f3d4ab..22deacb502 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130600.xml @@ -1,5 +1,5 @@ - + 31306 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130700.xml index 6a424c58ea..3fcfecfdcd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130700.xml @@ -1,5 +1,5 @@ - + 31307 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130701.xml index 1281659b95..4b0463093c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130701.xml @@ -1,5 +1,5 @@ - + 31307 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130900.xml index e8014e8971..83c89722c6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3130900.xml @@ -1,5 +1,5 @@ - + 31309 @@ -86,4 +86,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3131800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3131800.xml index 079526d9e6..31e46fdbb6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3131800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3131800.xml @@ -1,5 +1,5 @@ - + 31318 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3131900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3131900.xml index ae2bf84aef..cdf8a9f934 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3131900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3131900.xml @@ -1,5 +1,5 @@ - + 31319 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3135100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3135100.xml index 4dd1278d97..caf5d20205 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3135100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3135100.xml @@ -1,5 +1,5 @@ - + 31351 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3136600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3136600.xml index a87904816d..bcc26fa7cf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3136600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3136600.xml @@ -1,5 +1,5 @@ - + 31366 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3138600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3138600.xml index a9a9541489..47823de404 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3138600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3138600.xml @@ -1,5 +1,5 @@ - + 31386 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141300.xml index 21d84fbab6..7bf08c2b82 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141300.xml @@ -1,5 +1,5 @@ - + 31413 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141400.xml index 3d1229325c..b6df861de7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141400.xml @@ -1,5 +1,5 @@ - + 31414 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141500.xml index 63e2ca7fdc..aa31f97c3e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141500.xml @@ -1,5 +1,5 @@ - + 31415 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141600.xml index 1bec460006..bcd60c83c4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141600.xml @@ -1,5 +1,5 @@ - + 31416 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141700.xml index 60e4778dd6..96300413f1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141700.xml @@ -1,5 +1,5 @@ - + 31417 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141800.xml index 8ab2138e78..f390f89f3e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141800.xml @@ -1,5 +1,5 @@ - + 31418 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141900.xml index 7b6941f4d1..f8afc28bf0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3141900.xml @@ -1,5 +1,5 @@ - + 31419 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142000.xml index 5d3899e9f7..7a5d1ceedd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142000.xml @@ -1,5 +1,5 @@ - + 31420 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142100.xml index c35a2b3ab7..236aad2a43 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142100.xml @@ -1,5 +1,5 @@ - + 31421 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142200.xml index 1d122950e4..6858b456ec 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142200.xml @@ -1,5 +1,5 @@ - + 31422 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142300.xml index cf243f261b..a4bfdcfcd7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142300.xml @@ -1,5 +1,5 @@ - + 31423 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142400.xml index f0eef17f26..1f727940d2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142400.xml @@ -1,5 +1,5 @@ - + 31424 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142500.xml index 77f79efc3a..9580ad707d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142500.xml @@ -1,5 +1,5 @@ - + 31425 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142600.xml index fab5b386b3..6796c56597 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142600.xml @@ -1,5 +1,5 @@ - + 31426 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142700.xml index a44fc322ab..b4ae4053e6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142700.xml @@ -1,5 +1,5 @@ - + 31427 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142800.xml index e5539d5238..95510cf96c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142800.xml @@ -1,5 +1,5 @@ - + 31428 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142900.xml index fc06a66383..57f63b53b1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3142900.xml @@ -1,5 +1,5 @@ - + 31429 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143000.xml index 063f61fb37..4cc499ca88 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143000.xml @@ -1,5 +1,5 @@ - + 31430 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143100.xml index 50cc465abc..14add57056 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143100.xml @@ -1,5 +1,5 @@ - + 31431 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143200.xml index 194f0b87a3..07bb9b3512 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143200.xml @@ -1,5 +1,5 @@ - + 31432 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143300.xml index 21ebbc9ba8..7082b56454 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143300.xml @@ -1,5 +1,5 @@ - + 31433 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143400.xml index fe67847877..a503222fa5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143400.xml @@ -1,5 +1,5 @@ - + 31434 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143500.xml index a256a32890..b0265fa5ef 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143500.xml @@ -1,5 +1,5 @@ - + 31435 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143600.xml index bef64fb21c..0fab588ef1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143600.xml @@ -1,5 +1,5 @@ - + 31436 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143700.xml index dbdd1a1738..686360370d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143700.xml @@ -1,5 +1,5 @@ - + 31437 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143800.xml index 87cc571e71..3333c26636 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143800.xml @@ -1,5 +1,5 @@ - + 31438 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143900.xml index 6e36408c86..32bbce1b32 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3143900.xml @@ -1,5 +1,5 @@ - + 31439 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144000.xml index e45a96ca11..32e1a2d935 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144000.xml @@ -1,5 +1,5 @@ - + 31440 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144100.xml index a915fe79f8..5cb91a2d08 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144100.xml @@ -1,5 +1,5 @@ - + 31441 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144200.xml index 3146bf7dc6..654fd41101 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144200.xml @@ -1,17 +1,17 @@ - + 31442 - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144300.xml index 42c0113a09..7101dc7ca9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144300.xml @@ -1,5 +1,5 @@ - + 31443 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144400.xml index 0fb5fa1de5..d743f68e6c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144400.xml @@ -1,5 +1,5 @@ - + 31444 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144500.xml index c2fce59cd3..de938e45de 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3144500.xml @@ -1,5 +1,5 @@ - + 31445 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156300.xml index ea3f99ad45..8daa3e35d2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156300.xml @@ -1,5 +1,5 @@ - + 31563 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156700.xml index 6d0ee28811..c213b286ba 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156700.xml @@ -1,5 +1,5 @@ - + 31567 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156800.xml index fdb1b568ba..8110e7135a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3156800.xml @@ -1,5 +1,5 @@ - + 31568 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157000.xml index 5484b76ab8..ac69379fcf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157000.xml @@ -1,5 +1,5 @@ - + 31570 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157100.xml index d8fa2029a3..c070491193 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157100.xml @@ -1,5 +1,5 @@ - + 31571 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157200.xml index 4e8398b9fe..83dc91f2ff 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157200.xml @@ -1,5 +1,5 @@ - + 31572 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157300.xml index 69cafd073a..14313bd208 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157300.xml @@ -1,5 +1,5 @@ - + 31573 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157400.xml index 1ac63f46dd..2052f17a66 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157400.xml @@ -1,5 +1,5 @@ - + 31574 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157500.xml index fcf62bee8c..e62610f8ac 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157500.xml @@ -1,5 +1,5 @@ - + 31575 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157600.xml index 9d9447b933..532fd49209 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157600.xml @@ -1,5 +1,5 @@ - + 31576 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157700.xml index b7b667ece6..2cbcd82911 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157700.xml @@ -1,5 +1,5 @@ - + 31577 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157800.xml index 739b5dc625..95f15512e3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157800.xml @@ -1,5 +1,5 @@ - + 31578 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157900.xml index 7446d877cd..b3b990905f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3157900.xml @@ -1,5 +1,5 @@ - + 31579 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166600.xml index b326f8222c..bc22d13140 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166600.xml @@ -1,5 +1,5 @@ - + 31666 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166700.xml index db105df248..ae62f73b31 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166700.xml @@ -1,5 +1,5 @@ - + 31667 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166800.xml index a53bc3746c..dc44cebca3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166800.xml @@ -1,5 +1,5 @@ - + 31668 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166900.xml index 521962b456..dc1a50c4da 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3166900.xml @@ -1,5 +1,5 @@ - + 31669 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3167000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3167000.xml index e610f9c0e2..23abfe3c48 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3167000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3167000.xml @@ -1,5 +1,5 @@ - + 31670 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3169600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3169600.xml index 034e1a9975..ecc1433ab0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3169600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3169600.xml @@ -1,5 +1,5 @@ - + 31696 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3169700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3169700.xml index e2db54a589..62e1b5f2e5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3169700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3169700.xml @@ -1,5 +1,5 @@ - + 31697 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175601.xml index 746b4dc1c0..6c0a1b7326 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175601.xml @@ -1,174 +1,174 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175602.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175602.xml index bab8fc8800..5493371fb3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175602.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175602.xml @@ -1,44 +1,44 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175603.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175603.xml index a0b0f1f789..7a63460eac 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175603.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175603.xml @@ -1,120 +1,120 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175604.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175604.xml index 3f2f3f2bb1..7b4a19573c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175604.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175604.xml @@ -1,161 +1,161 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175605.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175605.xml index d3f9c025d4..c756f4ec23 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175605.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175605.xml @@ -1,144 +1,144 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175606.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175606.xml index f5f4030195..e121d0f96e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175606.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175606.xml @@ -1,155 +1,155 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175607.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175607.xml index 376023d33e..4f51da5d22 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175607.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175607.xml @@ -1,162 +1,162 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175608.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175608.xml index d063b94daa..19661dcecf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175608.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3175608.xml @@ -1,119 +1,119 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194500.xml index fb1f967e70..77f8dadd26 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194500.xml @@ -1,5 +1,5 @@ - + 31945 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194501.xml index 4df13d9752..961716e0a5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194501.xml @@ -1,5 +1,5 @@ - + 31945 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194600.xml index b2317a6383..6c2507af23 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194600.xml @@ -1,5 +1,5 @@ - + 31946 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194601.xml index f0a36e6d77..b345720e23 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194601.xml @@ -1,5 +1,5 @@ - + 31946 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194700.xml index a48a031a06..e52d2ea6ca 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194700.xml @@ -1,5 +1,5 @@ - + 31947 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194701.xml index 921039e71a..eda5f96cc9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194701.xml @@ -1,5 +1,5 @@ - + 31947 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194800.xml index 87904ecd0c..7fe536361e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194800.xml @@ -1,5 +1,5 @@ - + 31948 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194801.xml index 5624af6231..7f1450010d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194801.xml @@ -1,5 +1,5 @@ - + 31948 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194900.xml index d0796103e1..458666118a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3194900.xml @@ -1,5 +1,5 @@ - + 31949 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195000.xml index 625aab2e35..2f20e43391 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195000.xml @@ -1,5 +1,5 @@ - + 31950 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195100.xml index c3891aa8f6..15adde8709 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195100.xml @@ -1,5 +1,5 @@ - + 31951 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195200.xml index c05ffefaae..d530d8fe80 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195200.xml @@ -1,5 +1,5 @@ - + 31952 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195201.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195201.xml index 720e5dfb11..b28a9d5661 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195201.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195201.xml @@ -1,5 +1,5 @@ - + 31952 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195400.xml index 38355f1962..171cb4bf22 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3195400.xml @@ -1,5 +1,5 @@ - + 31954 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3196200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3196200.xml index f11d4d2fa4..d5528660ee 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3196200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3196200.xml @@ -1,5 +1,5 @@ - + 31962 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3196300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3196300.xml index 2f15dc2a44..8d7e80be97 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3196300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3196300.xml @@ -1,5 +1,5 @@ - + 31963 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3197300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3197300.xml index aff89d5009..ab1a5fb358 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3197300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3197300.xml @@ -1,5 +1,5 @@ - + 31973 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3198000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3198000.xml index 869a43a333..d089bac38f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3198000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3198000.xml @@ -1,5 +1,5 @@ - + 31980 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3198900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3198900.xml index 8c31c0dc94..b35e6b2864 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3198900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3198900.xml @@ -1,5 +1,5 @@ - + 31989 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3200700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3200700.xml index 167dd290d3..14ca7d170a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3200700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3200700.xml @@ -1,9 +1,26 @@ - + + 31563 + 31567 + 31568 + 31570 + 31571 + 31572 + 31573 + 31574 + 31575 + 31576 + 31577 + 31578 + 31579 + 31696 + 31697 + 31989 32007 - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3210500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3210500.xml index 70bb097553..5becbd6dfb 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3210500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3210500.xml @@ -1,5 +1,5 @@ - + 32105 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3210600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3210600.xml index ab3c21eb2d..9fb0fd6422 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3210600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3210600.xml @@ -1,5 +1,5 @@ - + 32106 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216400.xml index 165958fabc..de56b0e3f7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216400.xml @@ -1,5 +1,5 @@ - + 32164 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216401.xml index e79df3304f..b804eaec0f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216401.xml @@ -1,5 +1,5 @@ - + 32164 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216500.xml index a4f9aa2fdf..70d0a1e8af 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216500.xml @@ -1,5 +1,5 @@ - + 32165 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216501.xml index e46c516d1f..6101e3ce26 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216501.xml @@ -1,5 +1,5 @@ - + 32165 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216600.xml index cb69d3405a..9b021b6711 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216600.xml @@ -1,5 +1,5 @@ - + 32166 @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216700.xml index 909c21f5de..4fdb5e34a1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216700.xml @@ -1,5 +1,5 @@ - + 32167 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216900.xml index ceb575e21f..f86951d7d4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3216900.xml @@ -1,5 +1,5 @@ - + 32169 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3229800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3229800.xml index 36d3f0f827..98040eb41f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3229800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3229800.xml @@ -1,5 +1,6 @@ - + + 32298 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287400.xml index aac7c17549..086cffdf82 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287400.xml @@ -1,5 +1,5 @@ - + 32874 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287500.xml index 7f150cf221..40e5723230 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287500.xml @@ -1,5 +1,5 @@ - + 32875 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287600.xml index ca62ca560f..b35acefc5f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287600.xml @@ -1,5 +1,5 @@ - + 32876 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287700.xml index 6b2ad15882..8c4bb05784 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287700.xml @@ -1,5 +1,5 @@ - + 32877 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287800.xml index 3f406d6f48..398ce99ea1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287800.xml @@ -1,5 +1,5 @@ - + 32878 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287900.xml index b4c46a58c9..826882200d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3287900.xml @@ -1,5 +1,5 @@ - + 32879 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288000.xml index 57c8c44bce..202c50d88f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288000.xml @@ -1,5 +1,5 @@ - + 32880 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288100.xml index 250b028e17..7d8b887d74 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288100.xml @@ -1,5 +1,5 @@ - + 32881 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288200.xml index a3e269826e..b05b7d5fb9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288200.xml @@ -1,5 +1,5 @@ - + 32882 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288300.xml index 1e8c25b2fc..9001118f78 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288300.xml @@ -1,5 +1,5 @@ - + 32883 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288700.xml index 251429e17f..82c98cc6d9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3288700.xml @@ -1,5 +1,5 @@ - + 32887 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3289700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3289700.xml index 00afc82b74..36cd1a2ca7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3289700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3289700.xml @@ -1,5 +1,5 @@ - + 32897 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3357900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3357900.xml index 76e8f66a9f..3c638dc3ae 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3357900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3357900.xml @@ -1,5 +1,5 @@ - + 33579 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393400.xml index 5524722b09..a4c1ace51f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393400.xml @@ -1,5 +1,5 @@ - + 33934 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393401.xml index b248104a25..1d36c1d793 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393401.xml @@ -1,5 +1,5 @@ - + 33934 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393500.xml index e2716bb9e0..207aa40511 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393500.xml @@ -1,5 +1,5 @@ - + 33935 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393501.xml index 7743cb0c45..3965dd5b9b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393501.xml @@ -1,5 +1,5 @@ - + 33935 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393600.xml index 500205f360..b379393935 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393600.xml @@ -1,5 +1,5 @@ - + 33936 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393700.xml index a9673e1580..8204b13e41 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3393700.xml @@ -1,5 +1,5 @@ - + 33937 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538400.xml index ee50f8f855..50dbb71d5c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538400.xml @@ -1,9 +1,9 @@ - + 35384 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538401.xml index 70b600ec4d..0c6700f1ee 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538401.xml @@ -1,5 +1,5 @@ - + 35384 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538402.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538402.xml index 46a8a7cb2c..023ef09f09 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538402.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538402.xml @@ -1,5 +1,5 @@ - + 35384 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538600.xml index 35e71f6de5..6c83b22671 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538600.xml @@ -1,9 +1,9 @@ - + 35386 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538601.xml index f50562cbe2..ada5fb486d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538601.xml @@ -1,5 +1,5 @@ - + 35386 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538602.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538602.xml index 52b3570e56..b4468d3806 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538602.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538602.xml @@ -1,5 +1,5 @@ - + 35386 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538800.xml index 6f1e7a4e2d..94fa0f35f2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538800.xml @@ -1,9 +1,9 @@ - + 35388 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538801.xml index ef01e41384..c616612ad1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538801.xml @@ -1,5 +1,5 @@ - + 35388 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538802.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538802.xml index 2472dd6ce4..57440ba594 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538802.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3538802.xml @@ -1,5 +1,5 @@ - + 35388 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539200.xml index 1869a99f44..e54354d05f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539200.xml @@ -1,9 +1,9 @@ - + 35392 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539201.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539201.xml index 947e416108..77413ff2a9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539201.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539201.xml @@ -1,5 +1,5 @@ - + 35392 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539202.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539202.xml index 7cd4ab31d6..029f7918d8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539202.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539202.xml @@ -1,5 +1,5 @@ - + 35392 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539400.xml index 8fd555c2d4..af0a2e400b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539400.xml @@ -1,9 +1,9 @@ - + 35394 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539401.xml index 5663046576..a1a215804f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539401.xml @@ -1,5 +1,5 @@ - + 35394 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539402.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539402.xml index 73a041fbbb..f8c31378e5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539402.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539402.xml @@ -1,5 +1,5 @@ - + 35394 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539600.xml index d1627e1839..7300df9790 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539600.xml @@ -1,9 +1,9 @@ - + 35396 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539601.xml index 4dfea49275..37a1ff0b7d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539601.xml @@ -1,5 +1,5 @@ - + 35396 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539602.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539602.xml index b0ae647a05..232a1c60db 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539602.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539602.xml @@ -1,5 +1,5 @@ - + 35396 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539800.xml index 4035f3199b..1a1d6fbfd9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539800.xml @@ -1,9 +1,9 @@ - + 35398 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539801.xml index 4b160e42be..b005e91fc0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539801.xml @@ -1,5 +1,5 @@ - + 35398 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539802.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539802.xml index 1f4c981fd1..4e27d60315 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539802.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3539802.xml @@ -1,5 +1,5 @@ - + 35398 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540000.xml index 5eb2550eea..7e7dff5c9e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540000.xml @@ -1,9 +1,9 @@ - + 35400 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540001.xml index 5e3b1ed812..56f709aeaa 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540001.xml @@ -1,5 +1,5 @@ - + 35400 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540002.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540002.xml index df8449fbf9..91664c4540 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540002.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540002.xml @@ -1,5 +1,5 @@ - + 35400 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540300.xml index 1b7598cc0f..02d575638c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540300.xml @@ -1,9 +1,9 @@ - + 35403 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540301.xml index 603f859c09..b45fee7699 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540301.xml @@ -1,5 +1,5 @@ - + 35403 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540302.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540302.xml index e6a076ed8c..0b4daa2792 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540302.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540302.xml @@ -1,5 +1,5 @@ - + 35403 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540500.xml index 1e5dd9cd7a..1e3b6b7b1c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540500.xml @@ -1,9 +1,9 @@ - + 35405 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540501.xml index 97c9cd08b4..29b8d2f981 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540501.xml @@ -1,5 +1,5 @@ - + 35405 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540502.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540502.xml index 3e91ce6d2b..5c0cd06f48 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540502.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540502.xml @@ -1,5 +1,5 @@ - + 35405 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540700.xml index 8d43cb672d..f1e2cb9403 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540700.xml @@ -1,9 +1,9 @@ - + 35407 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540701.xml index 2583b6a38a..db2d697f7b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540701.xml @@ -1,5 +1,5 @@ - + 35407 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540702.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540702.xml index 6d426e2483..223ace3856 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540702.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3540702.xml @@ -1,5 +1,5 @@ - + 35407 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543900.xml index ef77885181..3f94d66939 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543900.xml @@ -1,9 +1,9 @@ - + 35439 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543901.xml index 39f13ee2ac..1136de24fd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543901.xml @@ -1,5 +1,5 @@ - + 35439 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543902.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543902.xml index 26069b941a..8d77b4b9ec 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543902.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3543902.xml @@ -1,5 +1,5 @@ - + 35439 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544100.xml index f22b3a29da..02bd80580a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544100.xml @@ -1,9 +1,9 @@ - + 35441 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544101.xml index 468d29021f..0e29dcd193 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544101.xml @@ -1,5 +1,5 @@ - + 35441 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544102.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544102.xml index 52f32828d4..cd5266edb1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544102.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544102.xml @@ -1,5 +1,5 @@ - + 35441 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544300.xml index c979f1aebb..116d282b61 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544300.xml @@ -1,9 +1,9 @@ - + 35443 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544301.xml index 0c4edf9a31..b3d96407ed 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544301.xml @@ -1,5 +1,5 @@ - + 35443 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544302.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544302.xml index 25306ab486..5eb1294acd 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544302.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544302.xml @@ -1,5 +1,5 @@ - + 35443 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544500.xml index 4c9186dc9b..53afa9685b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544500.xml @@ -1,9 +1,9 @@ - + 35445 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544501.xml index 8640569f3d..6d02dca477 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544501.xml @@ -1,5 +1,5 @@ - + 35445 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544502.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544502.xml index ec40cc64de..264626f1fc 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544502.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544502.xml @@ -1,5 +1,5 @@ - + 35445 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544700.xml index 17e8bd00e3..e8195ff43b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544700.xml @@ -1,9 +1,9 @@ - + 35447 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544701.xml index 1a3dcfd2ef..dcda2135f5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544701.xml @@ -1,5 +1,5 @@ - + 35447 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544702.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544702.xml index 19fe5aeccd..40a40c0c41 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544702.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544702.xml @@ -1,5 +1,5 @@ - + 35447 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544900.xml index 0adb8a2b30..8cdb0740a3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544900.xml @@ -1,9 +1,9 @@ - + 35449 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544901.xml index 0528b75878..e8fa1086d8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544901.xml @@ -1,5 +1,5 @@ - + 35449 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544902.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544902.xml index b42c87c3a0..191a3af046 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544902.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3544902.xml @@ -1,5 +1,5 @@ - + 35449 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545100.xml index 1cd1aaa4a7..757e4e3022 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545100.xml @@ -1,9 +1,9 @@ - + 35451 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545101.xml index 3ca1ace28e..e73a5a039a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545101.xml @@ -1,5 +1,5 @@ - + 35451 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545102.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545102.xml index bc183bd9be..9531082d92 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545102.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545102.xml @@ -1,5 +1,5 @@ - + 35451 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545300.xml index bd75af7679..ffd091f8a5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545300.xml @@ -1,9 +1,9 @@ - + 35453 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545301.xml index 1879bef821..49958cc001 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545301.xml @@ -1,5 +1,5 @@ - + 35453 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545302.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545302.xml index 7d87c620cf..6e7fa0cd15 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545302.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545302.xml @@ -1,5 +1,5 @@ - + 35453 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545500.xml index 392619e352..343ec97ad2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545500.xml @@ -1,9 +1,9 @@ - + 35455 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545501.xml index 963ad988c1..8280c0a99a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545501.xml @@ -1,5 +1,5 @@ - + 35455 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545502.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545502.xml index e7b9bab43d..02d33fdef7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545502.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545502.xml @@ -1,5 +1,5 @@ - + 35455 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545700.xml index b62a44d7ab..a6b392ce7b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545700.xml @@ -1,9 +1,9 @@ - + 35457 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545701.xml index 17e12e4a6c..ba5813d069 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545701.xml @@ -1,5 +1,5 @@ - + 35457 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545702.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545702.xml index 1b0dfb721e..0e56127b54 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545702.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545702.xml @@ -1,5 +1,5 @@ - + 35457 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545900.xml index 17b28d399a..b723f46803 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545900.xml @@ -1,9 +1,9 @@ - + 35459 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545901.xml index 8b87bb8d96..e761f09bbf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545901.xml @@ -1,5 +1,5 @@ - + 35459 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545902.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545902.xml index 8f6cae0ed1..3c3fe6f3e8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545902.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3545902.xml @@ -1,5 +1,5 @@ - + 35459 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546100.xml index 5075b488df..753e0a7579 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546100.xml @@ -1,9 +1,9 @@ - + 35461 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546101.xml index f85ef9e588..608ec55b5d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546101.xml @@ -1,5 +1,5 @@ - + 35461 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546102.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546102.xml index 67e4a54af6..c8b332b435 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546102.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546102.xml @@ -1,5 +1,5 @@ - + 35461 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546300.xml index 408f6c8d9d..8dc912e3e2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546300.xml @@ -1,9 +1,9 @@ - + 35463 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546301.xml index e8cb2abc0f..435d212576 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546301.xml @@ -1,5 +1,5 @@ - + 35463 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546302.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546302.xml index a2496f4eee..9170a51817 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546302.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546302.xml @@ -1,5 +1,5 @@ - + 35463 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546500.xml index 18357b91d1..76c62e3cf5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546500.xml @@ -1,9 +1,9 @@ - + 35465 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546501.xml index 68ff755bf1..98b5bd359b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546501.xml @@ -1,5 +1,5 @@ - + 35465 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546502.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546502.xml index de82f242d3..ed8306e9ea 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546502.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546502.xml @@ -1,5 +1,5 @@ - + 35465 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546700.xml index cbf63aadf8..ba8159e65c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546700.xml @@ -1,9 +1,9 @@ - + 35467 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546701.xml index 41cac8a0c4..b6fe2eafcf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546701.xml @@ -1,5 +1,5 @@ - + 35467 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546702.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546702.xml index f3d464cbdf..27b63ce264 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546702.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3546702.xml @@ -1,5 +1,5 @@ - + 35467 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556600.xml index ffe706469b..e05cd5a14b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556600.xml @@ -1,9 +1,9 @@ - + 35566 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556601.xml index c7b5d2d45d..36443d9392 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556601.xml @@ -1,5 +1,5 @@ - + 35566 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556602.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556602.xml index 22a77702f0..8deb389256 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556602.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556602.xml @@ -1,5 +1,5 @@ - + 35566 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556800.xml index bb75834da6..22b5cc9911 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556800.xml @@ -1,9 +1,9 @@ - + 35568 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556801.xml index 209872b603..5bea0a549e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556801.xml @@ -1,5 +1,5 @@ - + 35568 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556802.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556802.xml index c383cbc628..cd9247c904 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556802.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3556802.xml @@ -1,5 +1,5 @@ - + 35568 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557000.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557000.xml index 80557c9571..5f52b282d9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557000.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557000.xml @@ -1,9 +1,9 @@ - + 35570 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557001.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557001.xml index e79dddb192..0dbfab1fed 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557001.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557001.xml @@ -1,5 +1,5 @@ - + 35570 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557002.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557002.xml index 0ccb32be94..50a1a5c8f3 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557002.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557002.xml @@ -1,5 +1,5 @@ - + 35570 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557200.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557200.xml index 2f78b6d2f3..de4e798050 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557200.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557200.xml @@ -1,9 +1,9 @@ - + 35572 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557201.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557201.xml index 156066ccf4..14acd30412 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557201.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557201.xml @@ -1,5 +1,5 @@ - + 35572 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557202.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557202.xml index fbb6ada0ef..8532267bc9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557202.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557202.xml @@ -1,5 +1,5 @@ - + 35572 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557400.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557400.xml index b3281ad3de..40d891d9b8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557400.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557400.xml @@ -1,9 +1,9 @@ - + 35574 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557401.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557401.xml index 0b1e3b9821..96744ad937 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557401.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557401.xml @@ -1,5 +1,5 @@ - + 35574 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557402.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557402.xml index 25a9a721de..e633f058c4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557402.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557402.xml @@ -1,5 +1,5 @@ - + 35574 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557600.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557600.xml index 827c7a9302..1bf2b20fae 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557600.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557600.xml @@ -1,9 +1,9 @@ - + 35576 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557601.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557601.xml index b64ff1fe65..ff932dc94c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557601.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557601.xml @@ -1,5 +1,5 @@ - + 35576 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557602.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557602.xml index af54f7275f..6a2d49663b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557602.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557602.xml @@ -1,5 +1,5 @@ - + 35576 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557800.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557800.xml index 54702e0036..f6d615a3e5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557800.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557800.xml @@ -1,9 +1,9 @@ - + 35578 - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557801.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557801.xml index 08156b377b..7a04af2d7e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557801.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557801.xml @@ -1,5 +1,5 @@ - + 35578 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557802.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557802.xml index 9f7a09f8ed..27637ed7af 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557802.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3557802.xml @@ -1,5 +1,5 @@ - + 35578 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672100.xml index 3f451a717e..3325982c6a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672100.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672101.xml index c03c623470..c90d15f3af 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672101.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672102.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672102.xml index 050f8aad74..1dc0569b7e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672102.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672102.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672300.xml index 310123b491..8402c24d50 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672300.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672301.xml index c0675987e7..eed821b6fa 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672301.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672302.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672302.xml index fbae3053b0..57fd05555f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672302.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672302.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672500.xml index cd69a4d152..279366c886 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672500.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672501.xml index 38957f1317..a44266b326 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672501.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672502.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672502.xml index eb167dfa6b..904fe752d9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672502.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672502.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672700.xml index 1451249349..8353518970 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672700.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672701.xml index 6777b33168..dd494e389c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672701.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672702.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672702.xml index 0f11e81451..9699d4b69c 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672702.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672702.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672900.xml index 431a45d293..493f7671f0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672900.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672901.xml index b1bf700e64..8ec803287b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672901.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672902.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672902.xml index 1c86e28ae8..49f6a174ed 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672902.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3672902.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673100.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673100.xml index ac390e3487..0a3e95adf4 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673100.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673100.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673101.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673101.xml index 597b8b7636..144ef10545 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673101.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673101.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673102.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673102.xml index 199d26a901..a0919c5f22 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673102.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673102.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673300.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673300.xml index 8648b1abde..6f1b72a3bb 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673300.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673300.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673301.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673301.xml index 721d28750a..05911ed2fa 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673301.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673301.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673302.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673302.xml index 0243ff4d28..24b3ec9ba0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673302.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673302.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673500.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673500.xml index 0a6199fb86..115adfb7e6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673500.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673500.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673501.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673501.xml index c9b2613e67..7a3b5f7655 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673501.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673501.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673502.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673502.xml index b5abe67078..e022ac516d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673502.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673502.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673700.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673700.xml index c6c91b2c5a..03214db660 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673700.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673700.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673701.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673701.xml index af3738b2e0..50ca337f69 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673701.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673701.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673702.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673702.xml index e36d3d5e61..809bd6cb74 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673702.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673702.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673900.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673900.xml index f9c3700a88..ab9a0c3ebc 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673900.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673900.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673901.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673901.xml index 9cdd79e334..69395e9fb1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673901.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673901.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673902.xml b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673902.xml index 7d13911629..1e2fdfd3da 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673902.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/buylists/3673902.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/zone.htm b/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/zone.htm index 8fabc38c8b..4db84a7ac1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/zone.htm +++ b/L2J_Mobius_3.0_Helios/dist/game/data/html/admin/zone.htm @@ -14,7 +14,7 @@
Peace:%PEACE%
Pvp:%PVP%
Siege:%SIEGE%
-
Town:%TOWN%
+
Tax:%TAX%
Castle:%CASTLE%
Fort:%FORT%
HQ:%HQ%
diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/multisell/1004.xml b/L2J_Mobius_3.0_Helios/dist/game/data/multisell/1004.xml deleted file mode 100644 index 0e82576b63..0000000000 --- a/L2J_Mobius_3.0_Helios/dist/game/data/multisell/1004.xml +++ /dev/null @@ -1,338 +0,0 @@ - - - - 30283 - 30298 - 30300 - 30307 - 30317 - 30363 - 30458 - 30471 - 30526 - 30527 - 30564 - 30678 - 30688 - 30846 - 30898 - 31271 - 31316 - 31583 - 31960 - 31990 - 32159 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/multisell/719.xml b/L2J_Mobius_3.0_Helios/dist/game/data/multisell/719.xml index 2e80baacdf..8dd350e3e5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/multisell/719.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/multisell/719.xml @@ -24,11 +24,11 @@ - - - - - + + + + +
@@ -40,11 +40,11 @@ - - - - - + + + + + @@ -56,11 +56,11 @@ - - - - - + + + + + @@ -72,11 +72,11 @@ - - - - - + + + + + @@ -88,11 +88,11 @@ - - - - - + + + + + @@ -104,10 +104,10 @@ - - - - - + + + + +
\ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/multisell/custom/600010.xml b/L2J_Mobius_3.0_Helios/dist/game/data/multisell/custom/600010.xml index 779216e9b3..e9e30d206b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/multisell/custom/600010.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/multisell/custom/600010.xml @@ -7,9 +7,11 @@ - + + - + +
@@ -17,9 +19,11 @@ - + + - + +
@@ -29,9 +33,11 @@ - + + - + +
@@ -39,17 +45,21 @@ - + + - + + - + + - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java index 735f4492f7..a23bedab7d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java @@ -19,11 +19,10 @@ package ai.others.DelusionTeleport; import java.util.HashMap; import java.util.Map; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; +import com.l2jmobius.gameserver.model.variables.PlayerVariables; import ai.AbstractNpcAI; @@ -50,20 +49,18 @@ public final class DelusionTeleport extends AbstractNpcAI new Location(-114597, -152501, -6750), new Location(-114589, -154162, -6750) }; - // Player Variables - private static final String DELUSION_RETURN = "DELUSION_RETURN"; private static final Map RETURN_LOCATIONS = new HashMap<>(); static { RETURN_LOCATIONS.put(0, new Location(43835, -47749, -792)); // Undefined origin, return to Rune - RETURN_LOCATIONS.put(7, new Location(-14023, 123677, -3112)); // Gludio - RETURN_LOCATIONS.put(8, new Location(18101, 145936, -3088)); // Dion - RETURN_LOCATIONS.put(10, new Location(80905, 56361, -1552)); // Oren - RETURN_LOCATIONS.put(14, new Location(42772, -48062, -792)); // Rune - RETURN_LOCATIONS.put(15, new Location(108469, 221690, -3592)); // Heine - RETURN_LOCATIONS.put(17, new Location(85991, -142234, -1336)); // Schuttgart + RETURN_LOCATIONS.put(20, new Location(-14023, 123677, -3112)); // Gludio + RETURN_LOCATIONS.put(30, new Location(18101, 145936, -3088)); // Dion + RETURN_LOCATIONS.put(40, new Location(80905, 56361, -1552)); // Heine + RETURN_LOCATIONS.put(50, new Location(108469, 221690, -3592)); // Oren + RETURN_LOCATIONS.put(60, new Location(85991, -142234, -1336)); // Schuttgart + RETURN_LOCATIONS.put(70, new Location(42772, -48062, -792)); // Rune } private DelusionTeleport() @@ -77,16 +74,15 @@ public final class DelusionTeleport extends AbstractNpcAI { if (npc.getId() == NPCS[0]) // Pathfinder Worker { - final L2TownZone town = TownManager.getTown(npc.getX(), npc.getY(), npc.getZ()); - final int townId = ((town == null) ? 0 : town.getTownId()); - player.getVariables().set(DELUSION_RETURN, townId); + final int locId = npc.getParameters().getInt("Level", -1); + player.getVariables().set(PlayerVariables.DELUSION_RETURN, RETURN_LOCATIONS.containsKey(locId) ? locId : 0); player.teleToLocation(HALL_LOCATIONS[getRandom(HALL_LOCATIONS.length)], false); } else { - final int townId = player.getVariables().getInt(DELUSION_RETURN, 0); + final int townId = player.getVariables().getInt(PlayerVariables.DELUSION_RETURN, 0); player.teleToLocation(RETURN_LOCATIONS.get(townId), true); - player.getVariables().remove(DELUSION_RETURN); + player.getVariables().remove(PlayerVariables.DELUSION_RETURN); } return super.onTalk(npc, player); } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java index 967d248bff..480462fea7 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java @@ -162,7 +162,7 @@ public class AdminElement implements IAdminCommandHandler } else { - itemInstance.setAttribute(new AttributeHolder(type, value)); + itemInstance.setAttribute(new AttributeHolder(type, value), true); } player.getInventory().equipItem(itemInstance); diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java index dde2ae8058..dfd8ab322b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java @@ -19,9 +19,10 @@ package handlers.admincommandhandlers; import java.util.logging.Logger; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; +import com.l2jmobius.gameserver.data.xml.impl.MultisellData; import com.l2jmobius.gameserver.handler.IAdminCommandHandler; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -40,7 +41,9 @@ public class AdminShop implements IAdminCommandHandler private static final String[] ADMIN_COMMANDS = { "admin_buy", - "admin_gmshop" + "admin_gmshop", + "admin_multisell", + "admin_exc_multisell" }; @Override @@ -61,6 +64,30 @@ public class AdminShop implements IAdminCommandHandler { AdminHtml.showAdminHtml(activeChar, "gmshops.htm"); } + else if (command.startsWith("admin_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(16).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } + else if (command.toLowerCase().startsWith("admin_exc_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(20).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, true); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } return true; } @@ -82,17 +109,16 @@ public class AdminShop implements IAdminCommandHandler _log.warning("admin buylist failed:" + command); } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); - + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList != null) { - activeChar.sendPacket(new BuyList(buyList, activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(buyList, activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else { _log.warning("no buylist with id:" + val); + activeChar.sendPacket(ActionFailed.STATIC_PACKET); } - activeChar.sendPacket(ActionFailed.STATIC_PACKET); } } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java index cfe7ee4957..d17921338b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java @@ -114,7 +114,6 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%PEACE%", activeChar.isInsideZone(ZoneId.PEACE) ? "YES" : "NO"); adminReply.replace("%PVP%", activeChar.isInsideZone(ZoneId.PVP) ? "YES" : "NO"); adminReply.replace("%SIEGE%", activeChar.isInsideZone(ZoneId.SIEGE) ? "YES" : "NO"); - adminReply.replace("%TOWN%", activeChar.isInsideZone(ZoneId.TOWN) ? "YES" : "NO"); adminReply.replace("%CASTLE%", activeChar.isInsideZone(ZoneId.CASTLE) ? "YES" : "NO"); adminReply.replace("%FORT%", activeChar.isInsideZone(ZoneId.FORT) ? "YES" : "NO"); adminReply.replace("%HQ%", activeChar.isInsideZone(ZoneId.HQ) ? "YES" : "NO"); @@ -128,6 +127,7 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%DANGER%", activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "YES" : "NO"); adminReply.replace("%NOSTORE%", activeChar.isInsideZone(ZoneId.NO_STORE) ? "YES" : "NO"); adminReply.replace("%SCRIPT%", activeChar.isInsideZone(ZoneId.SCRIPT) ? "YES" : "NO"); + adminReply.replace("%TAX%", (activeChar.isInsideZone(ZoneId.TAX) ? "YES" : "NO")); final StringBuilder zones = new StringBuilder(100); for (L2ZoneType zone : ZoneManager.getInstance().getZones(activeChar)) diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/bypasshandlers/Wear.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/bypasshandlers/Wear.java index 9291747b2a..40de431ce5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/bypasshandlers/Wear.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/bypasshandlers/Wear.java @@ -24,7 +24,7 @@ import com.l2jmobius.gameserver.data.xml.impl.BuyListData; import com.l2jmobius.gameserver.handler.IBypassHandler; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.ShopPreviewList; @@ -70,7 +70,7 @@ public class Wear implements IBypassHandler private static void showWearWindow(L2PcInstance player, int val) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/communityboard/HomeBoard.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/communityboard/HomeBoard.java index b39b9f0b38..9f7d9fb2f8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/communityboard/HomeBoard.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/communityboard/HomeBoard.java @@ -154,7 +154,7 @@ public final class HomeBoard implements IParseBoardHandler { final String page = command.replace("_bbssell;", ""); returnHtml = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/Custom/" + page + ".html"); - activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else if (command.startsWith("_bbsteleport")) diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/communityboard/RegionBoard.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/communityboard/RegionBoard.java index 7a9b5fd57d..ffb50fbf7b 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/communityboard/RegionBoard.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/communityboard/RegionBoard.java @@ -18,6 +18,7 @@ package handlers.communityboard; import com.l2jmobius.gameserver.cache.HtmCache; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.handler.CommunityBoardHandler; import com.l2jmobius.gameserver.handler.IWriteBoardHandler; import com.l2jmobius.gameserver.instancemanager.CastleManager; @@ -64,7 +65,7 @@ public class RegionBoard implements IWriteBoardHandler link = link.replace("%region_name%", String.valueOf(REGIONS[i])); link = link.replace("%region_owning_clan%", (clan != null ? clan.getName() : "NPC")); link = link.replace("%region_owning_clan_alliance%", ((clan != null) && (clan.getAllyName() != null) ? clan.getAllyName() : "")); - link = link.replace("%region_tax_rate%", (castle.getTaxRate() * 100) + "%"); + link = link.replace("%region_tax_rate%", castle.getTaxPercent(TaxType.BUY) + "%"); sb.append(link); } diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java index 9e555bb17c..fb13b89a3e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java @@ -139,7 +139,7 @@ public final class ConvertItem extends AbstractEffect if (elementals != null) { - newItem.setAttribute(elementals); + newItem.setAttribute(elementals, true); } newItem.setEnchantLevel(enchantLevel); player.getInventory().equipItem(newItem); diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/itemhandlers/Seed.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/itemhandlers/Seed.java index b2a011e238..a5c7d19397 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/itemhandlers/Seed.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/handlers/itemhandlers/Seed.java @@ -22,13 +22,13 @@ import com.l2jmobius.Config; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.handler.IItemHandler; import com.l2jmobius.gameserver.instancemanager.CastleManorManager; -import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Seed; import com.l2jmobius.gameserver.model.actor.L2Playable; import com.l2jmobius.gameserver.model.actor.instance.L2ChestInstance; import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.entity.Castle; import com.l2jmobius.gameserver.model.holders.ItemSkillHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -81,7 +81,9 @@ public class Seed implements IItemHandler { return false; } - else if (seed.getCastleId() != MapRegionManager.getInstance().getAreaCastle(playable)) // TODO: replace me with tax zone + + final Castle taxCastle = target.getTaxCastle(); + if ((taxCastle == null) || (seed.getCastleId() != taxCastle.getResidenceId())) { playable.sendPacket(SystemMessageId.THIS_SEED_MAY_NOT_BE_SOWN_HERE); return false; diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/items/15400-15499.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/items/15400-15499.xml index 00f15db81e..420daac6fc 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/items/15400-15499.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/items/15400-15499.xml @@ -1361,6 +1361,7 @@ + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/buylist.xsd b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/buylist.xsd index e89cbf146d..6e842a25a6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/buylist.xsd +++ b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/buylist.xsd @@ -30,9 +30,11 @@ + + \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/multisell.xsd index 196695f377..99107d2612 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/multisell.xsd +++ b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/multisell.xsd @@ -22,7 +22,6 @@ - @@ -40,7 +39,8 @@ - + + \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/zones/custom_town.xml b/L2J_Mobius_3.0_Helios/dist/game/data/zones/custom_town.xml deleted file mode 100644 index 716130acf4..0000000000 --- a/L2J_Mobius_3.0_Helios/dist/game/data/zones/custom_town.xml +++ /dev/null @@ -1,639 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/zones/tax.xml b/L2J_Mobius_3.0_Helios/dist/game/data/zones/tax.xml index 7a8eb7d1f9..79393d8e7f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/zones/tax.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/zones/tax.xml @@ -1,6 +1,5 @@ - - + @@ -313,7 +312,7 @@ - + diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/Config.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/Config.java index bf72ea7ba4..ffd19a881c 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/Config.java @@ -237,7 +237,6 @@ public final class Config public static double ALT_GAME_CREATION_XP_RATE; public static double ALT_GAME_CREATION_RARE_XPSP_RATE; public static double ALT_GAME_CREATION_SP_RATE; - public static boolean ALT_BLACKSMITH_USE_RECIPES; public static boolean ALT_CLAN_LEADER_INSTANT_ACTIVATION; public static int ALT_CLAN_JOIN_DAYS; public static int ALT_CLAN_CREATE_DAYS; @@ -1659,7 +1658,6 @@ public final class Config ALT_GAME_CREATION_XP_RATE = Character.getDouble("AltGameCreationXpRate", 1); ALT_GAME_CREATION_SP_RATE = Character.getDouble("AltGameCreationSpRate", 1); ALT_GAME_CREATION_RARE_XPSP_RATE = Character.getDouble("AltGameCreationRareXpSpRate", 2); - ALT_BLACKSMITH_USE_RECIPES = Character.getBoolean("AltBlacksmithUseRecipes", true); ALT_CLAN_LEADER_INSTANT_ACTIVATION = Character.getBoolean("AltClanLeaderInstantActivation", false); ALT_CLAN_JOIN_DAYS = Character.getInt("DaysBeforeJoinAClan", 1); ALT_CLAN_CREATE_DAYS = Character.getInt("DaysBeforeCreateAClan", 10); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java index 8c25ec2846..33e2d0df1d 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java @@ -28,15 +28,14 @@ import java.util.logging.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; /** @@ -47,7 +46,7 @@ public final class BuyListData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(BuyListData.class.getName()); - private final Map _buyLists = new HashMap<>(); + private final Map _buyLists = new HashMap<>(); private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); protected BuyListData() @@ -77,7 +76,7 @@ public final class BuyListData implements IGameXmlReader final int itemId = rs.getInt("item_id"); final long count = rs.getLong("count"); final long nextRestockTime = rs.getLong("next_restock_time"); - final L2BuyList buyList = getBuyList(buyListId); + final ProductList buyList = getBuyList(buyListId); if (buyList == null) { LOGGER.warning("BuyList found in database but not loaded from xml! BuyListId: " + buyListId); @@ -108,71 +107,44 @@ public final class BuyListData implements IGameXmlReader try { final int buyListId = Integer.parseInt(f.getName().replaceAll(".xml", "")); - - for (Node node = doc.getFirstChild(); node != null; node = node.getNextSibling()) + forEach(doc, "list", (list) -> { - if ("list".equalsIgnoreCase(node.getNodeName())) + final int defaultBaseTax = parseInteger(list.getAttributes(), "baseTax", 0); + final ProductList buyList = new ProductList(buyListId); + forEach(list, (node) -> { - final L2BuyList buyList = new L2BuyList(buyListId); - for (Node list_node = node.getFirstChild(); list_node != null; list_node = list_node.getNextSibling()) + switch (node.getNodeName()) { - if ("item".equalsIgnoreCase(list_node.getNodeName())) + case "item": { - int itemId = -1; - long price = -1; - long restockDelay = -1; - long count = -1; - final NamedNodeMap attrs = list_node.getAttributes(); - Node attr = attrs.getNamedItem("id"); - itemId = Integer.parseInt(attr.getNodeValue()); - attr = attrs.getNamedItem("price"); - if (attr != null) - { - price = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("restock_delay"); - if (attr != null) - { - restockDelay = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("count"); - if (attr != null) - { - count = Long.parseLong(attr.getNodeValue()); - } + final NamedNodeMap attrs = node.getAttributes(); + + final int itemId = parseInteger(attrs, "id"); final L2Item item = ItemTable.getInstance().getTemplate(itemId); if (item != null) { - if ((price > -1) && (item.getReferencePrice() > price) && (buyList.getNpcsAllowed() != null)) - { - LOGGER.warning("Item price is too low. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); - LOGGER.warning("Setting price to reference price " + item.getReferencePrice() + " instead of " + price + "."); - buyList.addProduct(new Product(buyList.getListId(), item, item.getReferencePrice(), restockDelay, count)); - } - else - { - buyList.addProduct(new Product(buyList.getListId(), item, price, restockDelay, count)); - } + final long price = parseLong(attrs, "price", -1L); + final long restockDelay = parseLong(attrs, "restock_delay", -1L); + final long count = parseLong(attrs, "count", -1L); + final int baseTax = parseInteger(attrs, "baseTax", defaultBaseTax); + + buyList.addProduct(new Product(buyListId, item, price, restockDelay, count, baseTax)); } else { - LOGGER.warning("Item not found. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); + LOGGER.warning("Item not found. BuyList:" + buyListId + " ItemID:" + itemId + " File:" + f); } + break; } - else if ("npcs".equalsIgnoreCase(list_node.getNodeName())) + case "npcs": { - for (Node npcs_node = list_node.getFirstChild(); npcs_node != null; npcs_node = npcs_node.getNextSibling()) - { - if ("npc".equalsIgnoreCase(npcs_node.getNodeName())) - { - buyList.addAllowedNpc(Integer.parseInt(npcs_node.getTextContent())); - } - } + forEach(node, "npc", (npcNode) -> buyList.addAllowedNpc(Integer.parseInt(npcNode.getTextContent()))); + break; } } - _buyLists.put(buyList.getListId(), buyList); - } - } + }); + _buyLists.put(buyListId, buyList); + }); } catch (Exception e) { @@ -186,7 +158,7 @@ public final class BuyListData implements IGameXmlReader return NUMERIC_FILTER; } - public L2BuyList getBuyList(int listId) + public ProductList getBuyList(int listId) { return _buyLists.get(listId); } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 01bd5c5942..8f4f7463aa 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -18,50 +18,44 @@ package com.l2jmobius.gameserver.data.xml.impl; import java.io.File; import java.io.FileFilter; +import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import org.w3c.dom.DOMException; import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.SpecialItemType; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ListContainer; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.ExPCCafePointInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.MultisellListHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.serverpackets.MultiSellList; -import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; import com.l2jmobius.gameserver.util.Util; public final class MultisellData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(MultisellData.class.getName()); - private final Map _entries = new HashMap<>(); - public static final int PAGE_SIZE = 40; - // Special IDs. - public static final int PC_CAFE_POINTS = -100; - public static final int CLAN_REPUTATION = -200; - public static final int FAME = -300; - public static final int FIELD_CYCLE_POINTS = -400; - public static final int RAIDBOSS_POINTS = -500; - // Misc private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); + private final Map _multisells = new HashMap<>(); + protected MultisellData() { load(); @@ -70,15 +64,14 @@ public final class MultisellData implements IGameXmlReader @Override public void load() { - _entries.clear(); + _multisells.clear(); parseDatapackDirectory("data/multisell", false); if (Config.CUSTOM_MULTISELL_LOAD) { parseDatapackDirectory("data/multisell/custom", false); } - verify(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _entries.size() + " multisell lists."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _multisells.size() + " multisell lists."); } @Override @@ -86,73 +79,88 @@ public final class MultisellData implements IGameXmlReader { try { - final int id = Integer.parseInt(f.getName().replaceAll(".xml", "")); - int entryId = 1; - Node att; - final ListContainer list = new ListContainer(id); - - for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) + forEach(doc, "list", listNode -> { - if ("list".equalsIgnoreCase(n.getNodeName())) + final StatsSet set = new StatsSet(parseAttributes(listNode)); + final int listId = Integer.parseInt(f.getName().substring(0, f.getName().length() - 4)); + final List entries = new ArrayList<>(listNode.getChildNodes().getLength()); + + forEach(listNode, itemNode -> { - list.setApplyTaxes(parseBoolean(n.getAttributes(), "applyTaxes", false)); - list.setIsChanceMultisell(parseBoolean(n.getAttributes(), "isChanceMultisell", false)); - list.setMaintainEnchantment(parseBoolean(n.getAttributes(), "maintainEnchantment", false)); - - att = n.getAttributes().getNamedItem("useRate"); - if (att != null) + if ("item".equalsIgnoreCase(itemNode.getNodeName())) { - try + final List ingredients = new ArrayList<>(1); + final List products = new ArrayList<>(1); + final MultisellEntryHolder entry = new MultisellEntryHolder(ingredients, products); + + for (Node d = itemNode.getFirstChild(); d != null; d = d.getNextSibling()) { - - list.setUseRate(Double.valueOf(att.getNodeValue())); - if (list.getUseRate() <= 1e-6) + if ("ingredient".equalsIgnoreCase(d.getNodeName())) { - throw new NumberFormatException("The value cannot be 0"); // threat 0 as invalid value - } - } - catch (NumberFormatException e) - { - try - { - list.setUseRate(Config.class.getField(att.getNodeValue()).getDouble(Config.class)); - } - catch (Exception e1) - { - LOGGER.warning(e1.getMessage() + doc.getLocalName()); - list.setUseRate(1.0); - } - } - catch (DOMException e) - { - LOGGER.warning(e.getMessage() + doc.getLocalName()); - } - } - - for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) - { - if ("item".equalsIgnoreCase(d.getNodeName())) - { - final Entry e = parseEntry(d, entryId++, list); - list.getEntries().add(e); - } - else if ("npcs".equalsIgnoreCase(d.getNodeName())) - { - for (Node b = d.getFirstChild(); b != null; b = b.getNextSibling()) - { - if ("npc".equalsIgnoreCase(b.getNodeName())) + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final ItemHolder ingredient = new ItemHolder(id, count); + + if (itemExists(ingredient)) { - if (Util.isDigit(b.getTextContent())) + ingredients.add(ingredient); + } + else + { + LOGGER.warning("Invalid ingredient id or count for itemId: " + ingredient.getId() + ", count: " + ingredient.getCount() + " in list: " + listId); + continue; + } + } + else if ("production".equalsIgnoreCase(d.getNodeName())) + { + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count); + + if (itemExists(product)) + { + // Check chance only of items that have set chance. Items without chance (NaN) are used for displaying purposes. + if ((!Double.isNaN(chance) && (chance < 0)) || (chance > 100)) { - list.allowNpc(Integer.parseInt(b.getTextContent())); + LOGGER.warning("Invalid chance for itemId: " + product.getId() + ", count: " + product.getCount() + ", chance: " + chance + " in list: " + listId); + continue; } + + products.add(product); + } + else + { + LOGGER.warning("Invalid product id or count for itemId: " + product.getId() + ", count: " + product.getCount() + " in list: " + listId); + continue; } } } + + final double totalChance = products.stream().filter(i -> !Double.isNaN(i.getChance())).mapToDouble(ItemChanceHolder::getChance).sum(); + if (totalChance > 100) + { + LOGGER.warning("Products' total chance of " + totalChance + "% exceeds 100% for list: " + listId + " at entry " + entries.size() + 1 + "."); + } + + entries.add(entry); } - } - } - _entries.put(id, list); + else if ("npcs".equalsIgnoreCase(itemNode.getNodeName())) + { + // Initialize NPCs with the size of child nodes. + final Set allowNpc = new HashSet<>(itemNode.getChildNodes().getLength()); + forEach(itemNode, n -> "npc".equalsIgnoreCase(n.getNodeName()) && Util.isDigit(n.getTextContent()), n -> allowNpc.add(Integer.parseInt(n.getTextContent()))); + + // Add npcs to stats set. + set.set("allowNpc", allowNpc); + } + }); + + set.set("listId", listId); + set.set("entries", entries); + + _multisells.put(listId, new MultisellListHolder(set)); + }); } catch (Exception e) { @@ -166,44 +174,6 @@ public final class MultisellData implements IGameXmlReader return NUMERIC_FILTER; } - private final Entry parseEntry(Node n, int entryId, ListContainer list) - { - final Node first = n.getFirstChild(); - final Entry entry = new Entry(entryId); - - NamedNodeMap attrs; - Node att; - StatsSet set; - - for (n = first; n != null; n = n.getNextSibling()) - { - if ("ingredient".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addIngredient(new Ingredient(set)); - } - else if ("production".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addProduct(new Ingredient(set)); - } - } - - return entry; - } - /** * This will generate the multisell list for the items.
* There exist various parameters in multisells that affect the way they will appear: @@ -230,38 +200,36 @@ public final class MultisellData implements IGameXmlReader * @param player * @param npc * @param inventoryOnly - * @param productMultiplier * @param ingredientMultiplier + * @param productMultiplier */ - public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double productMultiplier, double ingredientMultiplier) + public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double ingredientMultiplier, double productMultiplier) { - final ListContainer template = _entries.get(listId); + final MultisellListHolder template = _multisells.get(listId); if (template == null) { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find list ID: " + listId + " requested by player: " + player.getName() + ", NPC ID:" + (npc != null ? npc.getId() : 0)); + LOGGER.warning("Can't find list id: " + listId + " requested by player: " + player.getName() + ", npcId: " + (npc != null ? npc.getId() : 0)); return; } - if (!template.isNpcAllowed(-1) && (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly()))) + if (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly())) { - LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); - return; - } - - final PreparedListContainer list = new PreparedListContainer(template, inventoryOnly, player, npc); - - // Pass through this only when multipliers are different from 1 - if ((productMultiplier != 1) || (ingredientMultiplier != 1)) - { - list.getEntries().forEach(entry -> + if (player.isGM()) { - // Math.max used here to avoid dropping count to 0 - entry.getProducts().forEach(product -> product.setItemCount((long) Math.max(product.getItemCount() * productMultiplier, 1))); - - // Math.max used here to avoid dropping count to 0 - entry.getIngredients().forEach(ingredient -> ingredient.setItemCount((long) Math.max(ingredient.getItemCount() * ingredientMultiplier, 1))); - }); + player.sendMessage("Multisell " + listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); + return; + } } + + // Check if ingredient/product multipliers are set, if not, set them to the template value. + ingredientMultiplier = (Double.isNaN(ingredientMultiplier) ? template.getIngredientMultiplier() : ingredientMultiplier); + productMultiplier = (Double.isNaN(productMultiplier) ? template.getProductMultiplier() : productMultiplier); + + final PreparedMultisellListHolder list = new PreparedMultisellListHolder(template, inventoryOnly, player.getInventory(), npc, ingredientMultiplier, productMultiplier); int index = 0; do { @@ -276,172 +244,19 @@ public final class MultisellData implements IGameXmlReader public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly) { - separateAndSend(listId, player, npc, inventoryOnly, 1, 1); + separateAndSend(listId, player, npc, inventoryOnly, Double.NaN, Double.NaN); } - public static boolean hasSpecialIngredient(int id, long amount, L2PcInstance player) + private final boolean itemExists(ItemHolder holder) { - switch (id) + final SpecialItemType specialItem = SpecialItemType.getByClientId(holder.getId()); + if (specialItem != null) { - case PC_CAFE_POINTS: - { - if (player.getPcCafePoints() >= amount) - { - return true; - } - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); - break; - } - case CLAN_REPUTATION: - { - if (player.getClan() == null) - { - player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); - return false; - } - if (!player.isClanLeader()) - { - player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); - return false; - } - if (player.getClan().getReputationScore() < amount) - { - player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); - return false; - } - return true; - } - case FAME: - { - if (player.getFame() < amount) - { - player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); - return false; - } - return true; - } - case RAIDBOSS_POINTS: - { - if (player.getRaidbossPoints() < amount) - { - player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); - return false; - } - return true; - } - } - return false; - } - - public static boolean takeSpecialIngredient(int id, long amount, L2PcInstance player) - { - switch (id) - { - case PC_CAFE_POINTS: - { - final int cost = player.getPcCafePoints() - (int) amount; - player.setPcCafePoints(cost); - final SystemMessage smsgpc = SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_USING_S1_POINT); - smsgpc.addLong((int) amount); - player.sendPacket(smsgpc); - player.sendPacket(new ExPCCafePointInfo(player.getPcCafePoints(), (int) amount, 1)); - return true; - } - case CLAN_REPUTATION: - { - player.getClan().takeReputationScore((int) amount, true); - final SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); - smsg.addLong(amount); - player.sendPacket(smsg); - return true; - } - case FAME: - { - player.setFame(player.getFame() - (int) amount); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - return true; - } - case RAIDBOSS_POINTS: - { - player.setRaidbossPoints(player.getRaidbossPoints() - (int) amount); - player.sendPacket(new UserInfo(player)); - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(amount)); - return true; - } - } - return false; - } - - public static void giveSpecialProduct(int id, long amount, L2PcInstance player) - { - switch (id) - { - case CLAN_REPUTATION: - { - player.getClan().addReputationScore((int) amount, true); - break; - } - case FAME: - { - player.setFame((int) (player.getFame() + amount)); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - break; - } - case RAIDBOSS_POINTS: - { - player.increaseRaidbossPoints((int) amount); - player.sendPacket(new UserInfo(player)); - break; - } - } - } - - private final void verify() - { - ListContainer list; - final Iterator iter = _entries.values().iterator(); - while (iter.hasNext()) - { - list = iter.next(); - - for (Entry ent : list.getEntries()) - { - for (Ingredient ing : ent.getIngredients()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find ingredient with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - for (Ingredient ing : ent.getProducts()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find product with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - } - } - } - - private final boolean verifyIngredient(Ingredient ing) - { - switch (ing.getItemId()) - { - case PC_CAFE_POINTS: - case CLAN_REPUTATION: - case FAME: - case RAIDBOSS_POINTS: - { - return true; - } - default: - { - return ing.getTemplate() != null; - } + return true; } + + final L2Item template = ItemTable.getInstance().getTemplate(holder.getId()); + return (template != null) && (template.isStackable() ? (holder.getCount() >= 1) : (holder.getCount() == 1)); } public static MultisellData getInstance() diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java index 3706b281b4..bffa2b107c 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java @@ -83,12 +83,12 @@ public class OptionData implements IGameXmlReader } case "active_skill": { - option.setActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "passive_skill": { - option.setPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "attack_skill": diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/datatables/AugmentationData.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/datatables/AugmentationData.java index 82a79af4c1..8582c38326 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/datatables/AugmentationData.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/datatables/AugmentationData.java @@ -33,8 +33,7 @@ import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.L2Augmentation; -import com.l2jmobius.gameserver.model.holders.SkillHolder; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.options.Options; @@ -86,12 +85,11 @@ public class AugmentationData private final List> _redSkills = new ArrayList<>(); private final List> _yellowSkills = new ArrayList<>(); + private final Map _augmentations = new HashMap<>(); private final List _augmentationChances = new ArrayList<>(); private final List _augmentationChancesAcc = new ArrayList<>(); private final List _augmentationStones = new ArrayList<>(); - private final Map _allSkills = new HashMap<>(); - protected AugmentationData() { for (int i = 0; i < 10; i++) @@ -297,8 +295,6 @@ public class AugmentationData { _redSkills.get(k).add(augmentationId); } - - _allSkills.put(augmentationId, new SkillHolder(skillId, skillLvL)); } } } @@ -520,6 +516,11 @@ public class AugmentationData } } + public Augmentation getAugmentation(int id) + { + return _augmentations.computeIfAbsent(id, k -> new Augmentation(k)); + } + /** * Generate a new random augmentation * @param lifeStoneLevel @@ -529,7 +530,7 @@ public class AugmentationData * @param targetItem * @return */ - public L2Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) + public Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) { switch (bodyPart) { @@ -546,7 +547,7 @@ public class AugmentationData } } - private L2Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) + private Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) { int stat12 = 0; int stat34 = 0; @@ -739,7 +740,8 @@ public class AugmentationData } } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } boolean generateSkill = false; boolean generateGlow = false; @@ -916,10 +918,10 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; resultColor=" + resultColor + "; level=" + lifeStoneLevel + "; grade=" + lifeStoneGrade); } - return new L2Augmentation(((stat34 << 16) + stat12)); + return new Augmentation(((stat34 << 16) + stat12)); } - private L2Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) + private Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) { int stat12 = 0; int stat34 = 0; @@ -987,7 +989,8 @@ public class AugmentationData } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } lifeStoneLevel = Math.min(lifeStoneLevel, 9); int base = 0; @@ -1031,7 +1034,7 @@ public class AugmentationData op = OptionData.getInstance().getOptions(stat34); } - if ((op == null) || (!op.hasActiveSkill() && !op.hasPassiveSkill() && !op.hasActivationSkills())) + if ((op == null) || (!op.hasActiveSkills() && !op.hasPassiveSkills() && !op.hasActivationSkills())) { // second augmentation (stats) // calculating any different from stat12 value inside sub-block @@ -1048,7 +1051,8 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Accessory augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; level=" + lifeStoneLevel); } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } public boolean isAugmentaionStoneValid(int stoneId) diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java index 5294f6f231..6a3e232a26 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java @@ -74,7 +74,6 @@ public final class MapRegionManager implements IGameXmlReader String name; String town; int locId; - int castle; int bbs; for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) @@ -89,10 +88,9 @@ public final class MapRegionManager implements IGameXmlReader name = attrs.getNamedItem("name").getNodeValue(); town = attrs.getNamedItem("town").getNodeValue(); locId = parseInteger(attrs, "locId"); - castle = parseInteger(attrs, "castle"); bbs = parseInteger(attrs, "bbs"); - final L2MapRegion region = new L2MapRegion(name, town, locId, castle, bbs); + final L2MapRegion region = new L2MapRegion(name, town, locId, bbs); for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) { attrs = c.getAttributes(); @@ -224,22 +222,6 @@ public final class MapRegionManager implements IGameXmlReader return region.getTown(); } - /** - * @param activeChar - * @return - */ - public int getAreaCastle(L2Character activeChar) - { - final L2MapRegion region = getMapRegion(activeChar); - - if (region == null) - { - return 0; - } - - return region.getCastle(); - } - /** * @param activeChar * @param teleportWhere diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/TownManager.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/TownManager.java deleted file mode 100644 index b0543eb11a..0000000000 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/instancemanager/TownManager.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.instancemanager; - -import com.l2jmobius.gameserver.model.entity.Castle; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; - -public final class TownManager -{ - public static int getTownCastle(int townId) - { - switch (townId) - { - case 912: - { - return 1; - } - case 916: - { - return 2; - } - case 918: - { - return 3; - } - case 922: - { - return 4; - } - case 924: - { - return 5; - } - case 926: - { - return 6; - } - case 1538: - { - return 7; - } - case 1537: - { - return 8; - } - case 1714: - { - return 9; - } - default: - { - return 0; - } - } - } - - public static boolean townHasCastleInSiege(int townId) - { - final int castleId = getTownCastle(townId); - if (castleId > 0) - { - final Castle castle = CastleManager.getInstance().getCastleById(castleId); - if (castle != null) - { - return castle.getSiege().isInProgress(); - } - } - return false; - } - - public static boolean townHasCastleInSiege(int x, int y) - { - return townHasCastleInSiege(MapRegionManager.getInstance().getMapRegionLocId(x, y)); - } - - public static L2TownZone getTown(int townId) - { - for (L2TownZone temp : ZoneManager.getInstance().getAllZones(L2TownZone.class)) - { - if (temp.getTownId() == townId) - { - return temp; - } - } - return null; - } - - /** - * Returns the town at that position (if any) - * @param x - * @param y - * @param z - * @return - */ - public static L2TownZone getTown(int x, int y, int z) - { - for (L2ZoneType temp : ZoneManager.getInstance().getZones(x, y, z)) - { - if (temp instanceof L2TownZone) - { - return (L2TownZone) temp; - } - } - return null; - } -} diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2Augmentation.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/Augmentation.java similarity index 68% rename from L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2Augmentation.java rename to L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/Augmentation.java index 65ff4312c1..9a0e2b459d 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/L2Augmentation.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/Augmentation.java @@ -1,107 +1,95 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.options.Options; - -/** - * Used to store an augmentation and its bonuses. - * @author durgus, UnAfraid - */ -public final class L2Augmentation -{ - private static final Logger LOGGER = Logger.getLogger(L2Augmentation.class.getName()); - private final List _options = new ArrayList<>(); - private boolean _active; - private final int _id; - - public L2Augmentation(int id) - { - _id = id; - _active = false; - final int[] stats = new int[2]; - stats[0] = 0x0000FFFF & id; - stats[1] = (id >> 16); - - for (int stat : stats) - { - final Options op = OptionData.getInstance().getOptions(stat); - if (op != null) - { - _options.add(op); - } - else - { - LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stat); - } - } - } - - /** - * Get the augmentation "id" used in serverpackets. - * @return augmentationId - */ - public int getId() - { - return _id; - } - - public List getOptions() - { - return _options; - } - - public void applyBonus(L2PcInstance player) - { - // make sure the bonuses are not applied twice.. - if (_active) - { - return; - } - - for (Options op : _options) - { - op.apply(player); - } - - player.getStat().recalculateStats(true); - _active = true; - } - - public void removeBonus(L2PcInstance player) - { - // make sure the bonuses are not removed twice - if (!_active) - { - return; - } - - for (Options op : _options) - { - op.remove(player); - } - - player.getStat().recalculateStats(true); - _active = false; - } -} +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model; + +import java.util.logging.Logger; + +import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.options.Options; + +/** + * Used to store an augmentation and its bonuses. + * @author durgus, UnAfraid + */ +public final class Augmentation +{ + private static final Logger LOGGER = Logger.getLogger(Augmentation.class.getName()); + private final Options[] _options; + private final int _id; + + public Augmentation(int id) + { + _id = id; + final int[] stats = new int[2]; + stats[0] = 0x0000FFFF & id; + stats[1] = (id >> 16); + _options = new Options[stats.length]; + + for (int i = 0; i < stats.length; i++) + { + final Options op = OptionData.getInstance().getOptions(stats[i]); + if (op != null) + { + _options[i] = op; + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stats[i]); + } + } + } + + /** + * Get the augmentation "id" used in serverpackets. + * @return augmentationId + */ + public int getId() + { + return _id; + } + + public Options[] getOptions() + { + return _options; + } + + public int getOptionId(int index) + { + if ((index >= 0) && (index < _options.length) && (_options[index] != null)) + { + return _options[index].getId(); + } + return 0; + } + + public void applyBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.apply(player); + } + } + + public void removeBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.remove(player); + } + } +} diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java index 00e25a5f8f..ec138037fb 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java @@ -50,7 +50,7 @@ public class CharSelectInfoPackage private int _reputation = 0; private int _pkKills = 0; private int _pvpKills = 0; - private int _augmentationId = 0; + private Augmentation _augmentation; private int _x = 0; private int _y = 0; private int _z = 0; @@ -336,14 +336,14 @@ public class CharSelectInfoPackage return _reputation; } - public void setAugmentationId(int augmentationId) + public void setAugmentation(Augmentation augmentation) { - _augmentationId = augmentationId; + _augmentation = augmentation; } - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } public void setPkKills(int PkKills) diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/ItemInfo.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/ItemInfo.java index e8e8b21cd0..fb42cf8124 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/ItemInfo.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/ItemInfo.java @@ -39,10 +39,10 @@ public class ItemInfo private L2Item _item; /** The level of enchant on the L2ItemInstance */ - private int _enchant; + private int _enchantLevel; /** The augmentation of the item */ - private int _augmentation; + private Augmentation _augmentation; /** The quantity of L2ItemInstance */ private long _count; @@ -68,7 +68,7 @@ public class ItemInfo private byte _elemAtkType = -2; private int _elemAtkPower = 0; - private final int[] _elemDefAttr = + private final int[] _attributeDefence = { 0, 0, @@ -99,17 +99,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentation().getId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -150,7 +143,7 @@ public class ItemInfo _elemAtkPower = item.getAttackAttributePower(); for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) { - _elemDefAttr[type.getClientId()] = item.getDefenceAttribute(type); + _attributeDefence[type.getClientId()] = item.getDefenceAttribute(type); } _option = item.getEnchantOptions(); _soulCrystalOptions = item.getSpecialAbilities(); @@ -179,10 +172,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchant(); + _enchantLevel = item.getEnchant(); // Get the augmentation bonus - _augmentation = item.getAugmentId(); + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -207,7 +200,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); @@ -230,10 +223,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = 0; + _enchantLevel = 0; - // Get the augmentation boni - _augmentation = 0; + // Get the augmentation bonus + _augmentation = null; // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -272,17 +265,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentationId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -303,7 +289,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); _soulCrystalOptions = item.getSoulCrystalOptions(); @@ -320,26 +306,16 @@ public class ItemInfo return _item; } - public int getEnchant() + public int getEnchantLevel() { - return _enchant; + return _enchantLevel; } - public int getAugmentationBonus() + public Augmentation getAugmentation() { return _augmentation; } - public int get1stAugmentationId() - { - return 0x0000FFFF & getAugmentationBonus(); - } - - public int get2ndAugmentationId() - { - return getAugmentationBonus() >> 16; - } - public long getCount() { return _count; @@ -395,9 +371,9 @@ public class ItemInfo return _elemAtkPower; } - public int getElementDefAttr(byte i) + public int getAttributeDefence(AttributeType attribute) { - return _elemDefAttr[i]; + return _attributeDefence[attribute.getClientId()]; } public int[] getEnchantOptions() @@ -412,12 +388,12 @@ public class ItemInfo public Collection getSoulCrystalOptions() { - return _soulCrystalOptions; + return _soulCrystalOptions != null ? _soulCrystalOptions : Collections.emptyList(); } public Collection getSoulCrystalSpecialOptions() { - return _soulCrystalSpecialOptions; + return _soulCrystalSpecialOptions != null ? _soulCrystalSpecialOptions : Collections.emptyList(); } public long getVisualExpiration() diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2MapRegion.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2MapRegion.java index 1fc3170544..bf0bb6353b 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2MapRegion.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/L2MapRegion.java @@ -33,7 +33,6 @@ public class L2MapRegion private final String _name; private final String _town; private final int _locId; - private final int _castle; private final int _bbs; private List _maps = null; @@ -44,12 +43,11 @@ public class L2MapRegion private final Map _bannedRace = new HashMap<>(); - public L2MapRegion(String name, String town, int locId, int castle, int bbs) + public L2MapRegion(String name, String town, int locId, int bbs) { _name = name; _town = town; _locId = locId; - _castle = castle; _bbs = bbs; } @@ -68,11 +66,6 @@ public class L2MapRegion return _locId; } - public final int getCastle() - { - return _castle; - } - public final int getBbs() { return _bbs; diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/StatsSet.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/StatsSet.java index 8bd7bed637..67277686c3 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/StatsSet.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/StatsSet.java @@ -711,6 +711,20 @@ public class StatsSet implements IParserAdvUtils return (A) obj; } + @SuppressWarnings("unchecked") + public final
A getObject(String name, Class type, A defaultValue) + { + Objects.requireNonNull(name); + Objects.requireNonNull(type); + final Object obj = _set.get(name); + if ((obj == null) || !type.isAssignableFrom(obj.getClass())) + { + return defaultValue; + } + + return (A) obj; + } + public SkillHolder getSkillHolder(String key) { Objects.requireNonNull(key); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeItem.java index b37de23dd2..b688345ebf 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -51,7 +51,7 @@ public class TradeItem private final Collection _soulCrystalOptions; private final Collection _soulCrystalSpecialOptions; private int _visualId; - private int _augmentId; + private Augmentation _augmentation; public TradeItem(L2ItemInstance item, long count, long price) { @@ -74,7 +74,7 @@ public class TradeItem _soulCrystalOptions = item.getSpecialAbilities(); _soulCrystalSpecialOptions = item.getAdditionalSpecialAbilities(); _visualId = item.getVisualId(); - _augmentId = item.isAugmented() ? item.getAugmentation().getId() : 0; + _augmentation = item.getAugmentation(); } public TradeItem(L2Item item, long count, long price) @@ -215,9 +215,9 @@ public class TradeItem return _soulCrystalSpecialOptions; } - public int getAugmentId() + public Augmentation getAugmentation() { - return _augmentId; + return _augmentation; } public int getVisualId() diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeList.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeList.java index 762195553a..29362b8549 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeList.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/TradeList.java @@ -323,6 +323,12 @@ public class TradeList return null; } + if (count < 0) + { + _log.warning(_owner.getName() + ": Attempt to remove " + count + " items from TradeList!"); + return null; + } + for (TradeItem titem : _items) { if ((titem.getObjectId() == objectId) || (titem.getItem().getId() == itemId)) @@ -881,10 +887,10 @@ public class TradeList /** * Sell items to this PrivateStore list * @param player - * @param items + * @param requestedItems * @return : boolean true if success */ - public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] items) + public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] requestedItems) { if (_locked) { @@ -907,12 +913,14 @@ public class TradeList long totalPrice = 0; - for (ItemRequest item : items) + final TradeItem[] sellerItems = _items.toArray(new TradeItem[0]); + + for (ItemRequest item : requestedItems) { // searching item in tradelist using itemId boolean found = false; - for (TradeItem ti : _items) + for (TradeItem ti : sellerItems) { if (ti.getItem().getId() == item.getItemId()) { @@ -956,8 +964,19 @@ public class TradeList continue; } + if ((item.getObjectId() < 1) || (item.getObjectId() > sellerItems.length)) + { + continue; + } + + final TradeItem tradeItem = sellerItems[item.getObjectId() - 1]; + if ((tradeItem == null) || (tradeItem.getItem().getId() != item.getItemId())) + { + continue; + } + // Check if requested item is available for manipulation - int objectId = item.getObjectId(); + int objectId = tradeItem.getObjectId(); L2ItemInstance oldItem = player.checkItemManipulation(objectId, item.getCount(), "sell"); // private store - buy use same objectId for buying several non-stackable items if (oldItem == null) diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Npc.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Npc.java index b669e16e76..5dc7a521bb 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Npc.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/L2Npc.java @@ -34,6 +34,7 @@ import com.l2jmobius.gameserver.enums.MpRewardAffectType; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.ShotType; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.enums.Team; import com.l2jmobius.gameserver.enums.UserInfoType; import com.l2jmobius.gameserver.handler.BypassHandler; @@ -42,7 +43,6 @@ import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager.DBStatusType; import com.l2jmobius.gameserver.instancemanager.FortManager; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.L2Object; @@ -83,6 +83,7 @@ import com.l2jmobius.gameserver.model.spawns.NpcSpawnTemplate; import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.variables.NpcVariables; import com.l2jmobius.gameserver.model.zone.ZoneId; +import com.l2jmobius.gameserver.model.zone.type.L2TaxZone; import com.l2jmobius.gameserver.network.NpcStringId; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; @@ -154,6 +155,9 @@ public class L2Npc extends L2Character private StatsSet _params; private DBSpawnManager.DBStatusType _raidStatus; + /** Contains information about local tax payments. */ + private L2TaxZone _taxZone = null; + /** * Constructor of L2NpcInstance (use L2Character constructor).
* Actions: @@ -519,6 +523,48 @@ public class L2Npc extends L2Character return true; } + /** + * Set another tax zone which will be used for tax payments. + * @param zone newly entered tax zone + */ + public final void setTaxZone(L2TaxZone zone) + { + _taxZone = ((zone != null) && !isInInstance()) ? zone : null; + } + + /** + * Gets castle for tax payments. + * @return instance of {@link Castle} when NPC is inside {@link L2TaxZone} otherwise {@code null} + */ + public final Castle getTaxCastle() + { + return (_taxZone != null) ? _taxZone.getCastle() : null; + } + + /** + * Gets castle tax rate + * @param type type of tax + * @return tax rate when NPC is inside tax zone otherwise {@code 0} + */ + public final double getCastleTaxRate(TaxType type) + { + final Castle castle = getTaxCastle(); + return (castle != null) ? (castle.getTaxPercent(type) / 100.0) : 0; + } + + /** + * Increase castle vault by specified tax amount. + * @param amount tax amount + */ + public final void handleTaxPayment(long amount) + { + final Castle taxCastle = getTaxCastle(); + if (taxCastle != null) + { + taxCastle.addToTreasury(amount); + } + } + /** * @return the nearest L2Castle this L2NpcInstance belongs to. Otherwise null. */ @@ -560,11 +606,6 @@ public class L2Npc extends L2Character return FortManager.getInstance().findNearestFort(this, maxDistance); } - public final boolean isInTown() - { - return TownManager.getTown(getX(), getY(), getZ()) != null; - } - /** * Open a quest or chat window on client with the text of the L2NpcInstance in function of the command.
* Example of use : @@ -1063,14 +1104,9 @@ public class L2Npc extends L2Character WalkingManager.getInstance().onSpawn(this); } - // Display clan flag - if (isInsideZone(ZoneId.TOWN) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) + if (isInsideZone(ZoneId.TAX) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) { - final int townId = TownManager.getTown(getX(), getY(), getZ()).getTownId(); - if ((townId != 33) && (townId != 22)) - { - setClanId(getCastle().getOwnerId()); - } + setClanId(getCastle().getOwnerId()); } } @@ -1079,12 +1115,12 @@ public class L2Npc extends L2Character */ public void onRespawn() { - // Stop all effects and recalculate stats without broadcasting. - getEffectList().stopAllEffects(false); - // Make it alive setIsDead(false); + // Stop all effects and recalculate stats without broadcasting. + getEffectList().stopAllEffects(false); + // Reset decay info setDecayed(false); @@ -1827,11 +1863,17 @@ public class L2Npc extends L2Character initSeenCreatures(getTemplate().getAggroRange()); } + /** + * @return the NpcStringId for name + */ public NpcStringId getNameString() { return _nameString; } + /** + * @return the NpcStringId for title + */ public NpcStringId getTitleString() { return _titleString; diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java index b48afd7f29..71096be532 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java @@ -21,7 +21,7 @@ import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -52,8 +52,7 @@ public class L2MerchantInstance extends L2NpcInstance @Override public String getHtmlPath(int npcId, int val) { - String pom = ""; - + String pom; if (val == 0) { pom = "" + npcId; @@ -62,7 +61,6 @@ public class L2MerchantInstance extends L2NpcInstance { pom = npcId + "-" + val; } - return "data/html/merchant/" + pom + ".htm"; } @@ -71,9 +69,9 @@ public class L2MerchantInstance extends L2NpcInstance showBuyWindow(player, val, true); } - public final void showBuyWindow(L2PcInstance player, int val, boolean applyTax) + public final void showBuyWindow(L2PcInstance player, int val, boolean applyCastleTax) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); @@ -90,23 +88,7 @@ public class L2MerchantInstance extends L2NpcInstance player.setInventoryBlockingStatus(true); - player.sendPacket(new BuyList(buyList, player.getAdena(), (applyTax) ? getTotalTaxRate(TaxType.BUY) : 0)); - player.sendPacket(new ExBuySellList(player, false, (applyTax) ? getTotalTaxRate(TaxType.SELL) : 0)); - player.sendPacket(ActionFailed.STATIC_PACKET); - } - - public boolean hasCastle() - { - return getCastle() != null; - } - - public int getTotalTax(TaxType taxType) - { - return hasCastle() ? getCastle().getTaxPercent(taxType) : 0; - } - - public double getTotalTaxRate(TaxType taxType) - { - return getTotalTax(taxType) / 100.0; + player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0)); + player.sendPacket(new ExBuySellList(player, false, (applyCastleTax) ? getCastleTaxRate(TaxType.SELL) : 0)); } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java index cff16174ad..e7fc704cda 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java @@ -162,7 +162,6 @@ import com.l2jmobius.gameserver.model.actor.stat.PcStat; import com.l2jmobius.gameserver.model.actor.status.PcStatus; import com.l2jmobius.gameserver.model.actor.tasks.player.DismountTask; import com.l2jmobius.gameserver.model.actor.tasks.player.FameTask; -import com.l2jmobius.gameserver.model.actor.tasks.player.GameGuardCheckTask; import com.l2jmobius.gameserver.model.actor.tasks.player.HennaDurationTask; import com.l2jmobius.gameserver.model.actor.tasks.player.InventoryEnableTask; import com.l2jmobius.gameserver.model.actor.tasks.player.PetFeedTask; @@ -212,6 +211,7 @@ import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerSubCh import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.model.holders.MovieHolder; import com.l2jmobius.gameserver.model.holders.PlayerEventHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import com.l2jmobius.gameserver.model.holders.SellBuffHolder; import com.l2jmobius.gameserver.model.holders.SkillUseHolder; import com.l2jmobius.gameserver.model.holders.TrainingHolder; @@ -235,7 +235,6 @@ import com.l2jmobius.gameserver.model.items.type.ArmorType; import com.l2jmobius.gameserver.model.items.type.EtcItemType; import com.l2jmobius.gameserver.model.items.type.WeaponType; import com.l2jmobius.gameserver.model.matching.MatchingRoom; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameTask; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; @@ -290,7 +289,6 @@ import com.l2jmobius.gameserver.network.serverpackets.ExUseSharedGroupItem; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight; -import com.l2jmobius.gameserver.network.serverpackets.GameGuardQuery; import com.l2jmobius.gameserver.network.serverpackets.GetOnVehicle; import com.l2jmobius.gameserver.network.serverpackets.HennaInfo; import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -561,7 +559,7 @@ public final class L2PcInstance extends L2Playable private TradeList _buyList; // Multisell - private PreparedListContainer _currentMultiSell = null; + private PreparedMultisellListHolder _currentMultiSell = null; private int _nobleLevel = 0; private boolean _hero = false; @@ -4336,6 +4334,8 @@ public final class L2PcInstance extends L2Playable return getClan().getAllyCrestId(); } + //@formatter:off + /* public void queryGameGuard() { if (getClient() != null) @@ -4345,9 +4345,10 @@ public final class L2PcInstance extends L2Playable } if (Config.GAMEGUARD_ENFORCE) { - ThreadPoolManager.schedule(new GameGuardCheckTask(this), 30 * 1000); + ThreadPoolManager.scheduleGeneral(new GameGuardCheckTask(this), 30 * 1000); } - } + }*/ + //@formatter:on /** * Send a Server->Client packet StatusUpdate to the L2PcInstance. @@ -4712,12 +4713,12 @@ public final class L2PcInstance extends L2Playable } } - public final PreparedListContainer getMultiSell() + public final PreparedMultisellListHolder getMultiSell() { return _currentMultiSell; } - public final void setMultiSell(PreparedListContainer list) + public final void setMultiSell(PreparedMultisellListHolder list) { _currentMultiSell = list; } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/Product.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/Product.java index 10242424c7..0da19f8ec7 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/Product.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/Product.java @@ -25,9 +25,11 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; +import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.type.EtcItemType; /** * @author NosBit @@ -41,28 +43,25 @@ public final class Product private final long _price; private final long _restockDelay; private final long _maxCount; + private final double _baseTax; private AtomicLong _count = null; private ScheduledFuture _restockTask = null; - public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount) + public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount, int baseTax) { Objects.requireNonNull(item); _buyListId = buyListId; _item = item; - _price = price; + _price = (price < 0) ? item.getReferencePrice() : price; _restockDelay = restockDelay * 60000; _maxCount = maxCount; + _baseTax = baseTax / 100.0; if (hasLimitedStock()) { _count = new AtomicLong(maxCount); } } - public int getBuyListId() - { - return _buyListId; - } - public L2Item getItem() { return _item; @@ -75,11 +74,17 @@ public final class Product public long getPrice() { - if (_price < 0) + long price = _price; + if (_item.getItemType().equals(EtcItemType.CASTLE_GUARD)) { - return getItem().getReferencePrice(); + price *= Config.RATE_SIEGE_GUARDS_PRICE; } - return _price; + return price; + } + + public double getBaseTaxRate() + { + return _baseTax; } public long getRestockDelay() @@ -155,7 +160,7 @@ public final class Product try (Connection con = DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("INSERT INTO `buylists`(`buylist_id`, `item_id`, `count`, `next_restock_time`) VALUES(?, ?, ?, ?) ON DUPLICATE KEY UPDATE `count` = ?, `next_restock_time` = ?")) { - statement.setInt(1, getBuyListId()); + statement.setInt(1, _buyListId); statement.setInt(2, getItemId()); statement.setLong(3, getCount()); statement.setLong(5, getCount()); @@ -174,7 +179,7 @@ public final class Product } catch (Exception e) { - _log.log(Level.WARNING, "Failed to save Product buylist_id:" + getBuyListId() + " item_id:" + getItemId(), e); + _log.log(Level.WARNING, "Failed to save Product buylist_id:" + _buyListId + " item_id:" + getItemId(), e); } } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/ProductList.java similarity index 88% rename from L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java rename to L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/ProductList.java index 3a2f60297b..884bd110a6 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/buylist/ProductList.java @@ -25,13 +25,13 @@ import java.util.Set; /** * @author NosBit */ -public final class L2BuyList +public final class ProductList { private final int _listId; private final Map _products = new LinkedHashMap<>(); private Set _allowedNpcs = null; - public L2BuyList(int listId) + public ProductList(int listId) { _listId = listId; } @@ -70,8 +70,8 @@ public final class L2BuyList return (_allowedNpcs != null) && _allowedNpcs.contains(npcId); } - public Set getNpcsAllowed() - { - return _allowedNpcs; - } + //public Set getNpcsAllowed() + //{ + // return _allowedNpcs; + //} } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java index 18b06f6692..e6dc9d5e58 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java @@ -49,4 +49,10 @@ public class EnsoulOption extends SkillHolder { return _desc; } + + @Override + public String toString() + { + return "Ensoul Id: " + _id + " Name: " + _name + " Desc: " + _desc; + } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/entity/Castle.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/entity/Castle.java index b657df5013..f1aa77737c 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/entity/Castle.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/entity/Castle.java @@ -78,7 +78,6 @@ public final class Castle extends AbstractResidence private boolean _isTimeRegistrationOver = true; // true if Castle Lords set the time, or 24h is elapsed after the siege private Calendar _siegeTimeRegistrationEndDate; // last siege end date + 1 day private CastleSide _castleSide = null; - private double _taxRate; private long _treasury = 0; private boolean _showNpcCrest = false; private L2SiegeZone _zone = null; @@ -301,7 +300,7 @@ public final class Castle extends AbstractResidence final Castle rune = CastleManager.getInstance().getCastle("rune"); if (rune != null) { - final long runeTax = (long) (amount * rune.getTaxRate()); + final long runeTax = (long) (amount * rune.getTaxRate(TaxType.BUY)); if (rune.getOwnerId() > 0) { rune.addToTreasury(runeTax); @@ -319,7 +318,7 @@ public final class Castle extends AbstractResidence final Castle aden = CastleManager.getInstance().getCastle("aden"); if (aden != null) { - final long adenTax = (long) (amount * aden.getTaxRate()); // Find out what Aden gets from the current castle instance's income + final long adenTax = (long) (amount * aden.getTaxRate(TaxType.BUY)); // Find out what Aden gets from the current castle instance's income if (aden.getOwnerId() > 0) { aden.addToTreasury(adenTax); // Only bother to really add the tax to the treasury if not npc owned @@ -673,7 +672,6 @@ public final class Castle extends AbstractResidence } } - setTaxRate(getTaxPercent(TaxType.BUY) / 100); ps2.setInt(1, getResidenceId()); try (ResultSet rs = ps2.executeQuery()) { @@ -980,14 +978,9 @@ public final class Castle extends AbstractResidence return taxPercent; } - public void setTaxRate(double taxRate) + public final double getTaxRate(TaxType taxType) { - _taxRate = taxRate; - } - - public final double getTaxRate() - { - return _taxRate; + return getTaxPercent(taxType) / 100.0; } public final long getTreasury() @@ -1229,7 +1222,6 @@ public final class Castle extends AbstractResidence _log.log(Level.WARNING, e.getMessage(), e); } _castleSide = side; - setTaxRate(getTaxPercent(TaxType.BUY) / 100); Broadcast.toAllOnlinePlayers(new ExCastleState(this)); spawnSideNpcs(); } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/events/AbstractScript.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/events/AbstractScript.java index c100d063ca..606ae56cb9 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/events/AbstractScript.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/events/AbstractScript.java @@ -2701,7 +2701,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime // set enchant level for item if that item is not adena if ((attributeType != null) && (attributeValue > 0)) { - item.setAttribute(new AttributeHolder(attributeType, attributeValue)); + item.setAttribute(new AttributeHolder(attributeType, attributeValue), true); if (item.isEquipped()) { // Recalculate all stats diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java index 09f3f798a1..0c4c87491d 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java @@ -16,7 +16,7 @@ */ package com.l2jmobius.gameserver.model.events.impl.character.player; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.events.EventType; import com.l2jmobius.gameserver.model.events.impl.IBaseEvent; @@ -29,10 +29,10 @@ public class OnPlayerAugment implements IBaseEvent { private final L2PcInstance _activeChar; private final L2ItemInstance _item; - private final L2Augmentation _augmentation; + private final Augmentation _augmentation; private final boolean _isAugment; // true = is being augmented // false = augment is being removed - public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, L2Augmentation augment, boolean isAugment) + public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, Augmentation augment, boolean isAugment) { _activeChar = activeChar; _item = item; @@ -50,7 +50,7 @@ public class OnPlayerAugment implements IBaseEvent return _item; } - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java index 5ca4c5c7af..5a1e474b7f 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java @@ -16,6 +16,10 @@ */ package com.l2jmobius.gameserver.model.holders; +import java.util.List; + +import com.l2jmobius.commons.util.Rnd; + /** * A DTO for items; contains item ID, count and chance.
* Complemented by {@link QuestItemHolder}. @@ -45,6 +49,34 @@ public class ItemChanceHolder extends ItemHolder return _chance; } + /** + * Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected. + * @param holders list of holders to calculate chance from. + * @return {@code ItemChanceHolder} of the successful random roll or {@code null} if there was no lucky holder selected. + */ + public static ItemChanceHolder getRandomHolder(List holders) + { + double itemRandom = 100 * Rnd.nextDouble(); + + for (ItemChanceHolder holder : holders) + { + // Any mathmatical expression including NaN will result in either NaN or 0 of converted to something other than double. + // We would usually want to skip calculating any holders that include NaN as a chance, because that ruins the overall process. + if (!Double.isNaN(holder.getChance())) + { + // Calculate chance + if (holder.getChance() > itemRandom) + { + return holder; + } + + itemRandom -= holder.getChance(); + } + } + + return null; + } + @Override public String toString() { diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java new file mode 100644 index 0000000000..68a6ee23b1 --- /dev/null +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java @@ -0,0 +1,56 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.items.L2Item; + +/** + * @author Nik + */ +public class MultisellEntryHolder +{ + private final boolean _stackable; + private final List _ingredients; + private final List _products; + + public MultisellEntryHolder(List ingredients, List products) + { + _ingredients = Collections.unmodifiableList(ingredients); + _products = Collections.unmodifiableList(products); + _stackable = products.stream().map(i -> ItemTable.getInstance().getTemplate(i.getId())).filter(Objects::nonNull).allMatch(L2Item::isStackable); + } + + public final List getIngredients() + { + return _ingredients; + } + + public final List getProducts() + { + return _products; + } + + public final boolean isStackable() + { + return _stackable; + } +} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java new file mode 100644 index 0000000000..df7ddfa43d --- /dev/null +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java @@ -0,0 +1,112 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.interfaces.IIdentifiable; + +/** + * A static list container of all multisell entries of a given list. + * @author Nik + */ +public class MultisellListHolder implements IIdentifiable +{ + private final int _listId; + private final boolean _isChanceMultisell; + private final boolean _applyTaxes; + private final boolean _maintainEnchantment; + private final double _ingredientMultiplier; + private final double _productMultiplier; + + protected List _entries; + protected final Set _npcsAllowed; + + public MultisellListHolder(int listId, boolean isChanceMultisell, boolean applyTaxes, boolean maintainEnchantment, double ingredientMultiplier, double productMultiplier, List entries, Set npcsAllowed) + { + _listId = listId; + _isChanceMultisell = isChanceMultisell; + _applyTaxes = applyTaxes; + _maintainEnchantment = maintainEnchantment; + _ingredientMultiplier = ingredientMultiplier; + _productMultiplier = productMultiplier; + _entries = entries; + _npcsAllowed = npcsAllowed; + } + + @SuppressWarnings("unchecked") + public MultisellListHolder(StatsSet set) + { + _listId = set.getInt("listId"); + _isChanceMultisell = set.getBoolean("isChanceMultisell", false); + _applyTaxes = set.getBoolean("applyTaxes", false); + _maintainEnchantment = set.getBoolean("maintainEnchantment", false); + _ingredientMultiplier = set.getDouble("ingredientMultiplier", 1.0); + _productMultiplier = set.getDouble("productMultiplier", 1.0); + _entries = Collections.unmodifiableList(set.getList("entries", MultisellEntryHolder.class, Collections.emptyList())); + _npcsAllowed = set.getObject("allowNpc", Set.class); + } + + public List getEntries() + { + return _entries; + } + + @Override + public final int getId() + { + return _listId; + } + + public final boolean isChanceMultisell() + { + return _isChanceMultisell; + } + + public final boolean isApplyTaxes() + { + return _applyTaxes; + } + + public final boolean isMaintainEnchantment() + { + return _maintainEnchantment; + } + + public final double getIngredientMultiplier() + { + return _ingredientMultiplier; + } + + public final double getProductMultiplier() + { + return _productMultiplier; + } + + public final boolean isNpcAllowed(int npcId) + { + return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); + } + + public final boolean isNpcOnly() + { + return _npcsAllowed != null; + } +} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java new file mode 100644 index 0000000000..db693465a0 --- /dev/null +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java @@ -0,0 +1,107 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.ArrayList; +import java.util.List; + +import com.l2jmobius.gameserver.enums.TaxType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; +import com.l2jmobius.gameserver.model.itemcontainer.ItemContainer; + +/** + * A modified version of {@link MultisellListHolder} that may include altered data of the original and other dynamic data resulted from players' interraction. + * @author Nik + */ +public class PreparedMultisellListHolder extends MultisellListHolder +{ + private int _npcObjectId; + private final boolean _inventoryOnly; + private double _taxRate; + private List _itemInfos; + + public PreparedMultisellListHolder(MultisellListHolder list, boolean inventoryOnly, ItemContainer inventory, L2Npc npc, double ingredientMultiplier, double productMultiplier) + { + super(list.getId(), list.isChanceMultisell(), list.isApplyTaxes(), list.isMaintainEnchantment(), list.getIngredientMultiplier(), list.getProductMultiplier(), list._entries, list._npcsAllowed); + + _inventoryOnly = inventoryOnly; + + if (npc != null) + { + _npcObjectId = npc.getObjectId(); + _taxRate = npc.getCastleTaxRate(TaxType.BUY); + } + + // Display items from inventory that are available for exchange. + if (inventoryOnly) + { + _entries = new ArrayList<>(); + _itemInfos = new ArrayList<>(); + + // Only do the match up on equippable items that are not currently equipped. For each appropriate item, produce a set of entries for the multisell list. + inventory.getItems(item -> !item.isEquipped() && (item.isArmor() || item.isWeapon())).forEach(item -> + { + // Check ingredients of each entry to see if it's an entry we'd like to include. + list.getEntries().stream().filter(e -> e.getIngredients().stream().anyMatch(i -> i.getId() == item.getId())).forEach(e -> + { + _entries.add(e); + _itemInfos.add(new ItemInfo(item)); + }); + }); + } + } + + public ItemInfo getItemEnchantment(int index) + { + return _itemInfos != null ? _itemInfos.get(index) : null; + } + + public double getTaxRate() + { + return isApplyTaxes() ? _taxRate : 0; + } + + public boolean isInventoryOnly() + { + return _inventoryOnly; + } + + public final boolean checkNpcObjectId(int npcObjectId) + { + return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); + } + + /** + * @param ingredient + * @return the new count of the given ingredient after applying ingredient multiplier and adena tax rate. + */ + public long getIngredientCount(ItemHolder ingredient) + { + return (ingredient.getId() == Inventory.ADENA_ID) ? Math.round(ingredient.getCount() * getIngredientMultiplier() * (1 + _taxRate)) : Math.round(ingredient.getCount() * getIngredientMultiplier()); + } + + /** + * @param product + * @return the new count of the given product after applying product multiplier. + */ + public long getProductCount(ItemChanceHolder product) + { + return Math.round(product.getCount() * getProductMultiplier()); + } +} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java index 22f7a0625a..48d6d470a6 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -16,9 +16,10 @@ */ package com.l2jmobius.gameserver.model.itemauction; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.idfactory.IdFactory; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; @@ -83,10 +84,10 @@ public final class AuctionItem L2World.getInstance().storeObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); - final int augmentationId = _itemExtra.getInt("augmentation_id", 0); - if (augmentationId > 0) + final Augmentation augmentation = AugmentationData.getInstance().getAugmentation(_itemExtra.getInt("augmentation_id", 0)); + if (augmentation != null) { - item.setAugmentation(new L2Augmentation(augmentationId)); + item.setAugmentation(augmentation, false); } return item; } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 88575164db..679ddd1b8f 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.ItemLocation; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2ArmorSet; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.PcCondOverride; @@ -1021,10 +1022,10 @@ public abstract class Inventory extends ItemContainer return (item != null) ? item.getVisualId() : 0; } - public int getPaperdollAugmentationId(int slot) + public Augmentation getPaperdollAugmentation(int slot) { final L2ItemInstance item = _paperdoll[slot]; - return ((item != null) && (item.getAugmentation() != null)) ? item.getAugmentation().getId() : 0; + return (item != null) ? item.getAugmentation() : null; } /** diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java index 9450e02823..8b80a1d496 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java @@ -159,50 +159,6 @@ public class PcInventory extends Inventory return list; } - /** - * Returns the list of items in inventory available for transaction Allows an item to appear twice if and only if there is a difference in enchantment level. - * @param allowAdena - * @param allowAncientAdena - * @return L2ItemInstance : items in inventory - */ - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena) - { - return getUniqueItemsByEnchantLevel(allowAdena, allowAncientAdena, true); - } - - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena, boolean onlyAvailable) - { - final Collection list = new LinkedList<>(); - for (L2ItemInstance item : _items.values()) - { - if (!allowAdena && (item.getId() == ADENA_ID)) - { - continue; - } - if (!allowAncientAdena && (item.getId() == ANCIENT_ADENA_ID)) - { - continue; - } - - boolean isDuplicate = false; - for (L2ItemInstance litem : list) - { - if ((litem.getId() == item.getId()) && (litem.getEnchantLevel() == item.getEnchantLevel())) - { - isDuplicate = true; - break; - } - } - - if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false, false)))) - { - list.add(item); - } - } - - return list; - } - /** * @param itemId * @return diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java index 49f470e282..b108dba8f0 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Objects; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.type.CrystalType; @@ -44,8 +45,7 @@ public class L2WarehouseItem private final int _locationSlot; private final int _enchant; private final CrystalType _grade; - private boolean _isAugmented; - private int _augmentationId; + private final Augmentation _augmentation; private final int _customType1; private final int _customType2; private final int _mana; @@ -81,15 +81,7 @@ public class L2WarehouseItem _customType1 = item.getCustomType1(); _customType2 = item.getCustomType2(); _grade = item.getItem().getCrystalType(); - if (item.isAugmented()) - { - _isAugmented = true; - _augmentationId = item.getAugmentation().getId(); - } - else - { - _isAugmented = false; - } + _augmentation = item.getAugmentation(); _mana = item.getMana(); _time = item.isTimeLimitedItem() ? (int) (item.getRemainingTime() / 1000) : -1; @@ -232,20 +224,12 @@ public class L2WarehouseItem return _item.getName(); } - /** - * @return {@code true} if the item is augmented, {@code false} otherwise. - */ - public boolean isAugmented() - { - return _isAugmented; - } - /** * @return the augmentation If. */ - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } /** diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java index 551733f42a..8d47089f05 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.data.xml.impl.AppearanceItemData; import com.l2jmobius.gameserver.data.xml.impl.EnchantItemOptionsData; import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.InstanceType; @@ -53,8 +54,8 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import com.l2jmobius.gameserver.instancemanager.SiegeGuardManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.DropProtection; -import com.l2jmobius.gameserver.model.L2Augmentation; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; @@ -135,7 +136,7 @@ public final class L2ItemInstance extends L2Object private boolean _wear; /** Augmented Item */ - private L2Augmentation _augmentation = null; + private Augmentation _augmentation = null; /** Shadow item */ private int _mana = -1; @@ -948,7 +949,7 @@ public final class L2ItemInstance extends L2Object * Returns the augmentation object for this item * @return augmentation */ - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } @@ -956,9 +957,10 @@ public final class L2ItemInstance extends L2Object /** * Sets a new augmentation * @param augmentation + * @param updateDatabase * @return return true if successfully */ - public boolean setAugmentation(L2Augmentation augmentation) + public boolean setAugmentation(Augmentation augmentation, boolean updateDatabase) { // there shall be no previous augmentation.. if (_augmentation != null) @@ -968,13 +970,9 @@ public final class L2ItemInstance extends L2Object } _augmentation = augmentation; - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemAttributes(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e); + updateItemOptions(); } EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); return true; @@ -991,7 +989,7 @@ public final class L2ItemInstance extends L2Object } // Copy augmentation before removing it. - final L2Augmentation augment = _augmentation; + final Augmentation augment = _augmentation; _augmentation = null; try (Connection con = DatabaseFactory.getInstance().getConnection(); @@ -1023,7 +1021,7 @@ public final class L2ItemInstance extends L2Object final int aug_attributes = rs.getInt(1); if (aug_attributes != -1) { - _augmentation = new L2Augmentation(rs.getInt("augAttributes")); + _augmentation = AugmentationData.getInstance().getAugmentation(rs.getInt("augAttributes")); } } } @@ -1048,7 +1046,19 @@ public final class L2ItemInstance extends L2Object } } - private void updateItemAttributes(Connection con) + public void updateItemOptions() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemOptions(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + toString() + " from DB:", e); + } + } + + private void updateItemOptions(Connection con) { try (PreparedStatement ps = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?)")) { @@ -1062,6 +1072,18 @@ public final class L2ItemInstance extends L2Object } } + public void updateItemElementals() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemElements(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + toString() + " from DB: ", e); + } + } + private void updateItemElements(Connection con) { try (PreparedStatement ps = con.prepareStatement("DELETE FROM item_elementals WHERE itemId = ?")) @@ -1187,17 +1209,14 @@ public final class L2ItemInstance extends L2Object /** * Add elemental attribute to item and save to db * @param holder + * @param updateDatabase */ - public void setAttribute(AttributeHolder holder) + public void setAttribute(AttributeHolder holder, boolean updateDatabase) { applyAttribute(holder); - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemElements(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + this + " from DB:", e); + updateItemElementals(); } } @@ -1646,12 +1665,16 @@ public final class L2ItemInstance extends L2Object if (_augmentation != null) { - updateItemAttributes(con); + updateItemOptions(con); } if (_elementals != null) { updateItemElements(con); } + if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) + { + updateSpecialAbilities(con); + } } catch (Exception e) { @@ -2217,10 +2240,21 @@ public final class L2ItemInstance extends L2Object } } - private void updateSpecialAbilities() + public void updateSpecialAbilities() { - try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateSpecialAbilities(con); + } + catch (Exception e) + { + LOGGER.log(Level.WARNING, "Couldn't update item special abilities", e); + } + } + + private void updateSpecialAbilities(Connection con) + { + try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); for (Entry entry : _ensoulOptions.entrySet()) diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/Entry.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/Entry.java deleted file mode 100644 index 3a54373813..0000000000 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/Entry.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author DS - */ -public class Entry -{ - protected int _entryId; - protected boolean _stackable = true; - - protected List _products; - protected List _ingredients; - - public Entry(int entryId) - { - _entryId = entryId; - _products = new ArrayList<>(); - _ingredients = new ArrayList<>(); - } - - /** - * This constructor used in PreparedEntry only, ArrayLists not created. - */ - protected Entry() - { - } - - public final void setEntryId(int id) - { - _entryId = id; - } - - public final int getEntryId() - { - return _entryId; - } - - public final void addProduct(Ingredient product) - { - _products.add(product); - - if (!product.isStackable()) - { - _stackable = false; - } - } - - public final List getProducts() - { - return _products; - } - - public final void addIngredient(Ingredient ingredient) - { - _ingredients.add(ingredient); - } - - public final List getIngredients() - { - return _ingredients; - } - - public final boolean isStackable() - { - return _stackable; - } - - public long getTaxAmount() - { - return 0; - } -} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java deleted file mode 100644 index b0dd180176..0000000000 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Item; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class Ingredient -{ - private int _itemId; - private long _itemCount; - private final int _enchantmentLevel; - private boolean _isTaxIngredient; - private boolean _maintainIngredient; - private L2Item _template = null; - private ItemInfo _itemInfo = null; - private final double _chance; - - public Ingredient(StatsSet set) - { - this(set.getInt("id"), set.getLong("count"), set.getInt("enchantmentLevel", 0), set.getDouble("chance", 0), set.getBoolean("isTaxIngredient", false), set.getBoolean("maintainIngredient", false)); - } - - public Ingredient(int itemId, long itemCount, int enchantmentLevel, double chance, boolean isTaxIngredient, boolean maintainIngredient) - { - _itemId = itemId; - _itemCount = itemCount; - _enchantmentLevel = enchantmentLevel; - _chance = chance; - _isTaxIngredient = isTaxIngredient; - _maintainIngredient = maintainIngredient; - if (_itemId > 0) - { - _template = ItemTable.getInstance().getTemplate(_itemId); - } - } - - /** - * @return a new Ingredient instance with the same values as this. - */ - public Ingredient getCopy() - { - return new Ingredient(_itemId, _itemCount, _enchantmentLevel, _chance, _isTaxIngredient, _maintainIngredient); - } - - public final L2Item getTemplate() - { - return _template; - } - - public final void setItemInfo(L2ItemInstance item) - { - _itemInfo = new ItemInfo(item); - } - - public final void setItemInfo(ItemInfo info) - { - _itemInfo = info; - } - - public final ItemInfo getItemInfo() - { - return _itemInfo; - } - - public final int getEnchantLevel() - { - return _itemInfo == null ? _enchantmentLevel : _itemInfo.getEnchantLevel(); - } - - public final void setItemId(int itemId) - { - _itemId = itemId; - } - - public final int getItemId() - { - return _itemId; - } - - public final void setItemCount(long itemCount) - { - _itemCount = itemCount; - } - - public final long getItemCount() - { - return _itemCount; - } - - public double getChance() - { - return _chance; - } - - public final void setIsTaxIngredient(boolean isTaxIngredient) - { - _isTaxIngredient = isTaxIngredient; - } - - public final boolean isTaxIngredient() - { - return _isTaxIngredient; - } - - public final void setMaintainIngredient(boolean maintainIngredient) - { - _maintainIngredient = maintainIngredient; - } - - public final boolean getMaintainIngredient() - { - return _maintainIngredient; - } - - public final boolean isStackable() - { - return (_template == null) || _template.isStackable(); - } - - public final boolean isArmorOrWeapon() - { - return (_template != null) && ((_template instanceof L2Armor) || (_template instanceof L2Weapon)); - } - - public final int getWeight() - { - return _template == null ? 0 : _template.getWeight(); - } -} diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java deleted file mode 100644 index 4658a69daf..0000000000 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.Collection; - -import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.variables.ItemVariables; - -/** - * @author DS - */ -public class ItemInfo -{ - private final int _enchantLevel, _augmentId; - private final byte _elementId; - private final int _elementPower; - private final AttributeHolder[] _attributes; - private final int _visualId; - private final int _visualStoneId; - private final long _visualIdLifetime; - private final Collection _specialAbilities; - private final Collection _additionalSpecialAbilities; - - public ItemInfo(L2ItemInstance item) - { - _enchantLevel = item.getEnchantLevel(); - _augmentId = item.getAugmentation() != null ? item.getAugmentation().getId() : 0; - _elementId = item.getAttackAttributeType().getClientId(); - _elementPower = item.getAttackAttributePower(); - _attributes = item.getAttributes() != null ? item.getAttributes().toArray(new AttributeHolder[6]) : new AttributeHolder[6]; - _visualId = item.getVisualId(); - _visualStoneId = item.getVariables().getInt(ItemVariables.VISUAL_APPEARANCE_STONE_ID, 0); - _visualIdLifetime = item.getVisualLifeTime(); - _specialAbilities = item.getSpecialAbilities(); - _additionalSpecialAbilities = item.getAdditionalSpecialAbilities(); - } - - public final int getEnchantLevel() - { - return _enchantLevel; - } - - public final int getAugmentId() - { - return _augmentId; - } - - public final byte getElementId() - { - return _elementId; - } - - public final int getElementPower() - { - return _elementPower; - } - - public final AttributeHolder[] getElementals() - { - return _attributes; - } - - public int getVisualId() - { - return _visualId; - } - - public int getVisualStoneId() - { - return _visualStoneId; - } - - public long getVisualIdLifeTime() - { - return _visualIdLifetime; - } - - public Collection getSpecialAbilities() - { - return _specialAbilities; - } - - public Collection getAdditionalSpecialAbilities() - { - return _additionalSpecialAbilities; - } -} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java deleted file mode 100644 index ce1783c276..0000000000 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * @author DS - */ -public class ListContainer -{ - private final int _listId; - private boolean _isChanceMultisell; - private boolean _applyTaxes = false; - private boolean _maintainEnchantment = false; - private double _useRate = 1.0; - - protected List _entries = new ArrayList<>(); - protected Set _npcsAllowed = null; - - public ListContainer(int listId) - { - _listId = listId; - } - - public ListContainer(ListContainer container) - { - _listId = container.getListId(); - _isChanceMultisell = container.isChanceMultisell(); - _maintainEnchantment = container.getMaintainEnchantment(); - } - - public final List getEntries() - { - return _entries; - } - - public final int getListId() - { - return _listId; - } - - public boolean isChanceMultisell() - { - return _isChanceMultisell; - } - - public void setIsChanceMultisell(boolean val) - { - _isChanceMultisell = val; - } - - public final void setApplyTaxes(boolean applyTaxes) - { - _applyTaxes = applyTaxes; - } - - public final boolean getApplyTaxes() - { - return _applyTaxes; - } - - public final void setMaintainEnchantment(boolean maintainEnchantment) - { - _maintainEnchantment = maintainEnchantment; - } - - public double getUseRate() - { - return _useRate; - } - - /** - * Set this to create multisell with increased products, all product counts will be multiplied by the rate specified.
- * NOTE: It affects only parser, it won't change values of already parsed multisell since MultiSells' parseEntry method handles this feature. - * @param rate - */ - public void setUseRate(double rate) - { - _useRate = rate; - } - - public final boolean getMaintainEnchantment() - { - return _maintainEnchantment; - } - - public void allowNpc(int npcId) - { - if (_npcsAllowed == null) - { - _npcsAllowed = new HashSet<>(); - } - _npcsAllowed.add(npcId); - } - - public boolean isNpcAllowed(int npcId) - { - return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); - } - - public boolean isNpcOnly() - { - return _npcsAllowed != null; - } -} diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java deleted file mode 100644 index 46f4aac588..0000000000 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import static com.l2jmobius.gameserver.model.itemcontainer.Inventory.ADENA_ID; - -import java.util.ArrayList; - -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class PreparedEntry extends Entry -{ - private long _taxAmount = 0; - - public PreparedEntry(Entry template, L2ItemInstance item, boolean applyTaxes, boolean maintainEnchantment, double taxRate) - { - _entryId = template.getEntryId() * 100000; - if (maintainEnchantment && (item != null)) - { - _entryId += item.getEnchantLevel(); - } - - ItemInfo info = null; - long adenaAmount = 0; - - _ingredients = new ArrayList<>(template.getIngredients().size()); - for (Ingredient ing : template.getIngredients()) - { - if (ing.getItemId() == ADENA_ID) - { - // Tax ingredients added only if taxes enabled - if (ing.isTaxIngredient()) - { - // if taxes are to be applied, modify/add the adena count based on the template adena/ancient adena count - if (applyTaxes) - { - _taxAmount += Math.round(ing.getItemCount() * taxRate); - } - } - else - { - adenaAmount += ing.getItemCount(); - } - // do not yet add this adena amount to the list as non-taxIngredient adena might be entered later (order not guaranteed) - continue; - } - if (maintainEnchantment && (item != null) && ing.isArmorOrWeapon()) - { - info = new ItemInfo(item); - final Ingredient newIngredient = ing.getCopy(); - newIngredient.setItemInfo(info); - _ingredients.add(newIngredient); - } - else - { - _ingredients.add(ing.getCopy()); - } - } - - // now add the adena, if any. - adenaAmount += _taxAmount; // do not forget tax - if (adenaAmount > 0) - { - _ingredients.add(new Ingredient(ADENA_ID, adenaAmount, 0, 0, false, false)); - } - - // now copy products - _products = new ArrayList<>(template.getProducts().size()); - for (Ingredient ing : template.getProducts()) - { - if (!ing.isStackable()) - { - _stackable = false; - } - - final Ingredient newProduct = ing.getCopy(); - if (maintainEnchantment && ing.isArmorOrWeapon()) - { - newProduct.setItemInfo(info); - } - _products.add(newProduct); - } - } - - @Override - public final long getTaxAmount() - { - return _taxAmount; - } -} diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java deleted file mode 100644 index 2e78fa3019..0000000000 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedList; - -import com.l2jmobius.gameserver.model.actor.L2Npc; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -public class PreparedListContainer extends ListContainer -{ - private int _npcObjectId = 0; - - public PreparedListContainer(ListContainer template, boolean inventoryOnly, L2PcInstance player, L2Npc npc) - { - super(template); - - setMaintainEnchantment(template.getMaintainEnchantment()); - setApplyTaxes(false); - double taxRate = 0; - if (npc != null) - { - _npcObjectId = npc.getObjectId(); - if (template.getApplyTaxes() && npc.isInTown() && (npc.getCastle().getOwnerId() > 0)) - { - setApplyTaxes(true); - taxRate = npc.getCastle().getTaxRate(); - } - } - - if (inventoryOnly) - { - if (player == null) - { - return; - } - - final Collection items; - if (getMaintainEnchantment()) - { - items = player.getInventory().getUniqueItemsByEnchantLevel(false, false, false); - } - else - { - items = player.getInventory().getUniqueItems(false, false, false); - } - - _entries = new LinkedList<>(); - for (L2ItemInstance item : items) - { - // only do the match up on equippable items that are not currently equipped - // so for each appropriate item, produce a set of entries for the multisell list. - if (!item.isEquipped() && ((item.getItem() instanceof L2Armor) || (item.getItem() instanceof L2Weapon))) - { - // loop through the entries to see which ones we wish to include - for (Entry ent : template.getEntries()) - { - // check ingredients of this entry to see if it's an entry we'd like to include. - for (Ingredient ing : ent.getIngredients()) - { - if (item.getId() == ing.getItemId()) - { - _entries.add(new PreparedEntry(ent, item, getApplyTaxes(), getMaintainEnchantment(), taxRate)); - break; // next entry - } - } - } - } - } - } - else - { - _entries = new ArrayList<>(template.getEntries().size()); - for (Entry ent : template.getEntries()) - { - _entries.add(new PreparedEntry(ent, null, getApplyTaxes(), false, taxRate)); - } - } - } - - public final boolean checkNpcObjectId(int npcObjectId) - { - return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); - } -} diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/options/Options.java index 2c24b77b7e..660c49c76e 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/options/Options.java @@ -32,12 +32,10 @@ import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime; public class Options { private final int _id; - private final List _effects = new ArrayList<>(); - - private SkillHolder _activeSkill = null; - private SkillHolder _passiveSkill = null; - - private final List _activationSkills = new ArrayList<>(); + private List _effects = null; + private List _activeSkill = null; + private List _passiveSkill = null; + private List _activationSkills = null; /** * @param id @@ -54,6 +52,10 @@ public class Options public void addEffect(AbstractEffect effect) { + if (_effects == null) + { + _effects = new ArrayList<>(); + } _effects.add(effect); } @@ -64,51 +66,62 @@ public class Options public boolean hasEffects() { - return !_effects.isEmpty(); + return _effects != null; } - public boolean hasActiveSkill() + public boolean hasActiveSkills() { return _activeSkill != null; } - public SkillHolder getActiveSkill() + public List getActiveSkills() { return _activeSkill; } - public void setActiveSkill(SkillHolder holder) + public void addActiveSkill(SkillHolder holder) { - _activeSkill = holder; + if (_activeSkill == null) + { + _activeSkill = new ArrayList<>(); + } + _activeSkill.add(holder); } - public boolean hasPassiveSkill() + public boolean hasPassiveSkills() { return _passiveSkill != null; } - public SkillHolder getPassiveSkill() + public List getPassiveSkills() { return _passiveSkill; } - public void setPassiveSkill(SkillHolder holder) + public void addPassiveSkill(SkillHolder holder) { - _passiveSkill = holder; + if (_passiveSkill == null) + { + _passiveSkill = new ArrayList<>(); + } + _passiveSkill.add(holder); } public boolean hasActivationSkills() { - return !_activationSkills.isEmpty(); + return _activationSkills != null; } public boolean hasActivationSkills(OptionsSkillType type) { - for (OptionsSkillHolder holder : _activationSkills) + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - return true; + if (holder.getSkillType() == type) + { + return true; + } } } return false; @@ -121,12 +134,15 @@ public class Options public List getActivationsSkills(OptionsSkillType type) { - final List temp = new ArrayList<>(); - for (OptionsSkillHolder holder : _activationSkills) + List temp = new ArrayList<>(); + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - temp.add(holder); + if (holder.getSkillType() == type) + { + temp.add(holder); + } } } return temp; @@ -134,6 +150,10 @@ public class Options public void addActivationSkill(OptionsSkillHolder holder) { + if (_activationSkills == null) + { + _activationSkills = new ArrayList<>(); + } _activationSkills.add(holder); } @@ -171,15 +191,21 @@ public class Options player.getEffectList().add(info); } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - addSkill(player, getActiveSkill().getSkill()); - player.sendDebugMessage("Adding active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - addSkill(player, getPassiveSkill().getSkill()); - player.sendDebugMessage("Adding passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { @@ -208,15 +234,21 @@ public class Options } } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - player.removeSkill(getActiveSkill().getSkill(), false, false); - player.sendDebugMessage("Removing active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + player.removeSkill(holder.getSkill(), false, false); + player.sendDebugMessage("Removing active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - player.removeSkill(getPassiveSkill().getSkill(), false, true); - player.sendDebugMessage("Removing passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + player.removeSkill(holder.getSkill(), false, true); + player.sendDebugMessage("Removing passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java index fd1fb41f5f..269911c172 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -59,6 +59,7 @@ public class PlayerVariables extends AbstractVariables public static final String EXTEND_DROP = "EXTEND_DROP"; public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; + public static final String DELUSION_RETURN = "DELUSION_RETURN"; private final int _objectId; diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/ZoneId.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/ZoneId.java index d3e223d4e3..41f3e41947 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/ZoneId.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/ZoneId.java @@ -37,7 +37,6 @@ public enum ZoneId NO_SUMMON_FRIEND, FORT, NO_STORE, - TOWN, SCRIPT, HQ, DANGER_AREA, @@ -47,7 +46,8 @@ public enum ZoneId NO_RESTART, SAYUNE, FISHING, - UNDYING; + UNDYING, + TAX; public static int getZoneCount() { diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java similarity index 54% rename from L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java rename to L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java index 3304f6cbe3..996f7888a2 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java @@ -1,85 +1,86 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.zone.type; - -import com.l2jmobius.gameserver.model.actor.L2Character; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.ZoneId; - -/** - * A Town zone - * @author durgus - */ -public class L2TownZone extends L2ZoneType -{ - private int _townId; - private int _taxById; - - public L2TownZone(int id) - { - super(id); - - _taxById = 0; - } - - @Override - public void setParameter(String name, String value) - { - if (name.equals("townId")) - { - _townId = Integer.parseInt(value); - } - else if (name.equals("taxById")) - { - _taxById = Integer.parseInt(value); - } - else - { - super.setParameter(name, value); - } - } - - @Override - protected void onEnter(L2Character character) - { - character.setInsideZone(ZoneId.TOWN, true); - } - - @Override - protected void onExit(L2Character character) - { - character.setInsideZone(ZoneId.TOWN, false); - } - - /** - * Returns this zones town id (if any) - * @return - */ - public int getTownId() - { - return _townId; - } - - /** - * Returns this town zones castle id - * @return - */ - public final int getTaxById() - { - return _taxById; - } -} +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.zone.type; + +import com.l2jmobius.gameserver.instancemanager.CastleManager; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.entity.Castle; +import com.l2jmobius.gameserver.model.zone.L2ZoneType; +import com.l2jmobius.gameserver.model.zone.ZoneId; + +/** + * Tax zone type. + * @author malyelfik + */ +public class L2TaxZone extends L2ZoneType +{ + private int _domainId; + private Castle _castle; + + public L2TaxZone(int id) + { + super(id); + } + + @Override + public void setParameter(String name, String value) + { + if (name.equalsIgnoreCase("domainId")) + { + _domainId = Integer.parseInt(value); + } + else + { + super.setParameter(name, value); + } + } + + @Override + protected void onEnter(L2Character character) + { + character.setInsideZone(ZoneId.TAX, true); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(this); + } + } + + @Override + protected void onExit(L2Character character) + { + character.setInsideZone(ZoneId.TAX, false); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(null); + } + } + + /** + * Gets castle associated with tax zone.
+ * @return instance of {@link Castle} if found otherwise {@code null} + */ + public Castle getCastle() + { + // Lazy loading is used because zone is loaded before residence + if (_castle == null) + { + _castle = CastleManager.getInstance().getCastleById(_domainId); + } + return _castle; + } +} diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java index 05d5921904..febb0c0f84 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java @@ -16,31 +16,39 @@ */ package com.l2jmobius.gameserver.network.clientpackets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedHashMap; +import java.util.Collections; +import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.Map.Entry; +import java.util.OptionalLong; +import java.util.stream.Collectors; -import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.commons.util.Rnd; +import com.l2jmobius.commons.util.CommonUtil; +import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; import com.l2jmobius.gameserver.data.xml.impl.MultisellData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.enums.SpecialItemType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.model.variables.ItemVariables; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; +import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import com.l2jmobius.gameserver.network.serverpackets.UserInfo; /** * The Class MultiSellChoose. @@ -50,6 +58,19 @@ public class MultiSellChoose implements IClientIncomingPacket private int _listId; private int _entryId; private long _amount; + private int _enchantLevel; + private int _augmentOption1; + private int _augmentOption2; + private short _attackAttribute; + private short _attributePower; + private short _fireDefence; + private short _waterDefence; + private short _windDefence; + private short _earthDefence; + private short _holyDefence; + private short _darkDefence; + private EnsoulOption[] _soulCrystalOptions; + private EnsoulOption[] _soulCrystalSpecialOptions; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -57,17 +78,29 @@ public class MultiSellChoose implements IClientIncomingPacket _listId = packet.readD(); _entryId = packet.readD(); _amount = packet.readQ(); - // _unk1 = packet.readH(); - // _unk2 = packet.readD(); - // _unk3 = packet.readD(); - // _unk4 = packet.readH(); // elemental attributes - // _unk5 = packet.readH(); // elemental attributes - // _unk6 = packet.readH(); // elemental attributes - // _unk7 = packet.readH(); // elemental attributes - // _unk8 = packet.readH(); // elemental attributes - // _unk9 = packet.readH(); // elemental attributes - // _unk10 = packet.readH(); // elemental attributes - // _unk11 = packet.readH(); // elemental attributes + _enchantLevel = packet.readH(); + _augmentOption1 = packet.readD(); + _augmentOption2 = packet.readD(); + _attackAttribute = (short) packet.readH(); + _attributePower = (short) packet.readH(); + _fireDefence = (short) packet.readH(); + _waterDefence = (short) packet.readH(); + _windDefence = (short) packet.readH(); + _earthDefence = (short) packet.readH(); + _holyDefence = (short) packet.readH(); + _darkDefence = (short) packet.readH(); + _soulCrystalOptions = new EnsoulOption[packet.readC()]; // Ensoul size + for (int i = 0; i < _soulCrystalOptions.length; i++) + { + final int ensoulId = packet.readD(); // Ensoul option id + _soulCrystalOptions[i] = EnsoulData.getInstance().getOption(ensoulId); + } + _soulCrystalSpecialOptions = new EnsoulOption[packet.readC()]; // Special ensoul size + for (int i = 0; i < _soulCrystalSpecialOptions.length; i++) + { + final int ensoulId = packet.readD(); // Special ensoul option id. + _soulCrystalSpecialOptions[i] = EnsoulData.getInstance().getOption(ensoulId); + } return true; } @@ -86,411 +119,471 @@ public class MultiSellChoose implements IClientIncomingPacket return; } - if ((_amount < 1) || (_amount > 5000)) + if ((_amount < 1) || (_amount > 999999)) // 999 999 is client max. { - player.setMultiSell(null); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); return; } - final PreparedListContainer list = player.getMultiSell(); - if ((list == null) || (list.getListId() != _listId)) + PreparedMultisellListHolder list = player.getMultiSell(); + if ((list == null) || (list.getId() != _listId)) { player.setMultiSell(null); return; } final L2Npc npc = player.getLastFolkNPC(); - if (!list.isNpcAllowed(-1) && !isAllowedToUse(player, npc, list)) + if (!isAllowedToUse(player, npc, list)) { + if (player.isGM()) + { + player.sendMessage("Multisell " + _listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + player.setMultiSell(null); + return; + } + } + + if (((_soulCrystalOptions != null) && CommonUtil.contains(_soulCrystalOptions, null)) || ((_soulCrystalSpecialOptions != null) && CommonUtil.contains(_soulCrystalSpecialOptions, null))) + { + _log.severe("Character: " + player.getName() + " requested multisell entry with invalid soul crystal options. Multisell: " + _listId + " entry: " + _entryId); player.setMultiSell(null); return; } - for (Entry entry : list.getEntries()) + final MultisellEntryHolder entry = list.getEntries().get(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + if (entry == null) { - if (entry.getEntryId() == _entryId) + _log.severe("Character: " + player.getName() + " requested inexistant prepared multisell entry. Multisell: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + if (!entry.isStackable() && (_amount > 1)) + { + _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final ItemInfo itemEnchantment = list.getItemEnchantment(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + + // Validate the requested item with its full stats. + //@formatter:off + if ((itemEnchantment != null) && ((_amount > 1) + || (itemEnchantment.getEnchantLevel() != _enchantLevel) + || (itemEnchantment.getAttackElementType() != _attackAttribute) + || (itemEnchantment.getAttackElementPower() != _attributePower) + || (itemEnchantment.getAttributeDefence(AttributeType.FIRE) != _fireDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WATER) != _waterDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WIND) != _windDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.EARTH) != _earthDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.HOLY) != _holyDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.DARK) != _darkDefence) + || ((itemEnchantment.getAugmentation() == null) && ((_augmentOption1 != 0) || (_augmentOption2 != 0))) + || ((itemEnchantment.getAugmentation() != null) && ((itemEnchantment.getAugmentation().getOptionId(0) != _augmentOption1) || (itemEnchantment.getAugmentation().getOptionId(1) != _augmentOption2))) + || ((_soulCrystalOptions != null) && itemEnchantment.getSoulCrystalOptions().stream().anyMatch(e -> !CommonUtil.contains(_soulCrystalOptions, e))) + || ((_soulCrystalOptions == null) && !itemEnchantment.getSoulCrystalOptions().isEmpty()) + || ((_soulCrystalSpecialOptions != null) && itemEnchantment.getSoulCrystalOptions().stream().anyMatch(e -> !CommonUtil.contains(_soulCrystalSpecialOptions, e))) + || ((_soulCrystalSpecialOptions == null) && !itemEnchantment.getSoulCrystalSpecialOptions().isEmpty()) + )) + //@formatter:on + { + _log.severe("Character: " + player.getName() + " is trying to upgrade equippable item, but the stats doesn't match. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final L2Clan clan = player.getClan(); + final PcInventory inventory = player.getInventory(); + + try + { + int slots = 0; + int weight = 0; + for (ItemChanceHolder product : entry.getProducts()) { - if (!entry.isStackable() && (_amount > 1)) + if (product.getId() < 0) + { + // Check if clan exists for clan reputation products. + if ((clan == null) && (SpecialItemType.CLAN_REPUTATION.getClientId() == product.getId())) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return; + } + + continue; + } + + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + if (template == null) { - _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell, id:" + _listId + ":" + _entryId); player.setMultiSell(null); return; } - final PcInventory inv = player.getInventory(); + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); - int slots = 0; - int weight = 0; - for (Ingredient e : entry.getProducts()) + if (!(totalCount >= 0) && (totalCount <= Integer.MAX_VALUE)) { - if (e.getItemId() < 0) - { - continue; - } - - if (!e.isStackable()) - { - slots += e.getItemCount() * _amount; - } - else if (player.getInventory().getItemByItemId(e.getItemId()) == null) - { - slots++; - } - weight += e.getItemCount() * _amount * e.getWeight(); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; } - if (!inv.validateWeight(weight)) + if (!template.isStackable() || (player.getInventory().getItemByItemId(product.getId()) == null)) + { + slots++; + } + + weight += totalCount * template.getWeight(); + + if (!inventory.validateWeight(weight)) { player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_WEIGHT_LIMIT); return; } - if (!inv.validateCapacity(slots)) + if ((slots > 0) && !inventory.validateCapacity(slots)) { player.sendPacket(SystemMessageId.YOUR_INVENTORY_IS_FULL); return; } - final ArrayList ingredientsList = new ArrayList<>(entry.getIngredients().size()); - // Generate a list of distinct ingredients and counts in order to check if the correct item-counts are possessed by the player - boolean newIng; - for (Ingredient e : entry.getIngredients()) + // If this is a chance multisell, reset slots and weight because only one item should be seleted. We just need to check if conditions for every item is met. + if (list.isChanceMultisell()) { - newIng = true; - // at this point, the template has already been modified so that enchantments are properly included - // whenever they need to be applied. Uniqueness of items is thus judged by item id AND enchantment level - for (int i = ingredientsList.size(); --i >= 0;) + slots = 0; + weight = 0; + } + } + + // Check for enchanted item if its present in the inventory. + if ((itemEnchantment != null) && (inventory.getItemByObjectId(itemEnchantment.getObjectId()) == null)) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(itemEnchantment.getItem().getId()); + player.sendPacket(sm); + return; + } + + // Summarize all item counts into one map. That would include non-stackable items under 1 id and multiple count. + final Map itemIdCount = entry.getIngredients().stream().collect(Collectors.toMap(i -> i.getId(), i -> list.getIngredientCount(i), (k1, k2) -> Math.addExact(k1, k2))); + + // Now check if the player has sufficient items in the inventory to cover the ingredients' expences. Take care for non-stackable items like 2 swords to dual. + boolean allOk = true; + for (Entry idCount : itemIdCount.entrySet()) + { + allOk &= checkIngredients(player, list, inventory, clan, idCount.getKey(), Math.multiplyExact(idCount.getValue(), _amount)); + } + + // The above operation should not be short-circuited, in order to show all missing ingredients. + if (!allOk) + { + return; + } + + final InventoryUpdate iu = new InventoryUpdate(); + boolean itemEnchantmentProcessed = (itemEnchantment == null); + + // Take all ingredients + for (ItemHolder ingredient : entry.getIngredients()) + { + final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId()); + if (specialItem != null) + { + // Take special item. + switch (specialItem) { - final Ingredient ex = ingredientsList.get(i); - // if the item was already added in the list, merely increment the count - // this happens if 1 list entry has the same ingredient twice (example 2 swords = 1 dual) - if ((ex.getItemId() == e.getItemId()) && (ex.getEnchantLevel() == e.getEnchantLevel())) + case CLAN_REPUTATION: { - if ((ex.getItemCount() + e.getItemCount()) > Integer.MAX_VALUE) + if (clan != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); - return; + clan.takeReputationScore((int) totalCount, true); + SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); + smsg.addLong(totalCount); + player.sendPacket(smsg); } - // two same ingredients, merge into one and replace old - final Ingredient ing = ex.getCopy(); - ing.setItemCount(ex.getItemCount() + e.getItemCount()); - ingredientsList.set(i, ing); - newIng = false; break; } - } - if (newIng) - { - // if it's a new ingredient, just store its info directly (item id, count, enchantment) - ingredientsList.add(e); + case FAME: + { + player.setFame(player.getFame() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.setRaidbossPoints(player.getRaidbossPoints() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(totalCount)); + break; + } + case PC_CAFE_POINTS: + { + player.setPcCafePoints((int) (player.getPcCafePoints() - totalCount)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special ingredient with id: " + ingredient.getId() + "."); + return; + } } } - - // now check if the player has sufficient items in the inventory to cover the ingredient expenses - for (Ingredient e : ingredientsList) + else if (!itemEnchantmentProcessed && (itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) { - if ((e.getItemCount() * _amount) > Integer.MAX_VALUE) + // Take the enchanted item. + final L2ItemInstance destroyedItem = inventory.destroyItem("Multisell", itemEnchantment.getObjectId(), totalCount, player, npc); + if (destroyedItem != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + itemEnchantmentProcessed = true; + iu.addItem(destroyedItem); + } + else + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(ingredient.getId()); + player.sendPacket(sm); return; } - if (e.getItemId() < 0) + } + else + { + // Take a regular item. + final L2ItemInstance destroyedItem = inventory.destroyItemByItemId("Multisell", ingredient.getId(), totalCount, player, npc); + if (destroyedItem != null) { - if (!MultisellData.hasSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) - { - return; - } + iu.addItem(destroyedItem); } else { - // if this is not a list that maintains enchantment, check the count of all items that have the given id. - // otherwise, check only the count of items with exactly the needed enchantment level - final long required = (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount(); - if (inv.getInventoryItemCount(e.getItemId(), (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) ? e.getEnchantLevel() : -1, false) < required) + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredient.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + return; + } + } + } + + // Generate the appropriate items + List products = entry.getProducts(); + if (list.isChanceMultisell()) + { + final ItemChanceHolder randomProduct = ItemChanceHolder.getRandomHolder(entry.getProducts()); + products = randomProduct != null ? Collections.singletonList(randomProduct) : Collections.emptyList(); + } + + for (ItemChanceHolder product : products) + { + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(product.getId()); + if (specialItem != null) + { + // Give special item. + switch (specialItem) + { + case CLAN_REPUTATION: { - if (e.getEnchantLevel() > 0) + if (clan != null) { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addString("+" + e.getEnchantLevel() + " " + e.getTemplate().getName()); - sm.addLong(required); - player.sendPacket(sm); - } - else - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addItemName(e.getTemplate()); - sm.addLong(required); - player.sendPacket(sm); + clan.addReputationScore((int) totalCount, true); } + break; + } + case FAME: + { + player.setFame((int) (player.getFame() + totalCount)); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.increaseRaidbossPoints((int) totalCount); + player.sendPacket(new UserInfo(player)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special product with id: " + product.getId() + "."); return; } } } - - final Map originalInfos = new LinkedHashMap<>(); - /** All ok, remove items and add final product */ - - for (Ingredient e : entry.getIngredients()) + else { - if (e.getItemId() < 0) + // Give item. + final L2ItemInstance addedItem = inventory.addItem("Multisell", product.getId(), totalCount, player, npc); + iu.addItem(addedItem); + + // Check if the newly given item should be enchanted. + if (itemEnchantmentProcessed && list.isMaintainEnchantment() && (itemEnchantment != null) && addedItem.isEquipable() && addedItem.getItem().getClass().equals(itemEnchantment.getItem().getClass())) { - if (!MultisellData.takeSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) + addedItem.setEnchantLevel(itemEnchantment.getEnchantLevel()); + addedItem.setAugmentation(itemEnchantment.getAugmentation(), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.findByClientId(itemEnchantment.getAttackElementType()), itemEnchantment.getAttackElementPower()), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.FIRE, itemEnchantment.getAttributeDefence(AttributeType.FIRE)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WATER, itemEnchantment.getAttributeDefence(AttributeType.WATER)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WIND, itemEnchantment.getAttributeDefence(AttributeType.WIND)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.EARTH, itemEnchantment.getAttributeDefence(AttributeType.EARTH)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.HOLY, itemEnchantment.getAttributeDefence(AttributeType.HOLY)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.DARK, itemEnchantment.getAttributeDefence(AttributeType.DARK)), false); + if (_soulCrystalOptions != null) { - return; - } - } - else - { - L2ItemInstance itemToTake = inv.getItemByItemId(e.getItemId()); // initialize and initial guess for the item to take. - if (itemToTake == null) - { // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - _log.severe("Character: " + player.getName() + " is trying to cheat in multisell, id:" + _listId + ":" + _entryId); - player.setMultiSell(null); - return; - } - - // if (itemToTake.isEquipped()) - // { - // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - // LOGGER.severe("Character: " + player.getName() + " is trying to cheat in multisell, exchanging equipped item, merchatnt id:" + merchant.getNpcId()); - // player.setMultiSell(null); - // return; - // } - - if (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) - { - // if it's a stackable item, just reduce the amount from the first (only) instance that is found in the inventory - if (itemToTake.isStackable()) + for (int i = 0; i < _soulCrystalOptions.length; i++) { - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), e.getItemCount() * _amount, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - else - { - // for non-stackable items, one of two scenaria are possible: - // a) list maintains enchantment: get the instances that exactly match the requested enchantment level - // b) list does not maintain enchantment: get the instances with the LOWEST enchantment level - - // a) if enchantment is maintained, then get a list of items that exactly match this enchantment - if (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) - { - // loop through this list and remove (one by one) each item until the required amount is taken. - final L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), e.getEnchantLevel(), false).toArray(new L2ItemInstance[0]); - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - originalInfos.put(i, new ItemInfo(inventoryContents[i])); - if (!player.destroyItem("Multisell", inventoryContents[i].getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } - else - // b) enchantment is not maintained. Get the instances with the LOWEST enchantment level - { - // NOTE: There are 2 ways to achieve the above goal. - // 1) Get all items that have the correct itemId, loop through them until the lowest enchantment - // level is found. Repeat all this for the next item until proper count of items is reached. - // 2) Get all items that have the correct itemId, sort them once based on enchantment level, - // and get the range of items that is necessary. - // Method 1 is faster for a small number of items to be exchanged. - // Method 2 is faster for large amounts. - // - // EXPLANATION: - // Worst case scenario for algorithm 1 will make it run in a number of cycles given by: - // m*(2n-m+1)/2 where m is the number of items to be exchanged and n is the total - // number of inventory items that have a matching id. - // With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle - // for case b (just grab the m first items) or in linear time for case a (find the beginning of items - // with correct enchantment, index x, and take all items from x to x+m). - // Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 > - // (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) + log(n/n*n) = - // nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n) - // So for m < log(n) then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n) - // - // IDEALLY: - // In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n - // if ( (2<<(e.getItemCount()// _amount)) < inventoryContents.length ) - // // do Algorithm 1, no sorting - // else - // // do Algorithm 2, sorting - // - // CURRENT IMPLEMENTATION: - // In general, it is going to be very rare for a person to do a massive exchange of non-stackable items - // For this reason, we assume that algorithm 1 will always suffice and we keep things simple. - // If, in the future, it becomes necessary that we optimize, the above discussion should make it clear - // what optimization exactly is necessary (based on the comments under "IDEALLY"). - // - - // choice 1. Small number of items exchanged. No sorting. - for (int i = 1; i <= (e.getItemCount() * _amount); i++) - { - final Collection inventoryContents = inv.getAllItemsByItemId(e.getItemId(), false); - - itemToTake = inventoryContents.iterator().next(); - // get item with the LOWEST enchantment level from the inventory... - // +0 is lowest by default... - if (itemToTake.getEnchantLevel() > 0) - { - for (L2ItemInstance item : inventoryContents) - { - if ((item.getEnchantLevel() < itemToTake.getEnchantLevel()) && (item.getEnchantLevel() >= e.getEnchantLevel())) - { - itemToTake = item; - // nothing will have enchantment less than 0. If a zero-enchanted - // item is found, just take it - if (itemToTake.getEnchantLevel() == 0) - { - break; - } - } - } - } - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } + addedItem.addSpecialAbility(_soulCrystalOptions[i], i + 1, 1, false); } } - } - } - - final double itemRandom = 100 * Rnd.nextDouble(); - float cumulativeChance = 0; - - boolean matched = false; - // Generate the appropriate items - for (Ingredient e : entry.getProducts()) - { - if (list.isChanceMultisell()) - { - // Skip first entry. - if (e.getChance() < 1) + if (_soulCrystalSpecialOptions != null) { - continue; + for (int i = 0; i < _soulCrystalSpecialOptions.length; i++) + { + addedItem.addSpecialAbility(_soulCrystalSpecialOptions[i], i + 1, 2, false); + } } - // Calculate chance - matched = itemRandom < (cumulativeChance += e.getChance()); - if (!matched) - { - continue; - } + addedItem.updateDatabase(); + + // Mark that we have already upgraded the item. + itemEnchantmentProcessed = false; } - if (e.getItemId() < 0) + if (addedItem.getCount() > 1) { - MultisellData.giveSpecialProduct(e.getItemId(), e.getItemCount() * _amount, player); + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); + sm.addItemName(addedItem.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + } + else if (addedItem.getEnchantLevel() > 0) + { + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); + sm.addLong(addedItem.getEnchantLevel()); + sm.addItemName(addedItem.getId()); + player.sendPacket(sm); } else { - if (e.isStackable()) - { - inv.addItem("Multisell", e.getItemId(), e.getItemCount() * _amount, player, player.getTarget()); - } - else - { - L2ItemInstance product = null; - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - product = inv.addItem("Multisell", e.getItemId(), 1, player, player.getTarget()); - if ((product != null) && (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0))) - { - final ItemInfo info = originalInfos.get(i); - if (info != null) - { - if (info.getAugmentId() > 0) - { - product.setAugmentation(new L2Augmentation(info.getAugmentId())); - } - if (info.getElementals().length > 0) - { - Arrays.stream(info.getElementals()).filter(Objects::nonNull).forEach(product::setAttribute); - } - if (info.getVisualId() > 0) - { - product.setVisualId(info.getVisualId()); - if (info.getVisualStoneId() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_STONE_ID, info.getVisualStoneId()); - } - if (info.getVisualIdLifeTime() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_LIFE_TIME, info.getVisualIdLifeTime()); - product.scheduleVisualLifeTime(); - } - } - if (!info.getSpecialAbilities().isEmpty()) - { - int position = 0; - for (EnsoulOption option : info.getSpecialAbilities()) - { - product.addSpecialAbility(option, position++, 1, true); - } - } - if (!info.getAdditionalSpecialAbilities().isEmpty()) - { - int position = 0; - for (EnsoulOption option : info.getAdditionalSpecialAbilities()) - { - product.addSpecialAbility(option, position++, 2, true); - } - } - } - product.setEnchantLevel(e.getEnchantLevel()); - product.updateDatabase(); - } - } - } - - final SystemMessage sm; - if ((e.getItemCount() * _amount) > 1) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); - sm.addItemName(e.getItemId()); - sm.addLong(e.getItemCount() * _amount); - player.sendPacket(sm); - } - else - { - if (list.getMaintainEnchantment() && (e.getEnchantLevel() > 0)) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); - sm.addLong(e.getEnchantLevel()); - sm.addItemName(e.getItemId()); - } - else - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); - sm.addItemName(e.getItemId()); - } - player.sendPacket(sm); - } - } - - if (matched) - { - break; + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); + sm.addItemName(addedItem); + player.sendPacket(sm); } } - player.sendItemList(false); - - // finally, give the tax to the castle... - if ((npc != null) && (entry.getTaxAmount() > 0)) + } + + // Update inventory and weight. + player.sendInventoryUpdate(iu); + + // finally, give the tax to the castle... + if ((npc != null) && list.isApplyTaxes()) + { + final OptionalLong taxPaid = entry.getIngredients().stream().filter(i -> i.getId() == Inventory.ADENA_ID).mapToLong(i -> Math.round(i.getCount() * list.getIngredientMultiplier() * list.getTaxRate()) * _amount).reduce(Math::multiplyExact); + if (taxPaid.isPresent()) { - npc.getCastle().addToTreasury(entry.getTaxAmount() * _amount); + npc.handleTaxPayment(taxPaid.getAsLong()); } - - break; } } + catch (ArithmeticException ae) + { + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; + } + + // Re-send multisell after successful exchange of inventory-only shown items. + if (list.isInventoryOnly()) + { + MultisellData.getInstance().separateAndSend(list.getId(), player, npc, list.isInventoryOnly(), list.getProductMultiplier(), list.getIngredientMultiplier()); + } + } + + /** + * @param player + * @param list + * @param inventory + * @param clan + * @param ingredientId + * @param totalCount + * @return {@code false} if ingredient amount is not enough, {@code true} otherwise. + */ + private boolean checkIngredients(final L2PcInstance player, PreparedMultisellListHolder list, final PcInventory inventory, final L2Clan clan, final int ingredientId, final long totalCount) + { + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredientId); + if (specialItem != null) + { + // Check special item. + switch (specialItem) + { + case CLAN_REPUTATION: + { + if (clan == null) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return false; + } + else if (!player.isClanLeader()) + { + player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); + return false; + } + else if (clan.getReputationScore() < totalCount) + { + player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); + return false; + } + return true; + } + case FAME: + { + if (player.getFame() < totalCount) + { + player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); + return false; + } + return true; + } + case RAIDBOSS_POINTS: + { + if (player.getRaidbossPoints() < totalCount) + { + player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); + return false; + } + return true; + } + case PC_CAFE_POINTS: + { + if (player.getPcCafePoints() < totalCount) + { + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); + return false; + } + return true; + } + default: + { + _log.severe("Multisell: " + _listId + " is using a non-implemented special ingredient with id: " + ingredientId + "."); + return false; + } + } + } + // Check if the necessary items are there. If list maintains enchantment, allow all enchanted items, otherwise only unenchanted. TODO: Check how retail does it. + else if (inventory.getInventoryItemCount(ingredientId, list.isMaintainEnchantment() ? -1 : 0, false) < totalCount) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredientId); + sm.addLong(totalCount); + player.sendPacket(sm); + return false; + } + + return true; } /** @@ -499,7 +592,7 @@ public class MultiSellChoose implements IClientIncomingPacket * @param list * @return {@code true} if player can buy stuff from the multisell, {@code false} otherwise. */ - private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedListContainer list) + private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedMultisellListHolder list) { if (npc != null) { @@ -507,7 +600,7 @@ public class MultiSellChoose implements IClientIncomingPacket { return false; } - else if (list.isNpcOnly() && ((npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) + else if (list.isNpcOnly() && (!list.checkNpcObjectId(npc.getObjectId()) || (npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) { return false; } @@ -518,4 +611,4 @@ public class MultiSellChoose implements IClientIncomingPacket } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java index 80f66487bd..df1cc723fd 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java @@ -29,8 +29,8 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -110,7 +110,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - merchant = (L2MerchantInstance) target; + merchant = (L2MerchantInstance) target; // FIXME: Doesn't work for GMs. } if ((merchant == null) && !player.isGM() && (_listId != CUSTOM_CB_SELL_LIST)) @@ -119,7 +119,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -134,7 +134,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - castleTaxRate = merchant.getTotalTaxRate(TaxType.BUY); + castleTaxRate = merchant.getCastleTaxRate(TaxType.BUY); } long subTotal = 0; @@ -159,11 +159,6 @@ public final class RequestBuyItem implements IClientIncomingPacket } long price = product.getPrice(); - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - price *= Config.RATE_SIEGE_GUARDS_PRICE; - } - if (price < 0) { _log.warning("ERROR, no price found .. wrong buylist ??"); @@ -194,7 +189,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } // first calculate price per item with tax, then multiply by count - price = (long) (price * (1 + castleTaxRate)); + price = (long) (price * (1 + castleTaxRate + product.getBaseTaxRate())); subTotal += i.getCount() * price; if (subTotal > MAX_ADENA) { @@ -257,7 +252,7 @@ public final class RequestBuyItem implements IClientIncomingPacket // add to castle treasury if (merchant != null) { - merchant.getCastle().addToTreasury((long) (subTotal * castleTaxRate)); + merchant.handleTaxPayment((long) (subTotal * castleTaxRate)); } client.sendPacket(new ExUserInfoInvenWeight(player)); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index f942ddc681..afbf88a5b9 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -202,6 +202,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket } } + item.updateItemElementals(); player.destroyItem("AttrEnchant", stone, usedStones, player, true); final AttributeHolder newElement = item.getAttribute(elementToAdd); final int newValue = newElement != null ? newElement.getValue() : 0; @@ -350,7 +351,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket if (success) { - item.setAttribute(new AttributeHolder(elementToAdd, newPower)); + item.setAttribute(new AttributeHolder(elementToAdd, newPower), false); } return success ? 1 : 0; diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java index c1db83f07e..7fb3de5cb4 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.buylist.Product; import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.items.L2Armor; @@ -157,7 +157,7 @@ public final class RequestPreviewItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(activeChar, "Warning!! Character " + activeChar.getName() + " of account " + activeChar.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index a30ac40863..0007b7ffb0 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -18,7 +18,7 @@ package com.l2jmobius.gameserver.network.clientpackets; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.datatables.AugmentationData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -118,12 +118,10 @@ public final class RequestRefine extends AbstractRefinePacket return; } - final L2Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); - targetItem.setAugmentation(aug); + final Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); + targetItem.setAugmentation(aug, true); - final int stat12 = 0x0000FFFF & aug.getId(); - final int stat34 = aug.getId() >> 16; - activeChar.sendPacket(new ExVariationResult(stat12, stat34, 1)); + activeChar.sendPacket(new ExVariationResult(aug.getOptionId(0), aug.getOptionId(1), 1)); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(targetItem); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java index 3cc8f4c564..9ab82245e8 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java @@ -21,11 +21,10 @@ import static com.l2jmobius.gameserver.model.actor.L2Npc.INTERACTION_DISTANCE; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; -import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -79,13 +78,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - if (_items == null) - { - client.sendPacket(ActionFailed.STATIC_PACKET); - return; - } - - if (!player.hasRefund()) + if ((_items == null) || !player.hasRefund()) { client.sendPacket(ActionFailed.STATIC_PACKET); return; @@ -109,7 +102,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -164,12 +157,7 @@ public final class RequestRefundItem implements IClientIncomingPacket final long count = item.getCount(); weight += count * template.getWeight(); - long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } - adena += price * count; + adena += (count * template.getReferencePrice()) / 2; if (!template.isStackable()) { slots += count; @@ -213,6 +201,6 @@ public final class RequestRefundItem implements IClientIncomingPacket // Update current load status on player client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java index e6538867b5..92704fff45 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.UniqueItemHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -129,7 +129,7 @@ public final class RequestSellItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -153,10 +153,6 @@ public final class RequestSellItem implements IClientIncomingPacket } long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } totalPrice += price * i.getCount(); if (((MAX_ADENA / i.getCount()) < price) || (totalPrice > MAX_ADENA)) { @@ -166,25 +162,27 @@ public final class RequestSellItem implements IClientIncomingPacket if (Config.ALLOW_REFUND) { - item = player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); + player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); } else { - item = player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); + player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); } } + // add to castle treasury + if (merchant != null) + { + // Keep here same formula as in {@link ExBuySellList} to produce same result. + final long profit = (long) (totalPrice * (1.0 - merchant.getCastleTaxRate(TaxType.SELL))); + merchant.handleTaxPayment(totalPrice - profit); + totalPrice = profit; + } + player.addAdena("Sell", totalPrice, merchant, false); - // add to castle treasury? - if (merchant != null) - { - final long taxCollection = (long) (totalPrice * (1.0 - merchant.getTotalTaxRate(TaxType.SELL))); - merchant.getCastle().addToTreasury(taxCollection); - } - // Update current load as well client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java index b8d4e6101b..ae8b7753d1 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java @@ -75,7 +75,7 @@ public class RequestChangeAttributeItem implements IClientIncomingPacket final int oldElementId = item.getAttackAttributeType().getClientId(); final int elementValue = item.getAttackAttribute().getValue(); item.clearAllAttributes(); - item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue)); + item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue), true); // send packets final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_S_S2_ATTRIBUTE_HAS_SUCCESSFULLY_CHANGED_TO_S3_ATTRIBUTE); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java index b53abd0918..d03199cbbb 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java @@ -17,6 +17,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.ItemListType; import com.l2jmobius.gameserver.model.ItemInfo; import com.l2jmobius.gameserver.model.TradeItem; @@ -75,15 +76,14 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket 0) + if (item.getAugmentation() != null) { mask |= ItemListType.AUGMENT_BONUS.getMask(); } - if (item.getAttackElementType() >= 0) + if ((item.getAttackElementType() >= 0) || (item.getAttributeDefence(AttributeType.FIRE) > 0) || (item.getAttributeDefence(AttributeType.WATER) > 0) || (item.getAttributeDefence(AttributeType.WIND) > 0) || (item.getAttributeDefence(AttributeType.EARTH) > 0) || (item.getAttributeDefence(AttributeType.HOLY) > 0) || (item.getAttributeDefence(AttributeType.DARK) > 0)) { mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); } - else - { - for (byte i = 0; i < 6; i++) - { - if (item.getElementDefAttr(i) > 0) - { - mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); - break; - } - } - } if (item.getEnchantOptions() != null) { @@ -162,6 +141,20 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket _list; private final long _money; - private double _taxRate = 0; + private final int _inventorySlots; + private final double _castleTaxRate; - public BuyList(L2BuyList list, long currentMoney, double taxRate) + public BuyList(ProductList list, L2PcInstance player, double castleTaxRate) { _listId = list.getListId(); _list = list.getProducts(); - _money = currentMoney; - _taxRate = taxRate; + _money = player.getAdena(); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); + _castleTaxRate = castleTaxRate; } @Override @@ -47,23 +49,14 @@ public final class BuyList extends AbstractItemPacket packet.writeD(0x00); // Type BUY packet.writeQ(_money); // current money packet.writeD(_listId); - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); packet.writeH(_list.size()); - for (Product product : _list) { if ((product.getCount() > 0) || !product.hasLimitedStock()) { writeItem(packet, product); - - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - packet.writeQ((long) (product.getPrice() * Config.RATE_SIEGE_GUARDS_PRICE * (1 + _taxRate))); - } - else - { - packet.writeQ((long) (product.getPrice() * (1 + _taxRate))); - } + packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate()))); } } return true; diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java index 9b55dceadd..162359aca0 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java @@ -21,6 +21,7 @@ import java.util.Set; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2DecoyInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent; @@ -133,7 +134,9 @@ public class CharInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrderAugument()) { - packet.writeQ(_activeChar.getInventory().getPaperdollAugmentationId(slot)); // Confirmed + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_armorEnchant); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java index ecd9dde18c..3b46eb9e3a 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java @@ -29,6 +29,7 @@ import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.entity.Hero; @@ -191,7 +192,8 @@ public class CharSelectionInfo implements IClientOutgoingPacket packet.writeD(i == _activeId ? 1 : 0); packet.writeC(charInfoPackage.getEnchantEffect() > 127 ? 127 : charInfoPackage.getEnchantEffect()); - packet.writeQ(charInfoPackage.getAugmentationId()); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(0) : 0); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(1) : 0); // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. @@ -365,7 +367,10 @@ public class CharSelectionInfo implements IClientOutgoingPacket if (result.next()) { final int augment = result.getInt("augAttributes"); - charInfopackage.setAugmentationId(augment == -1 ? 0 : augment); + if (augment > 0) + { + charInfopackage.setAugmentation(AugmentationData.getInstance().getAugmentation(augment)); + } } } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java index f793112067..547f24c351 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import java.util.Collection; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.model.actor.L2Summon; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -28,14 +29,17 @@ import com.l2jmobius.gameserver.network.OutgoingPackets; */ public class ExBuySellList extends AbstractItemPacket { - private Collection _sellList = null; + private Collection _sellList; private Collection _refundList = null; private final boolean _done; - private double _taxRate = 1; + private final int _inventorySlots; + private double _castleTaxRate = 1; public ExBuySellList(L2PcInstance player, boolean done) { - _sellList = player.getInventory().getAvailableItems(false, false, false); + final L2Summon pet = player.getPet(); + _sellList = player.getInventory().getItems(item -> !item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); if (player.hasRefund()) { _refundList = player.getRefund().getItems(); @@ -43,10 +47,10 @@ public class ExBuySellList extends AbstractItemPacket _done = done; } - public ExBuySellList(L2PcInstance player, boolean done, double taxRate) + public ExBuySellList(L2PcInstance player, boolean done, double castleTaxRate) { this(player, done); - _taxRate = 1 - taxRate; + _castleTaxRate = 1 - castleTaxRate; } @Override @@ -55,7 +59,7 @@ public class ExBuySellList extends AbstractItemPacket OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet); packet.writeD(0x01); // Type SELL - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); if ((_sellList != null)) { @@ -63,15 +67,15 @@ public class ExBuySellList extends AbstractItemPacket for (L2ItemInstance item : _sellList) { writeItem(packet, item); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _castleTaxRate)); } - } + } else { packet.writeH(0x00); } - if ((_refundList != null) && !_refundList.isEmpty()) + if ((_refundList != null) && !_refundList.isEmpty()) { packet.writeH(_refundList.size()); int i = 0; @@ -79,7 +83,7 @@ public class ExBuySellList extends AbstractItemPacket { writeItem(packet, item); packet.writeD(i++); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((item.getItem().getReferencePrice() / 2) * item.getCount()); } } else diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java index 362df12b76..791da494e7 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java @@ -26,15 +26,15 @@ public class ExPutItemResultForVariationCancel implements IClientOutgoingPacket private final int _itemId; private final int _itemAug1; private final int _itemAug2; - private final int _price; + private final long _price; - public ExPutItemResultForVariationCancel(L2ItemInstance item, int price) + public ExPutItemResultForVariationCancel(L2ItemInstance item, long price) { _itemObjId = item.getObjectId(); _itemId = item.getDisplayId(); _price = price; - _itemAug1 = ((short) item.getAugmentation().getId()); - _itemAug2 = item.getAugmentation().getId() >> 16; + _itemAug1 = item.getAugmentation().getOptionId(0); + _itemAug2 = item.getAugmentation().getOptionId(1); } @Override diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java index 45193eda4d..9e6d8f9a35 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java @@ -18,6 +18,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.enums.InventorySlot; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -73,10 +74,12 @@ public class ExUserInfoEquipSlot extends AbstractMaskPacket { if (containsMask(slot)) { + final Augmentation augment = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(inventory.getPaperdollObjectId(slot.getSlot())); packet.writeD(inventory.getPaperdollItemId(slot.getSlot())); - packet.writeQ(inventory.getPaperdollAugmentationId(slot.getSlot())); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); + packet.writeD(augment != null ? augment.getOptionId(1) : 0); packet.writeD(inventory.getPaperdollItemVisualId(slot.getSlot())); } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java index d1b7900f12..2f040f5e21 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java @@ -101,7 +101,8 @@ public class FakePlayerInfo implements IClientOutgoingPacket for (@SuppressWarnings("unused") int slot : getPaperdollOrderAugument()) { - packet.writeQ(0x00); + packet.writeD(0x00); + packet.writeD(0x00); } packet.writeC(_fpcHolder.getArmorEnchantLevel()); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java index d67302fa42..9a833551f8 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -88,7 +89,9 @@ public class GMViewCharacterInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrder()) { - packet.writeQ(_activeChar.getInventory().getPaperdollAugmentationId(slot)); + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_activeChar.getInventory().getTalismanSlots()); // CT2.3 diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java index 56b85ff361..5b66dbf2bb 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java @@ -48,7 +48,7 @@ public class GMViewSkillInfo implements IClientOutgoingPacket { packet.writeD(skill.isPassive() ? 1 : 0); packet.writeH(skill.getDisplayLevel()); - packet.writeH(0x00); // Sub level + packet.writeH(skill.getSubLevel()); packet.writeD(skill.getDisplayId()); packet.writeD(0x00); packet.writeC(isDisabled && skill.isClanSkill() ? 1 : 0); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java index be6ce0114b..84aa9d3629 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java @@ -19,21 +19,22 @@ package com.l2jmobius.gameserver.network.serverpackets; import static com.l2jmobius.gameserver.data.xml.impl.MultisellData.PAGE_SIZE; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.ListContainer; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; -public final class MultiSellList implements IClientOutgoingPacket +public final class MultiSellList extends AbstractItemPacket { private int _size, _index; - private final ListContainer _list; + private final PreparedMultisellListHolder _list; private final boolean _finished; - public MultiSellList(ListContainer list, int index) + public MultiSellList(PreparedMultisellListHolder list, int index) { _list = list; _index = index; @@ -54,175 +55,71 @@ public final class MultiSellList implements IClientOutgoingPacket { OutgoingPackets.MULTI_SELL_LIST.writeId(packet); - packet.writeC(0x00); - packet.writeD(_list.getListId()); // list id + packet.writeC(0x00); // Helios + packet.writeD(_list.getId()); // list id packet.writeC(0x00); // GOD Unknown packet.writeD(1 + (_index / PAGE_SIZE)); // page started from 1 packet.writeD(_finished ? 0x01 : 0x00); // finished packet.writeD(PAGE_SIZE); // size of pages packet.writeD(_size); // list length packet.writeC(_list.isChanceMultisell() ? 0x01 : 0x00); // new multisell window - packet.writeD(0x20); // Always 32 oO + packet.writeD(0x20); // Helios - Always 32 - Entry ent; while (_size-- > 0) { - ent = _list.getEntries().get(_index++); - packet.writeD(ent.getEntryId()); - packet.writeC(ent.isStackable() ? 1 : 0); - packet.writeH(0x00); - packet.writeD(0x00); - packet.writeD(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } + final ItemInfo itemEnchantment = _list.getItemEnchantment(_index); + final MultisellEntryHolder entry = _list.getEntries().get(_index++); - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } + packet.writeD(_index); // Entry ID. Start from 1. + packet.writeC(entry.isStackable() ? 1 : 0); - packet.writeH(ent.getProducts().size()); - packet.writeH(ent.getIngredients().size()); + // Those values will be passed down to MultiSellChoose packet. + packet.writeH(itemEnchantment != null ? itemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, itemEnchantment); + writeItemElemental(packet, itemEnchantment); + writeItemEnsoulOptions(packet, itemEnchantment); - for (Ingredient ing : ent.getProducts()) + packet.writeH(entry.getProducts().size()); + packet.writeH(entry.getIngredients().size()); + + for (ItemChanceHolder product : entry.getProducts()) { - packet.writeD(ing.getItemId()); - if (ing.getTemplate() != null) + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + final ItemInfo displayItemEnchantment = (_list.isMaintainEnchantment() && (itemEnchantment != null) && (template != null) && template.getClass().equals(itemEnchantment.getItem().getClass())) ? itemEnchantment : null; + + packet.writeD(product.getId()); + if (template != null) { - packet.writeQ(ing.getTemplate().getBodyPart()); - packet.writeH(ing.getTemplate().getType2()); + packet.writeQ(template.getBodyPart()); + packet.writeH(template.getType2()); } else { packet.writeQ(0); packet.writeH(65535); } - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - - packet.writeC(item.getSpecialAbilities().size()); // Size of regular soul crystal options. - for (EnsoulOption option : item.getSpecialAbilities()) - { - packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - } - - packet.writeC(item.getAdditionalSpecialAbilities().size()); // Size of special soul crystal options. - for (EnsoulOption option : item.getAdditionalSpecialAbilities()) - { - packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } - - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } - } + packet.writeQ(_list.getProductCount(product)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + packet.writeD((int) Math.ceil(product.getChance())); // chance + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); + writeItemEnsoulOptions(packet, displayItemEnchantment); } - for (Ingredient ing : ent.getIngredients()) + for (ItemHolder ingredient : entry.getIngredients()) { - packet.writeD(ing.getItemId()); - packet.writeH(ing.getTemplate() != null ? ing.getTemplate().getType2() : 65535); - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - packet.writeC(item.getSpecialAbilities().size()); // Size of regular soul crystal options. - for (EnsoulOption option : item.getSpecialAbilities()) - { - packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - } - - packet.writeC(item.getAdditionalSpecialAbilities().size()); // Size of special soul crystal options. - for (EnsoulOption option : item.getAdditionalSpecialAbilities()) - { - packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } - - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } - } + final L2Item template = ItemTable.getInstance().getTemplate(ingredient.getId()); + final ItemInfo displayItemEnchantment = ((itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) ? itemEnchantment : null; + + packet.writeD(ingredient.getId()); + packet.writeH(template != null ? template.getType2() : 65535); + packet.writeQ(_list.getIngredientCount(ingredient)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); + writeItemEnsoulOptions(packet, displayItemEnchantment); } } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java deleted file mode 100644 index 433eae9095..0000000000 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.network.serverpackets; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.enums.AttributeType; -import com.l2jmobius.gameserver.enums.TaxType; -import com.l2jmobius.gameserver.model.actor.L2Summon; -import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.network.OutgoingPackets; - -public class SellList implements IClientOutgoingPacket -{ - private final L2PcInstance _activeChar; - private final L2MerchantInstance _merchant; - private final long _money; - private final List _sellList; - - public SellList(L2PcInstance player) - { - this(player, null); - } - - public SellList(L2PcInstance player, L2MerchantInstance lease) - { - _activeChar = player; - _merchant = lease; - _money = _activeChar.getAdena(); - - if (_merchant == null) - { - _sellList = new LinkedList<>(); - final L2Summon pet = _activeChar.getPet(); - for (L2ItemInstance item : _activeChar.getInventory().getItems()) - { - if (!item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))) // Pet is summoned and not the item that summoned the pet - { - _sellList.add(item); - } - } - } - else - { - _sellList = Collections.emptyList(); - } - } - - @Override - public boolean write(PacketWriter packet) - { - OutgoingPackets.SELL_LIST.writeId(packet); - - packet.writeQ(_money); - packet.writeD(_merchant == null ? 0x00 : 1000000 + _merchant.getTemplate().getId()); - packet.writeH(_sellList.size()); - - for (L2ItemInstance item : _sellList) - { - int price = item.getItem().getReferencePrice() / 2; - if (_merchant != null) - { - price -= (price * _merchant.getTotalTaxRate(TaxType.SELL)); - } - - packet.writeH(item.getItem().getType1()); - packet.writeD(item.getObjectId()); - packet.writeD(item.getDisplayId()); - packet.writeQ(item.getCount()); - packet.writeH(item.getItem().getType2()); - packet.writeH(item.isEquipped() ? 0x01 : 0x00); - packet.writeD(item.getItem().getBodyPart()); - packet.writeH(item.getEnchantLevel()); - packet.writeH(0x00); // TODO: Verify me - packet.writeH(item.getCustomType2()); - packet.writeQ(price); - // T1 - packet.writeH(item.getAttackAttributeType().getClientId()); - packet.writeH(item.getAttackAttributePower()); - for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) - { - packet.writeH(item.getDefenceAttribute(type)); - } - // Enchant Effects - for (int op : item.getEnchantOptions()) - { - packet.writeH(op); - } - } - return true; - } -} diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java index 438e259df2..cea58a11ac 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java @@ -20,8 +20,8 @@ import java.util.Collection; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -32,7 +32,7 @@ public class ShopPreviewList implements IClientOutgoingPacket private final long _money; private int _expertise; - public ShopPreviewList(L2BuyList list, long currentMoney, int expertiseIndex) + public ShopPreviewList(ProductList list, long currentMoney, int expertiseIndex) { _listId = list.getListId(); _list = list.getProducts(); diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java index 24d153ef95..8d5ef1a54c 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java @@ -45,7 +45,7 @@ public class ExResponseCommissionBuyItem implements IClientOutgoingPacket if (_commissionItem != null) { final ItemInfo itemInfo = _commissionItem.getItemInfo(); - packet.writeD(itemInfo.getEnchant()); + packet.writeD(itemInfo.getEnchantLevel()); packet.writeD(itemInfo.getItem().getId()); packet.writeQ(itemInfo.getCount()); } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/config/Character.ini b/L2J_Mobius_4.0_GrandCrusade/dist/game/config/Character.ini index c0f8f53914..e13141eae5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/config/Character.ini +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/config/Character.ini @@ -553,10 +553,6 @@ AltGameCreationSpRate = 1 # Default: 2 AltGameCreationRareXpSpRate = 2 -# If set to False, blacksmiths don't take recipes from players inventory when crafting. -# Default: True -AltBlacksmithUseRecipes = True - # Store/Restore Dwarven Manufacture list # Keep manufacture shoplist after relog # Default: False diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0000382.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0000382.xml index d05356a23d..6070582cb9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0000382.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0000382.xml @@ -1,53 +1,53 @@ - + 31380 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0000383.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0000383.xml index 36e3fdba19..f9a1b4452e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0000383.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0000383.xml @@ -1,53 +1,53 @@ - + 31373 - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335103.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335103.xml index c69a0adc37..5fba711e83 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335103.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335103.xml @@ -3,5 +3,5 @@ 35103 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335145.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335145.xml index ec17e22fb8..ae0307b2da 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335145.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335145.xml @@ -3,5 +3,5 @@ 35145 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335187.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335187.xml index ef525be37d..d080daa732 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335187.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335187.xml @@ -3,5 +3,5 @@ 35187 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335229.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335229.xml index acc22eeee1..ad8c2e1cc6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335229.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335229.xml @@ -3,5 +3,5 @@ 35229 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335230.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335230.xml index b90c9a4c22..a8adffc4b2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335230.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335230.xml @@ -3,5 +3,5 @@ 35230 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335231.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335231.xml index 1f7e23bf67..428fcd426c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335231.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335231.xml @@ -3,5 +3,5 @@ 35231 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335277.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335277.xml index 4e6c636983..ff25d9c7c0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335277.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335277.xml @@ -3,5 +3,5 @@ 35277 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335319.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335319.xml index f38fb0bf71..c20daba2b7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335319.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335319.xml @@ -3,5 +3,5 @@ 35319 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335366.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335366.xml index a3485c3efc..eb803c4097 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335366.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335366.xml @@ -3,5 +3,5 @@ 35366 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335383.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335383.xml index 5d8f360dee..9c74254a37 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335383.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335383.xml @@ -1,5 +1,5 @@ - + 35383 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335390.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335390.xml index b219307c04..7b23db5b63 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335390.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335390.xml @@ -1,5 +1,5 @@ - + 35390 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335421.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335421.xml index a7ae058c57..8e80c9d384 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335421.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335421.xml @@ -1,5 +1,5 @@ - + 35421 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335512.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335512.xml index 4b7f195288..618b8e9e97 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335512.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335512.xml @@ -3,5 +3,5 @@ 35512 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335558.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335558.xml index 61e5a9f0b3..5486e14ac4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335558.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335558.xml @@ -3,5 +3,5 @@ 35558 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335580.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335580.xml index 6ba9991715..427c6c2ace 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335580.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335580.xml @@ -1,5 +1,5 @@ - + 35580 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335582.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335582.xml index dcdaea99a4..2849a9823c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335582.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335582.xml @@ -1,5 +1,5 @@ - + 35582 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335584.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335584.xml index bc8e2fec98..6219e4c46c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335584.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335584.xml @@ -1,5 +1,5 @@ - + 35584 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335586.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335586.xml index 30e7bcc9cb..7aac1cf84d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335586.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335586.xml @@ -1,5 +1,5 @@ - + 35586 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335605.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335605.xml index 2a82ec8d75..16eccc7ddd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335605.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335605.xml @@ -1,5 +1,5 @@ - + 35605 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335644.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335644.xml index 97e9fc41dc..b6a51814be 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335644.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335644.xml @@ -3,5 +3,5 @@ 35644 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335645.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335645.xml index 205bbb24e0..eacf338808 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335645.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0335645.xml @@ -3,5 +3,5 @@ 35645 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0336456.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0336456.xml index 43e790cad0..7f926f898a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0336456.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0336456.xml @@ -3,5 +3,5 @@ 36456 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351001.xml index 2f7769194a..e88995d140 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351001.xml @@ -1,5 +1,5 @@ - + 35100 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351021.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351021.xml index f7adf3875a..6cc4206a6d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351021.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351021.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351022.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351022.xml index a5cb088853..85c2d9d62e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351022.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351022.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351023.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351023.xml index 7eead4f7dc..df952cfde0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351023.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351023.xml @@ -1,9 +1,9 @@ - + 35102 - - - + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351024.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351024.xml index bef9a9f1ff..7e19e6ae42 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351024.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351024.xml @@ -1,16 +1,16 @@ - + 35102 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351025.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351025.xml index 69c6f6af6d..32900e60e8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351025.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351025.xml @@ -1,8 +1,8 @@ - + 35102 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351026.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351026.xml index 58a26d4236..3f34104bef 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351026.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351026.xml @@ -1,26 +1,26 @@ - + 35102 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351421.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351421.xml index 3a640491b4..f4e85a2f4c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351421.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351421.xml @@ -1,5 +1,5 @@ - + 35142 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351441.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351441.xml index f32e38c86a..a21b2554f4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351441.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351441.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351442.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351442.xml index 0a671d4945..906455eb28 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351442.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351442.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351443.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351443.xml index ab83cdb179..c7211c5446 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351443.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351443.xml @@ -1,9 +1,9 @@ - + 35144 - - - + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351444.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351444.xml index 92b6372d8c..030931665f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351444.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351444.xml @@ -1,16 +1,16 @@ - + 35144 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351445.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351445.xml index 0958d4a81a..a48e7237f6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351445.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351445.xml @@ -1,8 +1,8 @@ - + 35144 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351446.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351446.xml index 8af7ec3f21..f5c6d54df3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351446.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351446.xml @@ -1,26 +1,26 @@ - + 35144 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351841.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351841.xml index 38b74dda2d..252563d558 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351841.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351841.xml @@ -1,5 +1,5 @@ - + 35184 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351861.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351861.xml index 36f1a4cfa6..93de34adc3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351861.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351861.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351862.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351862.xml index 0ac8eecd93..ace30c766a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351862.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351862.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351863.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351863.xml index 80dc328719..a5ee6ff042 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351863.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351863.xml @@ -1,9 +1,9 @@ - + 35186 - - - + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351864.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351864.xml index 06682728b6..64b579db8f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351864.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351864.xml @@ -1,16 +1,16 @@ - + 35186 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351865.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351865.xml index 83bf9e6402..9331ba7193 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351865.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351865.xml @@ -1,8 +1,8 @@ - + 35186 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351866.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351866.xml index 55fce9970e..4273c35718 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351866.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0351866.xml @@ -1,26 +1,26 @@ - + 35186 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352261.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352261.xml index f66eaa1615..0db97eea93 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352261.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352261.xml @@ -1,5 +1,5 @@ - + 35226 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352281.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352281.xml index 2b222fa598..c8da11c37b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352281.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352281.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352282.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352282.xml index 8bad8b7f88..e45b1db923 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352282.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352282.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352283.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352283.xml index 87cd9481f6..5fa6a8b8bc 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352283.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352283.xml @@ -1,9 +1,9 @@ - + 35228 - - - + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352284.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352284.xml index 62b8f1d41c..ec2af80da6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352284.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352284.xml @@ -1,16 +1,16 @@ - + 35228 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352285.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352285.xml index d389f8f520..e576154fc1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352285.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352285.xml @@ -1,8 +1,8 @@ - + 35228 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352286.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352286.xml index e85594e6d9..371594c8c0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352286.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352286.xml @@ -1,26 +1,26 @@ - + 35228 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352741.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352741.xml index 4550c3ce3c..9023bccee1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352741.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352741.xml @@ -1,5 +1,5 @@ - + 35274 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352761.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352761.xml index 3ebd07be31..a188befa2b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352761.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352761.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352762.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352762.xml index aced7ec0e5..7d81046cbc 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352762.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352762.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352763.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352763.xml index 035facf7b8..d5b5478d7a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352763.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352763.xml @@ -1,11 +1,11 @@ - + 35276 - - - - - + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352764.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352764.xml index 7dbe8182fa..0f6c2e61e5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352764.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352764.xml @@ -1,16 +1,16 @@ - + 35276 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352765.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352765.xml index 6a73e43392..2fc44382da 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352765.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352765.xml @@ -1,8 +1,8 @@ - + 35276 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352766.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352766.xml index dbf5b62a57..ac21e757f1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352766.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0352766.xml @@ -1,26 +1,26 @@ - + 35276 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353161.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353161.xml index 1acc907ae9..97cd7ab588 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353161.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353161.xml @@ -1,5 +1,5 @@ - + 35316 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353181.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353181.xml index 89e932a264..b9cac93a9b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353181.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353181.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353182.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353182.xml index 4a3bd8f461..fd8d084a9f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353182.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353182.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353183.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353183.xml index a0981c52b7..b4e6c0d00f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353183.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353183.xml @@ -1,9 +1,9 @@ - + 35318 - - - + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353184.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353184.xml index b8024cc5e5..e8986cc0b2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353184.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353184.xml @@ -1,16 +1,16 @@ - + 35318 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353185.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353185.xml index c270f3e916..36f9000538 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353185.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353185.xml @@ -1,8 +1,8 @@ - + 35318 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353186.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353186.xml index 1f5b86df6b..ef5fc103d5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353186.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353186.xml @@ -1,26 +1,26 @@ - + 35318 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353631.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353631.xml index 6cd0f9f83b..f0e259d7f6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353631.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353631.xml @@ -1,5 +1,5 @@ - + 35363 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353651.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353651.xml index e67fc3ff27..8361af5bd6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353651.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353651.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353652.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353652.xml index 08bdb3e69f..8d271d9b5a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353652.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353652.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353653.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353653.xml index a60c33027d..c199fd9a91 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353653.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353653.xml @@ -1,9 +1,9 @@ - + 35365 - - - + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353654.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353654.xml index 8f263e6076..34410877d3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353654.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353654.xml @@ -1,16 +1,16 @@ - + 35365 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353655.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353655.xml index 30483fb4eb..e5ddc20ed8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353655.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353655.xml @@ -1,8 +1,8 @@ - + 35365 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353656.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353656.xml index 47f61a5f8d..83db764b45 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353656.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0353656.xml @@ -1,26 +1,26 @@ - + 35365 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355091.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355091.xml index 64ce916c79..3cb72086ef 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355091.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355091.xml @@ -1,5 +1,5 @@ - + 35509 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355111.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355111.xml index d301023aab..224cc0331c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355111.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355111.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355112.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355112.xml index dde4df5a06..1af568b999 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355112.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355112.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355113.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355113.xml index f3d7809706..19aaf0588f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355113.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355113.xml @@ -1,11 +1,11 @@ - + 35511 - - - - - + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355114.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355114.xml index 082dde48cc..759597ddd0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355114.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355114.xml @@ -1,16 +1,16 @@ - + 35511 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355115.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355115.xml index 0662473717..546391b703 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355115.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355115.xml @@ -1,8 +1,8 @@ - + 35511 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355116.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355116.xml index 4c5e229488..36b173d77f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355116.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355116.xml @@ -1,26 +1,26 @@ - + 35511 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355551.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355551.xml index 8dfce69017..9da26ac5df 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355551.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355551.xml @@ -1,5 +1,5 @@ - + 35555 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355571.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355571.xml index 8baf9d5daa..c7f4be0fd3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355571.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355571.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355572.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355572.xml index 643f113a5a..a899f3e0f2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355572.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355572.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355573.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355573.xml index 0a686f4e94..3c4ea6cf29 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355573.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355573.xml @@ -1,9 +1,9 @@ - + 35557 - - - + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355574.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355574.xml index 91d2143aeb..6f1dac7286 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355574.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355574.xml @@ -1,16 +1,16 @@ - + 35557 - - - - - - - - - - + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355575.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355575.xml index 64cbf11f50..632bcab90f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355575.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355575.xml @@ -1,8 +1,8 @@ - + 35557 - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355576.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355576.xml index 03e5256308..7e2ba73d71 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355576.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0355576.xml @@ -1,26 +1,26 @@ - + 35557 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366531.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366531.xml index f124552697..9f21593f19 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366531.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366531.xml @@ -1,5 +1,5 @@ - + 36653 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366541.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366541.xml index b17cd76ac9..4c559b6ff1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366541.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366541.xml @@ -1,5 +1,5 @@ - + 36654 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366551.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366551.xml index e2af00ff71..f7b4c8cc88 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366551.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366551.xml @@ -1,5 +1,5 @@ - + 36655 @@ -15,5 +15,5 @@ - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366561.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366561.xml index 28b7c008ea..d19e30ec6b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366561.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366561.xml @@ -1,5 +1,5 @@ - + 36656 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366571.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366571.xml index 459785aade..7a7fe9e445 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366571.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366571.xml @@ -1,5 +1,5 @@ - + 36657 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366581.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366581.xml index a6e07f5bd4..e845a51d46 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366581.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366581.xml @@ -1,5 +1,5 @@ - + 36658 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366591.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366591.xml index da24213c75..9159b2a59a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366591.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366591.xml @@ -1,5 +1,5 @@ - + 36659 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366601.xml index 71326ac100..6be90ac82f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366601.xml @@ -1,5 +1,5 @@ - + 36660 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366611.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366611.xml index 0855deaa00..c95462bee0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366611.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/0366611.xml @@ -1,5 +1,5 @@ - + 36661 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/1312801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/1312801.xml index e551478d59..244b670c3f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/1312801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/1312801.xml @@ -1,5 +1,5 @@ - + 13128 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000100.xml index 309643b83f..3020bec80b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000100.xml @@ -1,5 +1,5 @@ - + 30001 @@ -30,4 +30,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000101.xml index a4cbc0278f..355fd56dba 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000101.xml @@ -1,5 +1,5 @@ - + 30001 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000200.xml index 7944ea4f44..367b78f6f1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000200.xml @@ -1,5 +1,5 @@ - + 30002 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000201.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000201.xml index 77467ca3e8..a5dab01833 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000201.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000201.xml @@ -1,5 +1,5 @@ - + 30002 @@ -34,4 +34,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000300.xml index 799ac4784e..98f72b7a3b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000300.xml @@ -1,5 +1,5 @@ - + 30003 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000301.xml index 574fb6e530..d8fe4e34c6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000301.xml @@ -1,5 +1,5 @@ - + 30003 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000400.xml index fbe7c5dfd5..dd1f6c38b0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3000400.xml @@ -1,5 +1,5 @@ - + 30004 @@ -27,7 +27,6 @@ - @@ -52,4 +51,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3004700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3004700.xml index 8a5b084ce1..2d0b270e9c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3004700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3004700.xml @@ -1,5 +1,5 @@ - + 30047 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006000.xml index 5526b07ccd..23c01f239a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006000.xml @@ -1,5 +1,5 @@ - + 30060 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006001.xml index 59b4bec0f0..df6e62e5f5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006001.xml @@ -1,5 +1,5 @@ - + 30060 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006100.xml index 430ba9f8e4..3645494858 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006100.xml @@ -1,5 +1,5 @@ - + 30061 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006101.xml index 74250f09e4..e8267e3455 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006101.xml @@ -1,5 +1,5 @@ - + 30061 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006200.xml index 9510b6f513..b7fd95644d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006200.xml @@ -1,5 +1,5 @@ - + 30062 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006201.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006201.xml index 8d3a7b20ce..d594c7d9a7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006201.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006201.xml @@ -1,5 +1,5 @@ - + 30062 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006202.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006202.xml index 5bf9240df1..12cc6b5587 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006202.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006202.xml @@ -1,5 +1,5 @@ - + 30062 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006300.xml index 50520f9c68..0da7a583be 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006300.xml @@ -1,5 +1,5 @@ - + 30063 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006301.xml index 17fb26291d..0f7d8b8214 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3006301.xml @@ -1,5 +1,5 @@ - + 30063 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3007800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3007800.xml index 9ca9664c11..05eb3cb16a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3007800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3007800.xml @@ -1,81 +1,116 @@ - + 30078 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008100.xml index 49c5ac8c31..7b5968703c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008100.xml @@ -1,8 +1,7 @@ - + 30081 - 34190 @@ -10,11 +9,13 @@ + + @@ -47,7 +48,12 @@ - + + + + + + @@ -77,7 +83,6 @@ - @@ -98,7 +103,6 @@ - diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008101.xml index aa91428d67..b77e878362 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008101.xml @@ -1,5 +1,5 @@ - + 30081 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008200.xml index 5d7b07dbea..a127b556cf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008200.xml @@ -1,5 +1,5 @@ - + 30082 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008201.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008201.xml index b6a5b102af..1c4e759596 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008201.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008201.xml @@ -1,5 +1,5 @@ - + 30082 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008400.xml index 6e0c19b256..352ae71092 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008400.xml @@ -1,5 +1,5 @@ - + 30084 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008401.xml index 55d6aa9265..542b338565 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008401.xml @@ -1,5 +1,5 @@ - + 30084 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008500.xml index b0db68ddf9..78b2d1a7cf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008500.xml @@ -1,5 +1,5 @@ - + 30085 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008701.xml index ab088e77cd..6a58148cd2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008701.xml @@ -1,5 +1,5 @@ - + 30087 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008800.xml index d30b44e5de..0a005c2190 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3008800.xml @@ -1,5 +1,5 @@ - + 30088 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009000.xml index b596da225e..5e68eb6ef9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009000.xml @@ -1,5 +1,5 @@ - + 30090 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009001.xml index 2a9789db15..c37825efcd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009001.xml @@ -1,5 +1,5 @@ - + 30090 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009100.xml index 975660df9e..c6d5ae5550 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009100.xml @@ -1,5 +1,5 @@ - + 30091 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009101.xml index 59fb3b84e3..85f1ff1b4d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009101.xml @@ -1,5 +1,5 @@ - + 30091 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009300.xml index 3f56bafab4..76696df49c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009300.xml @@ -1,5 +1,5 @@ - + 30093 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009400.xml index 0021fd0bdf..12dbdb3977 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009400.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009401.xml index 8bed85e5d1..86e29204b6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009401.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009402.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009402.xml index cda9d39e1a..66ebbac372 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009402.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3009402.xml @@ -1,5 +1,5 @@ - + 30094 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013500.xml index 82877098bd..7c60c99b0f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013500.xml @@ -1,5 +1,5 @@ - + 30135 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013501.xml index 9b42b7f241..06f769d895 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013501.xml @@ -1,5 +1,5 @@ - + 30135 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013600.xml index 7ce171122a..8924cc4f14 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013600.xml @@ -1,5 +1,5 @@ - + 30136 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013601.xml index 9be0509e76..00d4bebb92 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013601.xml @@ -1,5 +1,5 @@ - + 30136 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013700.xml index 3d30071388..9bff93e506 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013700.xml @@ -1,5 +1,5 @@ - + 30137 @@ -108,4 +108,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013800.xml index 26c101a01d..3c1c47ac8d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013800.xml @@ -1,5 +1,5 @@ - + 30138 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013801.xml index 60e5e499f9..9796701e83 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3013801.xml @@ -1,5 +1,5 @@ - + 30138 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014700.xml index bccf348037..240b37c575 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014700.xml @@ -1,5 +1,5 @@ - + 30147 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014701.xml index 6da2295ae7..73fbe9848d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014701.xml @@ -1,5 +1,5 @@ - + 30147 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014800.xml index 8678bde7bb..e5a6bf931f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014800.xml @@ -1,5 +1,5 @@ - + 30148 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014801.xml index 977eedeab2..12d1f30036 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014801.xml @@ -1,5 +1,5 @@ - + 30148 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014900.xml index 4ad0978496..a46c7ecfe8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014900.xml @@ -1,5 +1,5 @@ - + 30149 @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014901.xml index 5e1395208c..5cbf611f38 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3014901.xml @@ -1,5 +1,5 @@ - + 30149 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3015000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3015000.xml index 92e65e15f2..b58949ce4c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3015000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3015000.xml @@ -1,5 +1,5 @@ - + 30150 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016300.xml index 077f1876a1..dbda979b38 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016300.xml @@ -1,5 +1,5 @@ - + 30163 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016400.xml index 1454cfb5ac..1f0df91229 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016400.xml @@ -1,5 +1,5 @@ - + 30164 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016500.xml index aca772d787..48ee4af133 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016500.xml @@ -1,5 +1,5 @@ - + 30165 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016501.xml index 7dba4e131b..32b2a5cf41 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016501.xml @@ -1,5 +1,5 @@ - + 30165 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016601.xml index bfb3e3d1ef..0d750ea8b6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3016601.xml @@ -1,5 +1,5 @@ - + 30166 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017800.xml index 505544d5bc..2c12406e46 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017800.xml @@ -1,5 +1,5 @@ - + 30178 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017801.xml index 3c7ea675c2..b136f17dce 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017801.xml @@ -1,5 +1,5 @@ - + 30178 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017900.xml index d73620d8a8..1285bf5c04 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017900.xml @@ -1,5 +1,5 @@ - + 30179 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017901.xml index cbcb623260..b57367e413 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3017901.xml @@ -1,5 +1,5 @@ - + 30179 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018000.xml index b01148851d..58fd785bf8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018000.xml @@ -1,5 +1,5 @@ - + 30180 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018001.xml index ecaeab10f4..c0e75f739e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018001.xml @@ -1,5 +1,5 @@ - + 30180 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018100.xml index 6bfe46e4a0..d1dacdaf27 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3018100.xml @@ -1,5 +1,5 @@ - + 30181 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020700.xml index a99aeb36d6..2f8ab58ee6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020700.xml @@ -1,5 +1,5 @@ - + 30207 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020701.xml index b415d6d4e3..3a8856b5d9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020701.xml @@ -1,5 +1,5 @@ - + 30207 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020800.xml index 4750f26a53..7f9f5c2a84 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020800.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020801.xml index 94149acb40..5d661cc641 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020801.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020802.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020802.xml index ebdbf6d3e8..e2912593e2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020802.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020802.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020803.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020803.xml index e285dbd868..33d617f651 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020803.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020803.xml @@ -1,5 +1,5 @@ - + 30208 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020900.xml index 72eb021070..f8f4d8822d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3020900.xml @@ -1,5 +1,5 @@ - + 30209 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023000.xml index e1676775e2..3a74565ab5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023000.xml @@ -1,5 +1,5 @@ - + 30230 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023001.xml index 3901f20315..f2bd84932c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023001.xml @@ -1,5 +1,5 @@ - + 30230 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023100.xml index ee38959bcd..39b448efdd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3023100.xml @@ -1,5 +1,5 @@ - + 30231 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025300.xml index e8f292cef7..89ee9799e8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025300.xml @@ -1,5 +1,5 @@ - + 30253 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025301.xml index b9f7e27133..4603a5a685 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025301.xml @@ -1,5 +1,5 @@ - + 30253 @@ -35,4 +35,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025400.xml index f3bd028fe4..b25f7c2634 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025400.xml @@ -1,5 +1,5 @@ - + 30254 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025401.xml index a01a0d95ff..5870b5c91a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3025401.xml @@ -1,5 +1,5 @@ - + 30254 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3029400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3029400.xml index 88339b5469..47bb430e22 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3029400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3029400.xml @@ -1,5 +1,5 @@ - + 30294 @@ -12,4 +12,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3030100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3030100.xml index e8a7ccd563..625930ba63 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3030100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3030100.xml @@ -1,5 +1,5 @@ - + 30301 @@ -9,11 +9,13 @@ + + @@ -46,6 +48,12 @@ + + + + + + @@ -75,7 +83,6 @@ - @@ -96,7 +103,6 @@ - @@ -107,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3030101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3030101.xml index 5f9f186327..cfbde210ef 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3030101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3030101.xml @@ -1,5 +1,5 @@ - + 30301 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031300.xml index d2c41b945c..f12b52dbc0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031300.xml @@ -1,5 +1,5 @@ - + 30313 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031400.xml index bef42ee4a4..a70bd2a68f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031400.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031401.xml index ce92ec84e7..c55eb598d0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031401.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031402.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031402.xml index a8f069398a..cc46756624 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031402.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031402.xml @@ -1,5 +1,5 @@ - + 30314 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031500.xml index b3ddb7eadb..bef1c865f8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3031500.xml @@ -1,5 +1,5 @@ - + 30315 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3032100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3032100.xml index cd33aa8c92..98a5e4598a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3032100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3032100.xml @@ -1,5 +1,5 @@ - + 30321 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3032101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3032101.xml index 45f097bc50..79c0ef6f34 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3032101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3032101.xml @@ -1,5 +1,5 @@ - + 30321 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3038700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3038700.xml index 6b2346e650..fd30e9fc4f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3038700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3038700.xml @@ -1,5 +1,5 @@ - + 30387 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3042000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3042000.xml index 8ebf130017..3122f0cc74 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3042000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3042000.xml @@ -1,5 +1,5 @@ - + 30420 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3043600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3043600.xml index 972b0ddc1b..5ede4b6022 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3043600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3043600.xml @@ -1,5 +1,5 @@ - + 30436 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3043700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3043700.xml index f96fcacec9..2ad6c59ff9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3043700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3043700.xml @@ -1,5 +1,5 @@ - + 30437 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051600.xml index 1034512a0d..7a107bb9d5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051600.xml @@ -1,5 +1,5 @@ - + 30516 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051601.xml index 36ac194b8a..6f83fdc514 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051601.xml @@ -1,5 +1,5 @@ - + 30516 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051700.xml index 1f47fb7d37..3b8d6f504f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051700.xml @@ -1,5 +1,5 @@ - + 30517 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051701.xml index 4d9eb38ab6..cfa2ce8508 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051701.xml @@ -1,5 +1,5 @@ - + 30517 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051800.xml index 4fbd11c07f..fdd8e62cdf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051800.xml @@ -1,5 +1,5 @@ - + 30518 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051900.xml index 348a20045d..d3d077b818 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051900.xml @@ -1,5 +1,5 @@ - + 30519 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051901.xml index 46a7179721..adac7cb3dc 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3051901.xml @@ -1,5 +1,5 @@ - + 30519 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055800.xml index 6286969148..b5d017f4a5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055800.xml @@ -1,5 +1,5 @@ - + 30558 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055801.xml index 4138155ceb..dcaae0ac98 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055801.xml @@ -1,5 +1,5 @@ - + 30558 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055900.xml index 65a015d431..77c46b2332 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055900.xml @@ -1,5 +1,5 @@ - + 30559 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055901.xml index 11f2ccad75..a42aba6e8a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3055901.xml @@ -1,5 +1,5 @@ - + 30559 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056000.xml index 978cab75ac..eab17fabea 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056000.xml @@ -1,5 +1,5 @@ - + 30560 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056001.xml index 27682a5b80..b6dd48ba73 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056001.xml @@ -1,5 +1,5 @@ - + 30560 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056100.xml index 1d40dc6d86..4a4f97713b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3056100.xml @@ -1,5 +1,5 @@ - + 30561 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3068400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3068400.xml index 9b5ab9cf56..01c59e4bda 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3068400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3068400.xml @@ -1,5 +1,5 @@ - + 30684 @@ -33,4 +33,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3068401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3068401.xml index 4aaa8276ee..b763e8d2b0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3068401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3068401.xml @@ -1,5 +1,5 @@ - + 30684 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3073100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3073100.xml index ce0b4fd50c..4d397fa66e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3073100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3073100.xml @@ -1,5 +1,5 @@ - + 30731 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082700.xml index 25dc623035..3843f3fd38 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082700.xml @@ -1,5 +1,5 @@ - + 30827 @@ -68,4 +68,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082800.xml index 048f8c0e93..3adb732baa 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082800.xml @@ -1,5 +1,5 @@ - + 30828 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082900.xml index 587aa02de3..2d89a5d83e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3082900.xml @@ -1,5 +1,5 @@ - + 30829 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083000.xml index 72d67fe651..a0c62f1561 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083000.xml @@ -1,5 +1,5 @@ - + 30830 @@ -68,4 +68,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083100.xml index 46a65ac813..c5f8677a5f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083100.xml @@ -1,5 +1,5 @@ - + 30831 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083400.xml index d5e024cd18..86eadb9ebf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083400.xml @@ -1,5 +1,5 @@ - + 30834 @@ -91,4 +91,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083401.xml index b3d26ae56f..317ef34a8c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083401.xml @@ -1,5 +1,5 @@ - + 30834 @@ -52,4 +52,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083700.xml index 7eb1b461f0..cc9b286ba0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083700.xml @@ -1,5 +1,5 @@ - + 30837 @@ -81,4 +81,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083701.xml index 0c263f977a..0c42bc0d8e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083701.xml @@ -1,5 +1,5 @@ - + 30837 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083800.xml index 8fc56ae2d9..6b4f527bb7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083800.xml @@ -1,5 +1,5 @@ - + 30838 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083801.xml index 28f58759de..0a698f11f0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083801.xml @@ -1,5 +1,5 @@ - + 30838 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083900.xml index f5fd34e39d..7d16233aee 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3083900.xml @@ -1,5 +1,5 @@ - + 30839 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084000.xml index 72b0181aec..dc996387e8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084000.xml @@ -1,5 +1,5 @@ - + 30840 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084100.xml index dd4cf41363..e25ea42b3e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084100.xml @@ -1,5 +1,5 @@ - + 30841 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084101.xml index 528d8ed788..d78fa5ba0f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084101.xml @@ -1,5 +1,5 @@ - + 30841 @@ -39,4 +39,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084102.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084102.xml index e452b9ca59..10da2eebdd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084102.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084102.xml @@ -1,5 +1,5 @@ - + 30841 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084200.xml index b1be2e7915..30481b42ee 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3084200.xml @@ -1,5 +1,5 @@ - + 30842 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3086900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3086900.xml index 89ba97c589..9a538a35e0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3086900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3086900.xml @@ -1,5 +1,5 @@ - + 30869 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3087900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3087900.xml index a95959510d..bbdf7f37bc 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3087900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3087900.xml @@ -1,5 +1,5 @@ - + 30879 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089000.xml index a558c92485..aa26a4cdc8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089000.xml @@ -1,5 +1,5 @@ - + 30890 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089001.xml index a6896a55c5..e2821435e8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089001.xml @@ -1,5 +1,5 @@ - + 30890 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089100.xml index 2cfc65b77e..7682a4f779 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089100.xml @@ -1,5 +1,5 @@ - + 30891 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089101.xml index 3de65307ed..cb6dc779ab 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089101.xml @@ -1,5 +1,5 @@ - + 30891 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089200.xml index b849a81903..3109ed3df3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089200.xml @@ -1,5 +1,5 @@ - + 30892 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089300.xml index d4f90facde..055dcd499a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089300.xml @@ -1,5 +1,5 @@ - + 30893 @@ -9,11 +9,13 @@ + + @@ -46,6 +48,12 @@ + + + + + + @@ -75,7 +83,6 @@ - @@ -96,7 +103,6 @@ - @@ -107,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089301.xml index 5f22a3f64a..662fe1af0c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3089301.xml @@ -1,5 +1,5 @@ - + 30893 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3104500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3104500.xml index 819e516fc0..a010eabc4d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3104500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3104500.xml @@ -1,81 +1,116 @@ - + 31045 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + + + + + + - - + + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3106700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3106700.xml index 361daa056d..17d929e580 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3106700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3106700.xml @@ -1,5 +1,5 @@ - + 31067 @@ -86,4 +86,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125600.xml index e83a2ccfe8..ed51c2d6e5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125600.xml @@ -1,5 +1,5 @@ - + 31256 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125601.xml index 658690aadc..d19b106aca 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125601.xml @@ -1,5 +1,5 @@ - + 31256 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125602.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125602.xml index 34a0c96e1a..5a0284dd2e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125602.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125602.xml @@ -1,5 +1,5 @@ - + 31256 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125603.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125603.xml index fa522e73a5..e308fcddf0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125603.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125603.xml @@ -1,5 +1,5 @@ - + 31256 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125700.xml index 554ea9d37b..76af30c423 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125700.xml @@ -1,5 +1,5 @@ - + 31257 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125701.xml index b53d14ba4d..c88702e68f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125701.xml @@ -1,5 +1,5 @@ - + 31257 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125702.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125702.xml index 24e0ec13bc..40835089c1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125702.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125702.xml @@ -1,5 +1,5 @@ - + 31257 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125703.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125703.xml index 759ee3170e..e0bfa28ece 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125703.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125703.xml @@ -1,5 +1,5 @@ - + 31257 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125800.xml index 76a7c1c46e..0aafd5e660 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125800.xml @@ -1,5 +1,5 @@ - + 31258 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125801.xml index 9bdba27a05..f0d3e4065b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125801.xml @@ -1,5 +1,5 @@ - + 31258 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125802.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125802.xml index 8f5bf9ca08..e88c3c1bff 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125802.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125802.xml @@ -1,5 +1,5 @@ - + 31258 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125803.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125803.xml index a1fc8f5256..d4a0515338 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125803.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125803.xml @@ -1,5 +1,5 @@ - + 31258 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125900.xml index ffc2acdb5d..d717f65dc4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125900.xml @@ -1,5 +1,5 @@ - + 31259 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125901.xml index 353f910744..e0500de022 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125901.xml @@ -1,5 +1,5 @@ - + 31259 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125902.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125902.xml index 0d0ad94603..c423f23bd0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125902.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125902.xml @@ -1,5 +1,5 @@ - + 31259 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125903.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125903.xml index cabdd801b2..6ea4724bc5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125903.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3125903.xml @@ -1,5 +1,5 @@ - + 31259 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126000.xml index f9c04ce381..4dd2c64fb3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126000.xml @@ -1,5 +1,5 @@ - + 31260 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126001.xml index de434b8efe..9561e91efe 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126001.xml @@ -1,5 +1,5 @@ - + 31260 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126100.xml index cac307a7e5..c89726c2e7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126100.xml @@ -1,5 +1,5 @@ - + 31261 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126101.xml index 6c893b04d6..d8054cb689 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126101.xml @@ -1,5 +1,5 @@ - + 31261 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126200.xml index 74b25beb63..8b2185b6df 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126200.xml @@ -1,5 +1,5 @@ - + 31262 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126300.xml index 72d320f4b6..348cf06868 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126300.xml @@ -1,5 +1,5 @@ - + 31263 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126301.xml index ba7034bdf2..def9ecc072 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126301.xml @@ -1,5 +1,5 @@ - + 31263 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126500.xml index b1c2e0bf5f..d7c73889cb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3126500.xml @@ -1,5 +1,5 @@ - + 31265 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3127400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3127400.xml index b354fd9eb4..8b6925221a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3127400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3127400.xml @@ -1,5 +1,5 @@ - + 31274 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130000.xml index 340a30e4a4..9bb77060b4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130000.xml @@ -1,5 +1,5 @@ - + 31300 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130001.xml index 99669c3a71..d8d9dbb755 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130001.xml @@ -1,5 +1,5 @@ - + 31300 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130100.xml index fc3e9d1622..7be1df6352 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130100.xml @@ -1,5 +1,5 @@ - + 31301 @@ -103,4 +103,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130101.xml index 1528dc42dc..687912cbaf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130101.xml @@ -1,5 +1,5 @@ - + 31301 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130200.xml index 5f7dd538ab..c2a06d75bd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130200.xml @@ -1,5 +1,5 @@ - + 31302 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130201.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130201.xml index 738118f186..3057144246 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130201.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130201.xml @@ -1,5 +1,5 @@ - + 31302 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130300.xml index a5ff2459b8..73fd46bef4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130300.xml @@ -1,5 +1,5 @@ - + 31303 @@ -130,4 +130,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130301.xml index 8d61da58f6..a80a82cd4f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130301.xml @@ -1,5 +1,5 @@ - + 31303 @@ -72,4 +72,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130400.xml index 1396ba019d..315d202b36 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130400.xml @@ -1,5 +1,5 @@ - + 31304 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130500.xml index 03804356fe..8fead7714a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130500.xml @@ -1,5 +1,5 @@ - + 31305 @@ -36,4 +36,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130600.xml index 4774f3d4ab..22deacb502 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130600.xml @@ -1,5 +1,5 @@ - + 31306 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130700.xml index 6a424c58ea..3fcfecfdcd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130700.xml @@ -1,5 +1,5 @@ - + 31307 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130701.xml index 1281659b95..4b0463093c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130701.xml @@ -1,5 +1,5 @@ - + 31307 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130900.xml index e8014e8971..83c89722c6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3130900.xml @@ -1,5 +1,5 @@ - + 31309 @@ -86,4 +86,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3131800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3131800.xml index 079526d9e6..31e46fdbb6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3131800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3131800.xml @@ -1,5 +1,5 @@ - + 31318 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3131900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3131900.xml index ae2bf84aef..cdf8a9f934 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3131900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3131900.xml @@ -1,5 +1,5 @@ - + 31319 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3135100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3135100.xml index 4dd1278d97..caf5d20205 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3135100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3135100.xml @@ -1,5 +1,5 @@ - + 31351 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3136600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3136600.xml index a87904816d..bcc26fa7cf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3136600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3136600.xml @@ -1,5 +1,5 @@ - + 31366 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3138600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3138600.xml index a9a9541489..47823de404 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3138600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3138600.xml @@ -1,5 +1,5 @@ - + 31386 @@ -107,4 +107,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141300.xml index 21d84fbab6..7bf08c2b82 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141300.xml @@ -1,5 +1,5 @@ - + 31413 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141400.xml index 3d1229325c..b6df861de7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141400.xml @@ -1,5 +1,5 @@ - + 31414 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141500.xml index 63e2ca7fdc..aa31f97c3e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141500.xml @@ -1,5 +1,5 @@ - + 31415 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141600.xml index 1bec460006..bcd60c83c4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141600.xml @@ -1,5 +1,5 @@ - + 31416 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141700.xml index 60e4778dd6..96300413f1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141700.xml @@ -1,5 +1,5 @@ - + 31417 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141800.xml index 8ab2138e78..f390f89f3e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141800.xml @@ -1,5 +1,5 @@ - + 31418 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141900.xml index 7b6941f4d1..f8afc28bf0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3141900.xml @@ -1,5 +1,5 @@ - + 31419 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142000.xml index 5d3899e9f7..7a5d1ceedd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142000.xml @@ -1,5 +1,5 @@ - + 31420 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142100.xml index c35a2b3ab7..236aad2a43 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142100.xml @@ -1,5 +1,5 @@ - + 31421 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142200.xml index 1d122950e4..6858b456ec 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142200.xml @@ -1,5 +1,5 @@ - + 31422 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142300.xml index cf243f261b..a4bfdcfcd7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142300.xml @@ -1,5 +1,5 @@ - + 31423 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142400.xml index f0eef17f26..1f727940d2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142400.xml @@ -1,5 +1,5 @@ - + 31424 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142500.xml index 77f79efc3a..9580ad707d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142500.xml @@ -1,5 +1,5 @@ - + 31425 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142600.xml index fab5b386b3..6796c56597 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142600.xml @@ -1,5 +1,5 @@ - + 31426 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142700.xml index a44fc322ab..b4ae4053e6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142700.xml @@ -1,5 +1,5 @@ - + 31427 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142800.xml index e5539d5238..95510cf96c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142800.xml @@ -1,5 +1,5 @@ - + 31428 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142900.xml index fc06a66383..57f63b53b1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3142900.xml @@ -1,5 +1,5 @@ - + 31429 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143000.xml index 063f61fb37..4cc499ca88 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143000.xml @@ -1,5 +1,5 @@ - + 31430 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143100.xml index 50cc465abc..14add57056 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143100.xml @@ -1,5 +1,5 @@ - + 31431 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143200.xml index 194f0b87a3..07bb9b3512 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143200.xml @@ -1,5 +1,5 @@ - + 31432 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143300.xml index 21ebbc9ba8..7082b56454 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143300.xml @@ -1,5 +1,5 @@ - + 31433 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143400.xml index fe67847877..a503222fa5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143400.xml @@ -1,5 +1,5 @@ - + 31434 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143500.xml index a256a32890..b0265fa5ef 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143500.xml @@ -1,5 +1,5 @@ - + 31435 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143600.xml index bef64fb21c..0fab588ef1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143600.xml @@ -1,5 +1,5 @@ - + 31436 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143700.xml index dbdd1a1738..686360370d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143700.xml @@ -1,5 +1,5 @@ - + 31437 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143800.xml index 87cc571e71..3333c26636 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143800.xml @@ -1,5 +1,5 @@ - + 31438 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143900.xml index 6e36408c86..32bbce1b32 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3143900.xml @@ -1,5 +1,5 @@ - + 31439 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144000.xml index e45a96ca11..32e1a2d935 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144000.xml @@ -1,5 +1,5 @@ - + 31440 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144100.xml index a915fe79f8..5cb91a2d08 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144100.xml @@ -1,5 +1,5 @@ - + 31441 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144200.xml index 3146bf7dc6..654fd41101 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144200.xml @@ -1,17 +1,17 @@ - + 31442 - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144300.xml index 42c0113a09..7101dc7ca9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144300.xml @@ -1,5 +1,5 @@ - + 31443 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144400.xml index 0fb5fa1de5..d743f68e6c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144400.xml @@ -1,5 +1,5 @@ - + 31444 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144500.xml index c2fce59cd3..de938e45de 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3144500.xml @@ -1,5 +1,5 @@ - + 31445 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156300.xml index ea3f99ad45..8daa3e35d2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156300.xml @@ -1,5 +1,5 @@ - + 31563 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156700.xml index 6d0ee28811..c213b286ba 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156700.xml @@ -1,5 +1,5 @@ - + 31567 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156800.xml index fdb1b568ba..8110e7135a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3156800.xml @@ -1,5 +1,5 @@ - + 31568 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157000.xml index 5484b76ab8..ac69379fcf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157000.xml @@ -1,5 +1,5 @@ - + 31570 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157100.xml index d8fa2029a3..c070491193 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157100.xml @@ -1,5 +1,5 @@ - + 31571 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157200.xml index 4e8398b9fe..83dc91f2ff 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157200.xml @@ -1,5 +1,5 @@ - + 31572 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157300.xml index 69cafd073a..14313bd208 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157300.xml @@ -1,5 +1,5 @@ - + 31573 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157400.xml index 1ac63f46dd..2052f17a66 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157400.xml @@ -1,5 +1,5 @@ - + 31574 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157500.xml index fcf62bee8c..e62610f8ac 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157500.xml @@ -1,5 +1,5 @@ - + 31575 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157600.xml index 9d9447b933..532fd49209 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157600.xml @@ -1,5 +1,5 @@ - + 31576 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157700.xml index b7b667ece6..2cbcd82911 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157700.xml @@ -1,5 +1,5 @@ - + 31577 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157800.xml index 739b5dc625..95f15512e3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157800.xml @@ -1,5 +1,5 @@ - + 31578 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157900.xml index 7446d877cd..b3b990905f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3157900.xml @@ -1,5 +1,5 @@ - + 31579 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166600.xml index b326f8222c..bc22d13140 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166600.xml @@ -1,5 +1,5 @@ - + 31666 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166700.xml index db105df248..ae62f73b31 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166700.xml @@ -1,5 +1,5 @@ - + 31667 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166800.xml index a53bc3746c..dc44cebca3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166800.xml @@ -1,5 +1,5 @@ - + 31668 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166900.xml index 521962b456..dc1a50c4da 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3166900.xml @@ -1,5 +1,5 @@ - + 31669 @@ -10,4 +10,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3167000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3167000.xml index e610f9c0e2..23abfe3c48 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3167000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3167000.xml @@ -1,5 +1,5 @@ - + 31670 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3169600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3169600.xml index 034e1a9975..ecc1433ab0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3169600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3169600.xml @@ -1,5 +1,5 @@ - + 31696 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3169700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3169700.xml index e2db54a589..62e1b5f2e5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3169700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3169700.xml @@ -1,5 +1,5 @@ - + 31697 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175601.xml index 746b4dc1c0..6c0a1b7326 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175601.xml @@ -1,174 +1,174 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175602.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175602.xml index bab8fc8800..5493371fb3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175602.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175602.xml @@ -1,44 +1,44 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175603.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175603.xml index a0b0f1f789..7a63460eac 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175603.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175603.xml @@ -1,120 +1,120 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175604.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175604.xml index 3f2f3f2bb1..7b4a19573c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175604.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175604.xml @@ -1,161 +1,161 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175605.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175605.xml index d3f9c025d4..c756f4ec23 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175605.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175605.xml @@ -1,144 +1,144 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175606.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175606.xml index f5f4030195..e121d0f96e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175606.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175606.xml @@ -1,155 +1,155 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175607.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175607.xml index 376023d33e..4f51da5d22 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175607.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175607.xml @@ -1,162 +1,162 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175608.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175608.xml index d063b94daa..19661dcecf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175608.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3175608.xml @@ -1,119 +1,119 @@ - + 31756 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194500.xml index fb1f967e70..77f8dadd26 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194500.xml @@ -1,5 +1,5 @@ - + 31945 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194501.xml index 4df13d9752..961716e0a5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194501.xml @@ -1,5 +1,5 @@ - + 31945 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194600.xml index b2317a6383..6c2507af23 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194600.xml @@ -1,5 +1,5 @@ - + 31946 @@ -65,4 +65,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194601.xml index f0a36e6d77..b345720e23 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194601.xml @@ -1,5 +1,5 @@ - + 31946 @@ -37,4 +37,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194700.xml index a48a031a06..e52d2ea6ca 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194700.xml @@ -1,5 +1,5 @@ - + 31947 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194701.xml index 921039e71a..eda5f96cc9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194701.xml @@ -1,5 +1,5 @@ - + 31947 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194800.xml index 87904ecd0c..7fe536361e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194800.xml @@ -1,5 +1,5 @@ - + 31948 @@ -82,4 +82,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194801.xml index 5624af6231..7f1450010d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194801.xml @@ -1,5 +1,5 @@ - + 31948 @@ -60,4 +60,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194900.xml index d0796103e1..458666118a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3194900.xml @@ -1,5 +1,5 @@ - + 31949 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195000.xml index 625aab2e35..2f20e43391 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195000.xml @@ -1,5 +1,5 @@ - + 31950 @@ -24,4 +24,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195100.xml index c3891aa8f6..15adde8709 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195100.xml @@ -1,5 +1,5 @@ - + 31951 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195200.xml index c05ffefaae..d530d8fe80 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195200.xml @@ -1,5 +1,5 @@ - + 31952 @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195201.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195201.xml index 720e5dfb11..b28a9d5661 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195201.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195201.xml @@ -1,5 +1,5 @@ - + 31952 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195400.xml index 38355f1962..171cb4bf22 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3195400.xml @@ -1,5 +1,5 @@ - + 31954 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3196200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3196200.xml index f11d4d2fa4..d5528660ee 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3196200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3196200.xml @@ -1,5 +1,5 @@ - + 31962 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3196300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3196300.xml index 2f15dc2a44..8d7e80be97 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3196300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3196300.xml @@ -1,5 +1,5 @@ - + 31963 @@ -14,4 +14,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3197300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3197300.xml index aff89d5009..ab1a5fb358 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3197300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3197300.xml @@ -1,5 +1,5 @@ - + 31973 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3198000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3198000.xml index 869a43a333..d089bac38f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3198000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3198000.xml @@ -1,5 +1,5 @@ - + 31980 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3198900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3198900.xml index 8c31c0dc94..b35e6b2864 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3198900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3198900.xml @@ -1,5 +1,5 @@ - + 31989 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3200700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3200700.xml index 167dd290d3..14ca7d170a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3200700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3200700.xml @@ -1,9 +1,26 @@ - + + 31563 + 31567 + 31568 + 31570 + 31571 + 31572 + 31573 + 31574 + 31575 + 31576 + 31577 + 31578 + 31579 + 31696 + 31697 + 31989 32007 - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3210500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3210500.xml index 70bb097553..5becbd6dfb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3210500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3210500.xml @@ -1,5 +1,5 @@ - + 32105 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3210600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3210600.xml index ab3c21eb2d..9fb0fd6422 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3210600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3210600.xml @@ -1,5 +1,5 @@ - + 32106 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216400.xml index 165958fabc..de56b0e3f7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216400.xml @@ -1,5 +1,5 @@ - + 32164 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216401.xml index e79df3304f..b804eaec0f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216401.xml @@ -1,5 +1,5 @@ - + 32164 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216500.xml index a4f9aa2fdf..70d0a1e8af 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216500.xml @@ -1,5 +1,5 @@ - + 32165 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216501.xml index e46c516d1f..6101e3ce26 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216501.xml @@ -1,5 +1,5 @@ - + 32165 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216600.xml index cb69d3405a..9b021b6711 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216600.xml @@ -1,5 +1,5 @@ - + 32166 @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216700.xml index 909c21f5de..4fdb5e34a1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216700.xml @@ -1,5 +1,5 @@ - + 32167 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216900.xml index ceb575e21f..f86951d7d4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3216900.xml @@ -1,5 +1,5 @@ - + 32169 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3229800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3229800.xml index 36d3f0f827..98040eb41f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3229800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3229800.xml @@ -1,5 +1,6 @@ - + + 32298 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287400.xml index aac7c17549..086cffdf82 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287400.xml @@ -1,5 +1,5 @@ - + 32874 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287500.xml index 7f150cf221..40e5723230 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287500.xml @@ -1,5 +1,5 @@ - + 32875 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287600.xml index ca62ca560f..b35acefc5f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287600.xml @@ -1,5 +1,5 @@ - + 32876 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287700.xml index 6b2ad15882..8c4bb05784 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287700.xml @@ -1,5 +1,5 @@ - + 32877 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287800.xml index 3f406d6f48..398ce99ea1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287800.xml @@ -1,5 +1,5 @@ - + 32878 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287900.xml index b4c46a58c9..826882200d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3287900.xml @@ -1,5 +1,5 @@ - + 32879 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288000.xml index 57c8c44bce..202c50d88f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288000.xml @@ -1,5 +1,5 @@ - + 32880 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288100.xml index 250b028e17..7d8b887d74 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288100.xml @@ -1,5 +1,5 @@ - + 32881 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288200.xml index a3e269826e..b05b7d5fb9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288200.xml @@ -1,5 +1,5 @@ - + 32882 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288300.xml index 1e8c25b2fc..9001118f78 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288300.xml @@ -1,5 +1,5 @@ - + 32883 @@ -45,4 +45,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288700.xml index 251429e17f..82c98cc6d9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3288700.xml @@ -1,5 +1,5 @@ - + 32887 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3289700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3289700.xml index 00afc82b74..36cd1a2ca7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3289700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3289700.xml @@ -1,5 +1,5 @@ - + 32897 @@ -9,11 +9,13 @@ + + @@ -46,7 +48,12 @@ - + + + + + + @@ -76,7 +83,6 @@ - @@ -97,7 +103,6 @@ - @@ -108,4 +113,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3357900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3357900.xml index 76e8f66a9f..3c638dc3ae 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3357900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3357900.xml @@ -1,5 +1,5 @@ - + 33579 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393400.xml index 5524722b09..a4c1ace51f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393400.xml @@ -1,5 +1,5 @@ - + 33934 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393401.xml index b248104a25..1d36c1d793 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393401.xml @@ -1,5 +1,5 @@ - + 33934 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393500.xml index e2716bb9e0..207aa40511 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393500.xml @@ -1,5 +1,5 @@ - + 33935 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393501.xml index 7743cb0c45..3965dd5b9b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393501.xml @@ -1,5 +1,5 @@ - + 33935 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393600.xml index 500205f360..b379393935 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393600.xml @@ -1,5 +1,5 @@ - + 33936 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393700.xml index a9673e1580..8204b13e41 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3393700.xml @@ -1,5 +1,5 @@ - + 33937 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538400.xml index ee50f8f855..50dbb71d5c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538400.xml @@ -1,9 +1,9 @@ - + 35384 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538401.xml index 70b600ec4d..0c6700f1ee 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538401.xml @@ -1,5 +1,5 @@ - + 35384 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538402.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538402.xml index 46a8a7cb2c..023ef09f09 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538402.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538402.xml @@ -1,5 +1,5 @@ - + 35384 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538600.xml index 35e71f6de5..6c83b22671 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538600.xml @@ -1,9 +1,9 @@ - + 35386 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538601.xml index f50562cbe2..ada5fb486d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538601.xml @@ -1,5 +1,5 @@ - + 35386 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538602.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538602.xml index 52b3570e56..b4468d3806 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538602.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538602.xml @@ -1,5 +1,5 @@ - + 35386 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538800.xml index 6f1e7a4e2d..94fa0f35f2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538800.xml @@ -1,9 +1,9 @@ - + 35388 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538801.xml index ef01e41384..c616612ad1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538801.xml @@ -1,5 +1,5 @@ - + 35388 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538802.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538802.xml index 2472dd6ce4..57440ba594 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538802.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3538802.xml @@ -1,5 +1,5 @@ - + 35388 @@ -48,4 +48,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539200.xml index 1869a99f44..e54354d05f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539200.xml @@ -1,9 +1,9 @@ - + 35392 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539201.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539201.xml index 947e416108..77413ff2a9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539201.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539201.xml @@ -1,5 +1,5 @@ - + 35392 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539202.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539202.xml index 7cd4ab31d6..029f7918d8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539202.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539202.xml @@ -1,5 +1,5 @@ - + 35392 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539400.xml index 8fd555c2d4..af0a2e400b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539400.xml @@ -1,9 +1,9 @@ - + 35394 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539401.xml index 5663046576..a1a215804f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539401.xml @@ -1,5 +1,5 @@ - + 35394 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539402.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539402.xml index 73a041fbbb..f8c31378e5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539402.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539402.xml @@ -1,5 +1,5 @@ - + 35394 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539600.xml index d1627e1839..7300df9790 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539600.xml @@ -1,9 +1,9 @@ - + 35396 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539601.xml index 4dfea49275..37a1ff0b7d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539601.xml @@ -1,5 +1,5 @@ - + 35396 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539602.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539602.xml index b0ae647a05..232a1c60db 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539602.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539602.xml @@ -1,5 +1,5 @@ - + 35396 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539800.xml index 4035f3199b..1a1d6fbfd9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539800.xml @@ -1,9 +1,9 @@ - + 35398 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539801.xml index 4b160e42be..b005e91fc0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539801.xml @@ -1,5 +1,5 @@ - + 35398 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539802.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539802.xml index 1f4c981fd1..4e27d60315 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539802.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3539802.xml @@ -1,5 +1,5 @@ - + 35398 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540000.xml index 5eb2550eea..7e7dff5c9e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540000.xml @@ -1,9 +1,9 @@ - + 35400 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540001.xml index 5e3b1ed812..56f709aeaa 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540001.xml @@ -1,5 +1,5 @@ - + 35400 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540002.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540002.xml index df8449fbf9..91664c4540 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540002.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540002.xml @@ -1,5 +1,5 @@ - + 35400 @@ -47,4 +47,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540300.xml index 1b7598cc0f..02d575638c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540300.xml @@ -1,9 +1,9 @@ - + 35403 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540301.xml index 603f859c09..b45fee7699 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540301.xml @@ -1,5 +1,5 @@ - + 35403 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540302.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540302.xml index e6a076ed8c..0b4daa2792 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540302.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540302.xml @@ -1,5 +1,5 @@ - + 35403 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540500.xml index 1e5dd9cd7a..1e3b6b7b1c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540500.xml @@ -1,9 +1,9 @@ - + 35405 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540501.xml index 97c9cd08b4..29b8d2f981 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540501.xml @@ -1,5 +1,5 @@ - + 35405 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540502.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540502.xml index 3e91ce6d2b..5c0cd06f48 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540502.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540502.xml @@ -1,5 +1,5 @@ - + 35405 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540700.xml index 8d43cb672d..f1e2cb9403 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540700.xml @@ -1,9 +1,9 @@ - + 35407 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540701.xml index 2583b6a38a..db2d697f7b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540701.xml @@ -1,5 +1,5 @@ - + 35407 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540702.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540702.xml index 6d426e2483..223ace3856 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540702.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3540702.xml @@ -1,5 +1,5 @@ - + 35407 @@ -43,4 +43,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543900.xml index ef77885181..3f94d66939 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543900.xml @@ -1,9 +1,9 @@ - + 35439 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543901.xml index 39f13ee2ac..1136de24fd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543901.xml @@ -1,5 +1,5 @@ - + 35439 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543902.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543902.xml index 26069b941a..8d77b4b9ec 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543902.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3543902.xml @@ -1,5 +1,5 @@ - + 35439 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544100.xml index f22b3a29da..02bd80580a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544100.xml @@ -1,9 +1,9 @@ - + 35441 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544101.xml index 468d29021f..0e29dcd193 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544101.xml @@ -1,5 +1,5 @@ - + 35441 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544102.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544102.xml index 52f32828d4..cd5266edb1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544102.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544102.xml @@ -1,5 +1,5 @@ - + 35441 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544300.xml index c979f1aebb..116d282b61 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544300.xml @@ -1,9 +1,9 @@ - + 35443 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544301.xml index 0c4edf9a31..b3d96407ed 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544301.xml @@ -1,5 +1,5 @@ - + 35443 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544302.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544302.xml index 25306ab486..5eb1294acd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544302.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544302.xml @@ -1,5 +1,5 @@ - + 35443 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544500.xml index 4c9186dc9b..53afa9685b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544500.xml @@ -1,9 +1,9 @@ - + 35445 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544501.xml index 8640569f3d..6d02dca477 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544501.xml @@ -1,5 +1,5 @@ - + 35445 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544502.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544502.xml index ec40cc64de..264626f1fc 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544502.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544502.xml @@ -1,5 +1,5 @@ - + 35445 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544700.xml index 17e8bd00e3..e8195ff43b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544700.xml @@ -1,9 +1,9 @@ - + 35447 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544701.xml index 1a3dcfd2ef..dcda2135f5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544701.xml @@ -1,5 +1,5 @@ - + 35447 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544702.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544702.xml index 19fe5aeccd..40a40c0c41 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544702.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544702.xml @@ -1,5 +1,5 @@ - + 35447 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544900.xml index 0adb8a2b30..8cdb0740a3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544900.xml @@ -1,9 +1,9 @@ - + 35449 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544901.xml index 0528b75878..e8fa1086d8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544901.xml @@ -1,5 +1,5 @@ - + 35449 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544902.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544902.xml index b42c87c3a0..191a3af046 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544902.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3544902.xml @@ -1,5 +1,5 @@ - + 35449 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545100.xml index 1cd1aaa4a7..757e4e3022 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545100.xml @@ -1,9 +1,9 @@ - + 35451 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545101.xml index 3ca1ace28e..e73a5a039a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545101.xml @@ -1,5 +1,5 @@ - + 35451 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545102.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545102.xml index bc183bd9be..9531082d92 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545102.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545102.xml @@ -1,5 +1,5 @@ - + 35451 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545300.xml index bd75af7679..ffd091f8a5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545300.xml @@ -1,9 +1,9 @@ - + 35453 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545301.xml index 1879bef821..49958cc001 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545301.xml @@ -1,5 +1,5 @@ - + 35453 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545302.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545302.xml index 7d87c620cf..6e7fa0cd15 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545302.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545302.xml @@ -1,5 +1,5 @@ - + 35453 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545500.xml index 392619e352..343ec97ad2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545500.xml @@ -1,9 +1,9 @@ - + 35455 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545501.xml index 963ad988c1..8280c0a99a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545501.xml @@ -1,5 +1,5 @@ - + 35455 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545502.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545502.xml index e7b9bab43d..02d33fdef7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545502.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545502.xml @@ -1,5 +1,5 @@ - + 35455 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545700.xml index b62a44d7ab..a6b392ce7b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545700.xml @@ -1,9 +1,9 @@ - + 35457 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545701.xml index 17e12e4a6c..ba5813d069 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545701.xml @@ -1,5 +1,5 @@ - + 35457 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545702.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545702.xml index 1b0dfb721e..0e56127b54 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545702.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545702.xml @@ -1,5 +1,5 @@ - + 35457 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545900.xml index 17b28d399a..b723f46803 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545900.xml @@ -1,9 +1,9 @@ - + 35459 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545901.xml index 8b87bb8d96..e761f09bbf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545901.xml @@ -1,5 +1,5 @@ - + 35459 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545902.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545902.xml index 8f6cae0ed1..3c3fe6f3e8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545902.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3545902.xml @@ -1,5 +1,5 @@ - + 35459 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546100.xml index 5075b488df..753e0a7579 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546100.xml @@ -1,9 +1,9 @@ - + 35461 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546101.xml index f85ef9e588..608ec55b5d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546101.xml @@ -1,5 +1,5 @@ - + 35461 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546102.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546102.xml index 67e4a54af6..c8b332b435 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546102.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546102.xml @@ -1,5 +1,5 @@ - + 35461 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546300.xml index 408f6c8d9d..8dc912e3e2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546300.xml @@ -1,9 +1,9 @@ - + 35463 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546301.xml index e8cb2abc0f..435d212576 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546301.xml @@ -1,5 +1,5 @@ - + 35463 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546302.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546302.xml index a2496f4eee..9170a51817 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546302.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546302.xml @@ -1,5 +1,5 @@ - + 35463 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546500.xml index 18357b91d1..76c62e3cf5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546500.xml @@ -1,9 +1,9 @@ - + 35465 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546501.xml index 68ff755bf1..98b5bd359b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546501.xml @@ -1,5 +1,5 @@ - + 35465 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546502.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546502.xml index de82f242d3..ed8306e9ea 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546502.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546502.xml @@ -1,5 +1,5 @@ - + 35465 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546700.xml index cbf63aadf8..ba8159e65c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546700.xml @@ -1,9 +1,9 @@ - + 35467 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546701.xml index 41cac8a0c4..b6fe2eafcf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546701.xml @@ -1,5 +1,5 @@ - + 35467 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546702.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546702.xml index f3d464cbdf..27b63ce264 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546702.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3546702.xml @@ -1,5 +1,5 @@ - + 35467 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556600.xml index ffe706469b..e05cd5a14b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556600.xml @@ -1,9 +1,9 @@ - + 35566 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556601.xml index c7b5d2d45d..36443d9392 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556601.xml @@ -1,5 +1,5 @@ - + 35566 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556602.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556602.xml index 22a77702f0..8deb389256 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556602.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556602.xml @@ -1,5 +1,5 @@ - + 35566 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556800.xml index bb75834da6..22b5cc9911 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556800.xml @@ -1,9 +1,9 @@ - + 35568 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556801.xml index 209872b603..5bea0a549e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556801.xml @@ -1,5 +1,5 @@ - + 35568 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556802.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556802.xml index c383cbc628..cd9247c904 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556802.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3556802.xml @@ -1,5 +1,5 @@ - + 35568 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557000.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557000.xml index 80557c9571..5f52b282d9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557000.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557000.xml @@ -1,9 +1,9 @@ - + 35570 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557001.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557001.xml index e79dddb192..0dbfab1fed 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557001.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557001.xml @@ -1,5 +1,5 @@ - + 35570 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557002.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557002.xml index 0ccb32be94..50a1a5c8f3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557002.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557002.xml @@ -1,5 +1,5 @@ - + 35570 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557200.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557200.xml index 2f78b6d2f3..de4e798050 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557200.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557200.xml @@ -1,9 +1,9 @@ - + 35572 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557201.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557201.xml index 156066ccf4..14acd30412 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557201.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557201.xml @@ -1,5 +1,5 @@ - + 35572 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557202.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557202.xml index fbb6ada0ef..8532267bc9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557202.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557202.xml @@ -1,5 +1,5 @@ - + 35572 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557400.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557400.xml index b3281ad3de..40d891d9b8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557400.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557400.xml @@ -1,9 +1,9 @@ - + 35574 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557401.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557401.xml index 0b1e3b9821..96744ad937 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557401.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557401.xml @@ -1,5 +1,5 @@ - + 35574 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557402.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557402.xml index 25a9a721de..e633f058c4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557402.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557402.xml @@ -1,5 +1,5 @@ - + 35574 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557600.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557600.xml index 827c7a9302..1bf2b20fae 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557600.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557600.xml @@ -1,9 +1,9 @@ - + 35576 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557601.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557601.xml index b64ff1fe65..ff932dc94c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557601.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557601.xml @@ -1,5 +1,5 @@ - + 35576 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557602.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557602.xml index af54f7275f..6a2d49663b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557602.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557602.xml @@ -1,5 +1,5 @@ - + 35576 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557800.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557800.xml index 54702e0036..f6d615a3e5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557800.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557800.xml @@ -1,9 +1,9 @@ - + 35578 - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557801.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557801.xml index 08156b377b..7a04af2d7e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557801.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557801.xml @@ -1,5 +1,5 @@ - + 35578 @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557802.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557802.xml index 9f7a09f8ed..27637ed7af 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557802.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3557802.xml @@ -1,5 +1,5 @@ - + 35578 @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672100.xml index 3f451a717e..3325982c6a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672100.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672101.xml index c03c623470..c90d15f3af 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672101.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672102.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672102.xml index 050f8aad74..1dc0569b7e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672102.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672102.xml @@ -1,5 +1,5 @@ - + 36721 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672300.xml index 310123b491..8402c24d50 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672300.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672301.xml index c0675987e7..eed821b6fa 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672301.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672302.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672302.xml index fbae3053b0..57fd05555f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672302.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672302.xml @@ -1,5 +1,5 @@ - + 36723 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672500.xml index cd69a4d152..279366c886 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672500.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672501.xml index 38957f1317..a44266b326 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672501.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672502.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672502.xml index eb167dfa6b..904fe752d9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672502.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672502.xml @@ -1,5 +1,5 @@ - + 36725 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672700.xml index 1451249349..8353518970 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672700.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672701.xml index 6777b33168..dd494e389c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672701.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672702.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672702.xml index 0f11e81451..9699d4b69c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672702.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672702.xml @@ -1,5 +1,5 @@ - + 36727 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672900.xml index 431a45d293..493f7671f0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672900.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672901.xml index b1bf700e64..8ec803287b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672901.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672902.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672902.xml index 1c86e28ae8..49f6a174ed 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672902.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3672902.xml @@ -1,5 +1,5 @@ - + 36729 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673100.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673100.xml index ac390e3487..0a3e95adf4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673100.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673100.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673101.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673101.xml index 597b8b7636..144ef10545 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673101.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673101.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673102.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673102.xml index 199d26a901..a0919c5f22 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673102.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673102.xml @@ -1,5 +1,5 @@ - + 36731 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673300.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673300.xml index 8648b1abde..6f1b72a3bb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673300.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673300.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673301.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673301.xml index 721d28750a..05911ed2fa 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673301.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673301.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673302.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673302.xml index 0243ff4d28..24b3ec9ba0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673302.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673302.xml @@ -1,5 +1,5 @@ - + 36733 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673500.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673500.xml index 0a6199fb86..115adfb7e6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673500.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673500.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673501.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673501.xml index c9b2613e67..7a3b5f7655 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673501.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673501.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673502.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673502.xml index b5abe67078..e022ac516d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673502.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673502.xml @@ -1,5 +1,5 @@ - + 36735 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673700.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673700.xml index c6c91b2c5a..03214db660 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673700.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673700.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673701.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673701.xml index af3738b2e0..50ca337f69 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673701.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673701.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673702.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673702.xml index e36d3d5e61..809bd6cb74 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673702.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673702.xml @@ -1,5 +1,5 @@ - + 36737 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673900.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673900.xml index f9c3700a88..ab9a0c3ebc 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673900.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673900.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673901.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673901.xml index 9cdd79e334..69395e9fb1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673901.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673901.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673902.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673902.xml index 7d13911629..1e2fdfd3da 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673902.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/buylists/3673902.xml @@ -1,5 +1,5 @@ - + 36739 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/zone.htm b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/zone.htm index 8fabc38c8b..4db84a7ac1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/zone.htm +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/html/admin/zone.htm @@ -14,7 +14,7 @@
Peace:%PEACE%
Pvp:%PVP%
Siege:%SIEGE%
-
Town:%TOWN%
+
Tax:%TAX%
Castle:%CASTLE%
Fort:%FORT%
HQ:%HQ%
diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/1004.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/1004.xml deleted file mode 100644 index 0e82576b63..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/1004.xml +++ /dev/null @@ -1,338 +0,0 @@ - - - - 30283 - 30298 - 30300 - 30307 - 30317 - 30363 - 30458 - 30471 - 30526 - 30527 - 30564 - 30678 - 30688 - 30846 - 30898 - 31271 - 31316 - 31583 - 31960 - 31990 - 32159 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/719.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/719.xml index 2e80baacdf..8dd350e3e5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/719.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/719.xml @@ -24,11 +24,11 @@ - - - - - + + + + +
@@ -40,11 +40,11 @@ - - - - - + + + + + @@ -56,11 +56,11 @@ - - - - - + + + + + @@ -72,11 +72,11 @@ - - - - - + + + + + @@ -88,11 +88,11 @@ - - - - - + + + + + @@ -104,10 +104,10 @@ - - - - - + + + + +
\ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/custom/600010.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/custom/600010.xml index 779216e9b3..e9e30d206b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/custom/600010.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/multisell/custom/600010.xml @@ -7,9 +7,11 @@ - + + - + +
@@ -17,9 +19,11 @@ - + + - + +
@@ -29,9 +33,11 @@ - + + - + +
@@ -39,17 +45,21 @@ - + + - + + - + + - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java index 735f4492f7..a23bedab7d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/ai/others/DelusionTeleport/DelusionTeleport.java @@ -19,11 +19,10 @@ package ai.others.DelusionTeleport; import java.util.HashMap; import java.util.Map; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; +import com.l2jmobius.gameserver.model.variables.PlayerVariables; import ai.AbstractNpcAI; @@ -50,20 +49,18 @@ public final class DelusionTeleport extends AbstractNpcAI new Location(-114597, -152501, -6750), new Location(-114589, -154162, -6750) }; - // Player Variables - private static final String DELUSION_RETURN = "DELUSION_RETURN"; private static final Map RETURN_LOCATIONS = new HashMap<>(); static { RETURN_LOCATIONS.put(0, new Location(43835, -47749, -792)); // Undefined origin, return to Rune - RETURN_LOCATIONS.put(7, new Location(-14023, 123677, -3112)); // Gludio - RETURN_LOCATIONS.put(8, new Location(18101, 145936, -3088)); // Dion - RETURN_LOCATIONS.put(10, new Location(80905, 56361, -1552)); // Oren - RETURN_LOCATIONS.put(14, new Location(42772, -48062, -792)); // Rune - RETURN_LOCATIONS.put(15, new Location(108469, 221690, -3592)); // Heine - RETURN_LOCATIONS.put(17, new Location(85991, -142234, -1336)); // Schuttgart + RETURN_LOCATIONS.put(20, new Location(-14023, 123677, -3112)); // Gludio + RETURN_LOCATIONS.put(30, new Location(18101, 145936, -3088)); // Dion + RETURN_LOCATIONS.put(40, new Location(80905, 56361, -1552)); // Heine + RETURN_LOCATIONS.put(50, new Location(108469, 221690, -3592)); // Oren + RETURN_LOCATIONS.put(60, new Location(85991, -142234, -1336)); // Schuttgart + RETURN_LOCATIONS.put(70, new Location(42772, -48062, -792)); // Rune } private DelusionTeleport() @@ -77,16 +74,15 @@ public final class DelusionTeleport extends AbstractNpcAI { if (npc.getId() == NPCS[0]) // Pathfinder Worker { - final L2TownZone town = TownManager.getTown(npc.getX(), npc.getY(), npc.getZ()); - final int townId = ((town == null) ? 0 : town.getTownId()); - player.getVariables().set(DELUSION_RETURN, townId); + final int locId = npc.getParameters().getInt("Level", -1); + player.getVariables().set(PlayerVariables.DELUSION_RETURN, RETURN_LOCATIONS.containsKey(locId) ? locId : 0); player.teleToLocation(HALL_LOCATIONS[getRandom(HALL_LOCATIONS.length)], false); } else { - final int townId = player.getVariables().getInt(DELUSION_RETURN, 0); + final int townId = player.getVariables().getInt(PlayerVariables.DELUSION_RETURN, 0); player.teleToLocation(RETURN_LOCATIONS.get(townId), true); - player.getVariables().remove(DELUSION_RETURN); + player.getVariables().remove(PlayerVariables.DELUSION_RETURN); } return super.onTalk(npc, player); } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java index 967d248bff..480462fea7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java @@ -162,7 +162,7 @@ public class AdminElement implements IAdminCommandHandler } else { - itemInstance.setAttribute(new AttributeHolder(type, value)); + itemInstance.setAttribute(new AttributeHolder(type, value), true); } player.getInventory().equipItem(itemInstance); diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java index dde2ae8058..dfd8ab322b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java @@ -19,9 +19,10 @@ package handlers.admincommandhandlers; import java.util.logging.Logger; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; +import com.l2jmobius.gameserver.data.xml.impl.MultisellData; import com.l2jmobius.gameserver.handler.IAdminCommandHandler; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -40,7 +41,9 @@ public class AdminShop implements IAdminCommandHandler private static final String[] ADMIN_COMMANDS = { "admin_buy", - "admin_gmshop" + "admin_gmshop", + "admin_multisell", + "admin_exc_multisell" }; @Override @@ -61,6 +64,30 @@ public class AdminShop implements IAdminCommandHandler { AdminHtml.showAdminHtml(activeChar, "gmshops.htm"); } + else if (command.startsWith("admin_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(16).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } + else if (command.toLowerCase().startsWith("admin_exc_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(20).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, true); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } return true; } @@ -82,17 +109,16 @@ public class AdminShop implements IAdminCommandHandler _log.warning("admin buylist failed:" + command); } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); - + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList != null) { - activeChar.sendPacket(new BuyList(buyList, activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(buyList, activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else { _log.warning("no buylist with id:" + val); + activeChar.sendPacket(ActionFailed.STATIC_PACKET); } - activeChar.sendPacket(ActionFailed.STATIC_PACKET); } } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java index cfe7ee4957..d17921338b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java @@ -114,7 +114,6 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%PEACE%", activeChar.isInsideZone(ZoneId.PEACE) ? "YES" : "NO"); adminReply.replace("%PVP%", activeChar.isInsideZone(ZoneId.PVP) ? "YES" : "NO"); adminReply.replace("%SIEGE%", activeChar.isInsideZone(ZoneId.SIEGE) ? "YES" : "NO"); - adminReply.replace("%TOWN%", activeChar.isInsideZone(ZoneId.TOWN) ? "YES" : "NO"); adminReply.replace("%CASTLE%", activeChar.isInsideZone(ZoneId.CASTLE) ? "YES" : "NO"); adminReply.replace("%FORT%", activeChar.isInsideZone(ZoneId.FORT) ? "YES" : "NO"); adminReply.replace("%HQ%", activeChar.isInsideZone(ZoneId.HQ) ? "YES" : "NO"); @@ -128,6 +127,7 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%DANGER%", activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "YES" : "NO"); adminReply.replace("%NOSTORE%", activeChar.isInsideZone(ZoneId.NO_STORE) ? "YES" : "NO"); adminReply.replace("%SCRIPT%", activeChar.isInsideZone(ZoneId.SCRIPT) ? "YES" : "NO"); + adminReply.replace("%TAX%", (activeChar.isInsideZone(ZoneId.TAX) ? "YES" : "NO")); final StringBuilder zones = new StringBuilder(100); for (L2ZoneType zone : ZoneManager.getInstance().getZones(activeChar)) diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/bypasshandlers/Wear.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/bypasshandlers/Wear.java index 9291747b2a..40de431ce5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/bypasshandlers/Wear.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/bypasshandlers/Wear.java @@ -24,7 +24,7 @@ import com.l2jmobius.gameserver.data.xml.impl.BuyListData; import com.l2jmobius.gameserver.handler.IBypassHandler; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.ShopPreviewList; @@ -70,7 +70,7 @@ public class Wear implements IBypassHandler private static void showWearWindow(L2PcInstance player, int val) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/communityboard/HomeBoard.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/communityboard/HomeBoard.java index b39b9f0b38..9f7d9fb2f8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/communityboard/HomeBoard.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/communityboard/HomeBoard.java @@ -154,7 +154,7 @@ public final class HomeBoard implements IParseBoardHandler { final String page = command.replace("_bbssell;", ""); returnHtml = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/Custom/" + page + ".html"); - activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else if (command.startsWith("_bbsteleport")) diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/communityboard/RegionBoard.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/communityboard/RegionBoard.java index 7a9b5fd57d..ffb50fbf7b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/communityboard/RegionBoard.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/communityboard/RegionBoard.java @@ -18,6 +18,7 @@ package handlers.communityboard; import com.l2jmobius.gameserver.cache.HtmCache; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.handler.CommunityBoardHandler; import com.l2jmobius.gameserver.handler.IWriteBoardHandler; import com.l2jmobius.gameserver.instancemanager.CastleManager; @@ -64,7 +65,7 @@ public class RegionBoard implements IWriteBoardHandler link = link.replace("%region_name%", String.valueOf(REGIONS[i])); link = link.replace("%region_owning_clan%", (clan != null ? clan.getName() : "NPC")); link = link.replace("%region_owning_clan_alliance%", ((clan != null) && (clan.getAllyName() != null) ? clan.getAllyName() : "")); - link = link.replace("%region_tax_rate%", (castle.getTaxRate() * 100) + "%"); + link = link.replace("%region_tax_rate%", castle.getTaxPercent(TaxType.BUY) + "%"); sb.append(link); } diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java index 9e555bb17c..fb13b89a3e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java @@ -139,7 +139,7 @@ public final class ConvertItem extends AbstractEffect if (elementals != null) { - newItem.setAttribute(elementals); + newItem.setAttribute(elementals, true); } newItem.setEnchantLevel(enchantLevel); player.getInventory().equipItem(newItem); diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/itemhandlers/Seed.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/itemhandlers/Seed.java index b2a011e238..a5c7d19397 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/itemhandlers/Seed.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/handlers/itemhandlers/Seed.java @@ -22,13 +22,13 @@ import com.l2jmobius.Config; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.handler.IItemHandler; import com.l2jmobius.gameserver.instancemanager.CastleManorManager; -import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Seed; import com.l2jmobius.gameserver.model.actor.L2Playable; import com.l2jmobius.gameserver.model.actor.instance.L2ChestInstance; import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.entity.Castle; import com.l2jmobius.gameserver.model.holders.ItemSkillHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -81,7 +81,9 @@ public class Seed implements IItemHandler { return false; } - else if (seed.getCastleId() != MapRegionManager.getInstance().getAreaCastle(playable)) // TODO: replace me with tax zone + + final Castle taxCastle = target.getTaxCastle(); + if ((taxCastle == null) || (seed.getCastleId() != taxCastle.getResidenceId())) { playable.sendPacket(SystemMessageId.THIS_SEED_MAY_NOT_BE_SOWN_HERE); return false; diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/items/15400-15499.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/items/15400-15499.xml index 9b6892721f..e18e7dafd6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/items/15400-15499.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/items/15400-15499.xml @@ -1301,6 +1301,7 @@ + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/buylist.xsd b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/buylist.xsd index e89cbf146d..6e842a25a6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/buylist.xsd +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/buylist.xsd @@ -30,9 +30,11 @@ + + \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/multisell.xsd index 196695f377..99107d2612 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/multisell.xsd +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/multisell.xsd @@ -22,7 +22,6 @@ - @@ -40,7 +39,8 @@ - + + \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/zones/custom_town.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/zones/custom_town.xml deleted file mode 100644 index 716130acf4..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/zones/custom_town.xml +++ /dev/null @@ -1,639 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/zones/tax.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/zones/tax.xml index 7a8eb7d1f9..79393d8e7f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/zones/tax.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/zones/tax.xml @@ -1,6 +1,5 @@ - - + @@ -313,7 +312,7 @@ - + diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/Config.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/Config.java index 841ae086c8..7bbc910e32 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/Config.java @@ -237,7 +237,6 @@ public final class Config public static double ALT_GAME_CREATION_XP_RATE; public static double ALT_GAME_CREATION_RARE_XPSP_RATE; public static double ALT_GAME_CREATION_SP_RATE; - public static boolean ALT_BLACKSMITH_USE_RECIPES; public static boolean ALT_CLAN_LEADER_INSTANT_ACTIVATION; public static int ALT_CLAN_JOIN_DAYS; public static int ALT_CLAN_CREATE_DAYS; @@ -1658,7 +1657,6 @@ public final class Config ALT_GAME_CREATION_XP_RATE = Character.getDouble("AltGameCreationXpRate", 1); ALT_GAME_CREATION_SP_RATE = Character.getDouble("AltGameCreationSpRate", 1); ALT_GAME_CREATION_RARE_XPSP_RATE = Character.getDouble("AltGameCreationRareXpSpRate", 2); - ALT_BLACKSMITH_USE_RECIPES = Character.getBoolean("AltBlacksmithUseRecipes", true); ALT_CLAN_LEADER_INSTANT_ACTIVATION = Character.getBoolean("AltClanLeaderInstantActivation", false); ALT_CLAN_JOIN_DAYS = Character.getInt("DaysBeforeJoinAClan", 1); ALT_CLAN_CREATE_DAYS = Character.getInt("DaysBeforeCreateAClan", 10); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java index 8c25ec2846..33e2d0df1d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java @@ -28,15 +28,14 @@ import java.util.logging.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; /** @@ -47,7 +46,7 @@ public final class BuyListData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(BuyListData.class.getName()); - private final Map _buyLists = new HashMap<>(); + private final Map _buyLists = new HashMap<>(); private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); protected BuyListData() @@ -77,7 +76,7 @@ public final class BuyListData implements IGameXmlReader final int itemId = rs.getInt("item_id"); final long count = rs.getLong("count"); final long nextRestockTime = rs.getLong("next_restock_time"); - final L2BuyList buyList = getBuyList(buyListId); + final ProductList buyList = getBuyList(buyListId); if (buyList == null) { LOGGER.warning("BuyList found in database but not loaded from xml! BuyListId: " + buyListId); @@ -108,71 +107,44 @@ public final class BuyListData implements IGameXmlReader try { final int buyListId = Integer.parseInt(f.getName().replaceAll(".xml", "")); - - for (Node node = doc.getFirstChild(); node != null; node = node.getNextSibling()) + forEach(doc, "list", (list) -> { - if ("list".equalsIgnoreCase(node.getNodeName())) + final int defaultBaseTax = parseInteger(list.getAttributes(), "baseTax", 0); + final ProductList buyList = new ProductList(buyListId); + forEach(list, (node) -> { - final L2BuyList buyList = new L2BuyList(buyListId); - for (Node list_node = node.getFirstChild(); list_node != null; list_node = list_node.getNextSibling()) + switch (node.getNodeName()) { - if ("item".equalsIgnoreCase(list_node.getNodeName())) + case "item": { - int itemId = -1; - long price = -1; - long restockDelay = -1; - long count = -1; - final NamedNodeMap attrs = list_node.getAttributes(); - Node attr = attrs.getNamedItem("id"); - itemId = Integer.parseInt(attr.getNodeValue()); - attr = attrs.getNamedItem("price"); - if (attr != null) - { - price = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("restock_delay"); - if (attr != null) - { - restockDelay = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("count"); - if (attr != null) - { - count = Long.parseLong(attr.getNodeValue()); - } + final NamedNodeMap attrs = node.getAttributes(); + + final int itemId = parseInteger(attrs, "id"); final L2Item item = ItemTable.getInstance().getTemplate(itemId); if (item != null) { - if ((price > -1) && (item.getReferencePrice() > price) && (buyList.getNpcsAllowed() != null)) - { - LOGGER.warning("Item price is too low. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); - LOGGER.warning("Setting price to reference price " + item.getReferencePrice() + " instead of " + price + "."); - buyList.addProduct(new Product(buyList.getListId(), item, item.getReferencePrice(), restockDelay, count)); - } - else - { - buyList.addProduct(new Product(buyList.getListId(), item, price, restockDelay, count)); - } + final long price = parseLong(attrs, "price", -1L); + final long restockDelay = parseLong(attrs, "restock_delay", -1L); + final long count = parseLong(attrs, "count", -1L); + final int baseTax = parseInteger(attrs, "baseTax", defaultBaseTax); + + buyList.addProduct(new Product(buyListId, item, price, restockDelay, count, baseTax)); } else { - LOGGER.warning("Item not found. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); + LOGGER.warning("Item not found. BuyList:" + buyListId + " ItemID:" + itemId + " File:" + f); } + break; } - else if ("npcs".equalsIgnoreCase(list_node.getNodeName())) + case "npcs": { - for (Node npcs_node = list_node.getFirstChild(); npcs_node != null; npcs_node = npcs_node.getNextSibling()) - { - if ("npc".equalsIgnoreCase(npcs_node.getNodeName())) - { - buyList.addAllowedNpc(Integer.parseInt(npcs_node.getTextContent())); - } - } + forEach(node, "npc", (npcNode) -> buyList.addAllowedNpc(Integer.parseInt(npcNode.getTextContent()))); + break; } } - _buyLists.put(buyList.getListId(), buyList); - } - } + }); + _buyLists.put(buyListId, buyList); + }); } catch (Exception e) { @@ -186,7 +158,7 @@ public final class BuyListData implements IGameXmlReader return NUMERIC_FILTER; } - public L2BuyList getBuyList(int listId) + public ProductList getBuyList(int listId) { return _buyLists.get(listId); } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 01bd5c5942..8f4f7463aa 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -18,50 +18,44 @@ package com.l2jmobius.gameserver.data.xml.impl; import java.io.File; import java.io.FileFilter; +import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import org.w3c.dom.DOMException; import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.SpecialItemType; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ListContainer; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.ExPCCafePointInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.MultisellListHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.serverpackets.MultiSellList; -import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; import com.l2jmobius.gameserver.util.Util; public final class MultisellData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(MultisellData.class.getName()); - private final Map _entries = new HashMap<>(); - public static final int PAGE_SIZE = 40; - // Special IDs. - public static final int PC_CAFE_POINTS = -100; - public static final int CLAN_REPUTATION = -200; - public static final int FAME = -300; - public static final int FIELD_CYCLE_POINTS = -400; - public static final int RAIDBOSS_POINTS = -500; - // Misc private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); + private final Map _multisells = new HashMap<>(); + protected MultisellData() { load(); @@ -70,15 +64,14 @@ public final class MultisellData implements IGameXmlReader @Override public void load() { - _entries.clear(); + _multisells.clear(); parseDatapackDirectory("data/multisell", false); if (Config.CUSTOM_MULTISELL_LOAD) { parseDatapackDirectory("data/multisell/custom", false); } - verify(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _entries.size() + " multisell lists."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _multisells.size() + " multisell lists."); } @Override @@ -86,73 +79,88 @@ public final class MultisellData implements IGameXmlReader { try { - final int id = Integer.parseInt(f.getName().replaceAll(".xml", "")); - int entryId = 1; - Node att; - final ListContainer list = new ListContainer(id); - - for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) + forEach(doc, "list", listNode -> { - if ("list".equalsIgnoreCase(n.getNodeName())) + final StatsSet set = new StatsSet(parseAttributes(listNode)); + final int listId = Integer.parseInt(f.getName().substring(0, f.getName().length() - 4)); + final List entries = new ArrayList<>(listNode.getChildNodes().getLength()); + + forEach(listNode, itemNode -> { - list.setApplyTaxes(parseBoolean(n.getAttributes(), "applyTaxes", false)); - list.setIsChanceMultisell(parseBoolean(n.getAttributes(), "isChanceMultisell", false)); - list.setMaintainEnchantment(parseBoolean(n.getAttributes(), "maintainEnchantment", false)); - - att = n.getAttributes().getNamedItem("useRate"); - if (att != null) + if ("item".equalsIgnoreCase(itemNode.getNodeName())) { - try + final List ingredients = new ArrayList<>(1); + final List products = new ArrayList<>(1); + final MultisellEntryHolder entry = new MultisellEntryHolder(ingredients, products); + + for (Node d = itemNode.getFirstChild(); d != null; d = d.getNextSibling()) { - - list.setUseRate(Double.valueOf(att.getNodeValue())); - if (list.getUseRate() <= 1e-6) + if ("ingredient".equalsIgnoreCase(d.getNodeName())) { - throw new NumberFormatException("The value cannot be 0"); // threat 0 as invalid value - } - } - catch (NumberFormatException e) - { - try - { - list.setUseRate(Config.class.getField(att.getNodeValue()).getDouble(Config.class)); - } - catch (Exception e1) - { - LOGGER.warning(e1.getMessage() + doc.getLocalName()); - list.setUseRate(1.0); - } - } - catch (DOMException e) - { - LOGGER.warning(e.getMessage() + doc.getLocalName()); - } - } - - for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) - { - if ("item".equalsIgnoreCase(d.getNodeName())) - { - final Entry e = parseEntry(d, entryId++, list); - list.getEntries().add(e); - } - else if ("npcs".equalsIgnoreCase(d.getNodeName())) - { - for (Node b = d.getFirstChild(); b != null; b = b.getNextSibling()) - { - if ("npc".equalsIgnoreCase(b.getNodeName())) + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final ItemHolder ingredient = new ItemHolder(id, count); + + if (itemExists(ingredient)) { - if (Util.isDigit(b.getTextContent())) + ingredients.add(ingredient); + } + else + { + LOGGER.warning("Invalid ingredient id or count for itemId: " + ingredient.getId() + ", count: " + ingredient.getCount() + " in list: " + listId); + continue; + } + } + else if ("production".equalsIgnoreCase(d.getNodeName())) + { + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count); + + if (itemExists(product)) + { + // Check chance only of items that have set chance. Items without chance (NaN) are used for displaying purposes. + if ((!Double.isNaN(chance) && (chance < 0)) || (chance > 100)) { - list.allowNpc(Integer.parseInt(b.getTextContent())); + LOGGER.warning("Invalid chance for itemId: " + product.getId() + ", count: " + product.getCount() + ", chance: " + chance + " in list: " + listId); + continue; } + + products.add(product); + } + else + { + LOGGER.warning("Invalid product id or count for itemId: " + product.getId() + ", count: " + product.getCount() + " in list: " + listId); + continue; } } } + + final double totalChance = products.stream().filter(i -> !Double.isNaN(i.getChance())).mapToDouble(ItemChanceHolder::getChance).sum(); + if (totalChance > 100) + { + LOGGER.warning("Products' total chance of " + totalChance + "% exceeds 100% for list: " + listId + " at entry " + entries.size() + 1 + "."); + } + + entries.add(entry); } - } - } - _entries.put(id, list); + else if ("npcs".equalsIgnoreCase(itemNode.getNodeName())) + { + // Initialize NPCs with the size of child nodes. + final Set allowNpc = new HashSet<>(itemNode.getChildNodes().getLength()); + forEach(itemNode, n -> "npc".equalsIgnoreCase(n.getNodeName()) && Util.isDigit(n.getTextContent()), n -> allowNpc.add(Integer.parseInt(n.getTextContent()))); + + // Add npcs to stats set. + set.set("allowNpc", allowNpc); + } + }); + + set.set("listId", listId); + set.set("entries", entries); + + _multisells.put(listId, new MultisellListHolder(set)); + }); } catch (Exception e) { @@ -166,44 +174,6 @@ public final class MultisellData implements IGameXmlReader return NUMERIC_FILTER; } - private final Entry parseEntry(Node n, int entryId, ListContainer list) - { - final Node first = n.getFirstChild(); - final Entry entry = new Entry(entryId); - - NamedNodeMap attrs; - Node att; - StatsSet set; - - for (n = first; n != null; n = n.getNextSibling()) - { - if ("ingredient".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addIngredient(new Ingredient(set)); - } - else if ("production".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addProduct(new Ingredient(set)); - } - } - - return entry; - } - /** * This will generate the multisell list for the items.
* There exist various parameters in multisells that affect the way they will appear: @@ -230,38 +200,36 @@ public final class MultisellData implements IGameXmlReader * @param player * @param npc * @param inventoryOnly - * @param productMultiplier * @param ingredientMultiplier + * @param productMultiplier */ - public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double productMultiplier, double ingredientMultiplier) + public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double ingredientMultiplier, double productMultiplier) { - final ListContainer template = _entries.get(listId); + final MultisellListHolder template = _multisells.get(listId); if (template == null) { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find list ID: " + listId + " requested by player: " + player.getName() + ", NPC ID:" + (npc != null ? npc.getId() : 0)); + LOGGER.warning("Can't find list id: " + listId + " requested by player: " + player.getName() + ", npcId: " + (npc != null ? npc.getId() : 0)); return; } - if (!template.isNpcAllowed(-1) && (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly()))) + if (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly())) { - LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); - return; - } - - final PreparedListContainer list = new PreparedListContainer(template, inventoryOnly, player, npc); - - // Pass through this only when multipliers are different from 1 - if ((productMultiplier != 1) || (ingredientMultiplier != 1)) - { - list.getEntries().forEach(entry -> + if (player.isGM()) { - // Math.max used here to avoid dropping count to 0 - entry.getProducts().forEach(product -> product.setItemCount((long) Math.max(product.getItemCount() * productMultiplier, 1))); - - // Math.max used here to avoid dropping count to 0 - entry.getIngredients().forEach(ingredient -> ingredient.setItemCount((long) Math.max(ingredient.getItemCount() * ingredientMultiplier, 1))); - }); + player.sendMessage("Multisell " + listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); + return; + } } + + // Check if ingredient/product multipliers are set, if not, set them to the template value. + ingredientMultiplier = (Double.isNaN(ingredientMultiplier) ? template.getIngredientMultiplier() : ingredientMultiplier); + productMultiplier = (Double.isNaN(productMultiplier) ? template.getProductMultiplier() : productMultiplier); + + final PreparedMultisellListHolder list = new PreparedMultisellListHolder(template, inventoryOnly, player.getInventory(), npc, ingredientMultiplier, productMultiplier); int index = 0; do { @@ -276,172 +244,19 @@ public final class MultisellData implements IGameXmlReader public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly) { - separateAndSend(listId, player, npc, inventoryOnly, 1, 1); + separateAndSend(listId, player, npc, inventoryOnly, Double.NaN, Double.NaN); } - public static boolean hasSpecialIngredient(int id, long amount, L2PcInstance player) + private final boolean itemExists(ItemHolder holder) { - switch (id) + final SpecialItemType specialItem = SpecialItemType.getByClientId(holder.getId()); + if (specialItem != null) { - case PC_CAFE_POINTS: - { - if (player.getPcCafePoints() >= amount) - { - return true; - } - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); - break; - } - case CLAN_REPUTATION: - { - if (player.getClan() == null) - { - player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); - return false; - } - if (!player.isClanLeader()) - { - player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); - return false; - } - if (player.getClan().getReputationScore() < amount) - { - player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); - return false; - } - return true; - } - case FAME: - { - if (player.getFame() < amount) - { - player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); - return false; - } - return true; - } - case RAIDBOSS_POINTS: - { - if (player.getRaidbossPoints() < amount) - { - player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); - return false; - } - return true; - } - } - return false; - } - - public static boolean takeSpecialIngredient(int id, long amount, L2PcInstance player) - { - switch (id) - { - case PC_CAFE_POINTS: - { - final int cost = player.getPcCafePoints() - (int) amount; - player.setPcCafePoints(cost); - final SystemMessage smsgpc = SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_USING_S1_POINT); - smsgpc.addLong((int) amount); - player.sendPacket(smsgpc); - player.sendPacket(new ExPCCafePointInfo(player.getPcCafePoints(), (int) amount, 1)); - return true; - } - case CLAN_REPUTATION: - { - player.getClan().takeReputationScore((int) amount, true); - final SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); - smsg.addLong(amount); - player.sendPacket(smsg); - return true; - } - case FAME: - { - player.setFame(player.getFame() - (int) amount); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - return true; - } - case RAIDBOSS_POINTS: - { - player.setRaidbossPoints(player.getRaidbossPoints() - (int) amount); - player.sendPacket(new UserInfo(player)); - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(amount)); - return true; - } - } - return false; - } - - public static void giveSpecialProduct(int id, long amount, L2PcInstance player) - { - switch (id) - { - case CLAN_REPUTATION: - { - player.getClan().addReputationScore((int) amount, true); - break; - } - case FAME: - { - player.setFame((int) (player.getFame() + amount)); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - break; - } - case RAIDBOSS_POINTS: - { - player.increaseRaidbossPoints((int) amount); - player.sendPacket(new UserInfo(player)); - break; - } - } - } - - private final void verify() - { - ListContainer list; - final Iterator iter = _entries.values().iterator(); - while (iter.hasNext()) - { - list = iter.next(); - - for (Entry ent : list.getEntries()) - { - for (Ingredient ing : ent.getIngredients()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find ingredient with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - for (Ingredient ing : ent.getProducts()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find product with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - } - } - } - - private final boolean verifyIngredient(Ingredient ing) - { - switch (ing.getItemId()) - { - case PC_CAFE_POINTS: - case CLAN_REPUTATION: - case FAME: - case RAIDBOSS_POINTS: - { - return true; - } - default: - { - return ing.getTemplate() != null; - } + return true; } + + final L2Item template = ItemTable.getInstance().getTemplate(holder.getId()); + return (template != null) && (template.isStackable() ? (holder.getCount() >= 1) : (holder.getCount() == 1)); } public static MultisellData getInstance() diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java index 3706b281b4..bffa2b107c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java @@ -83,12 +83,12 @@ public class OptionData implements IGameXmlReader } case "active_skill": { - option.setActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "passive_skill": { - option.setPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "attack_skill": diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/datatables/AugmentationData.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/datatables/AugmentationData.java index 82a79af4c1..8582c38326 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/datatables/AugmentationData.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/datatables/AugmentationData.java @@ -33,8 +33,7 @@ import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.L2Augmentation; -import com.l2jmobius.gameserver.model.holders.SkillHolder; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.options.Options; @@ -86,12 +85,11 @@ public class AugmentationData private final List> _redSkills = new ArrayList<>(); private final List> _yellowSkills = new ArrayList<>(); + private final Map _augmentations = new HashMap<>(); private final List _augmentationChances = new ArrayList<>(); private final List _augmentationChancesAcc = new ArrayList<>(); private final List _augmentationStones = new ArrayList<>(); - private final Map _allSkills = new HashMap<>(); - protected AugmentationData() { for (int i = 0; i < 10; i++) @@ -297,8 +295,6 @@ public class AugmentationData { _redSkills.get(k).add(augmentationId); } - - _allSkills.put(augmentationId, new SkillHolder(skillId, skillLvL)); } } } @@ -520,6 +516,11 @@ public class AugmentationData } } + public Augmentation getAugmentation(int id) + { + return _augmentations.computeIfAbsent(id, k -> new Augmentation(k)); + } + /** * Generate a new random augmentation * @param lifeStoneLevel @@ -529,7 +530,7 @@ public class AugmentationData * @param targetItem * @return */ - public L2Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) + public Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) { switch (bodyPart) { @@ -546,7 +547,7 @@ public class AugmentationData } } - private L2Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) + private Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) { int stat12 = 0; int stat34 = 0; @@ -739,7 +740,8 @@ public class AugmentationData } } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } boolean generateSkill = false; boolean generateGlow = false; @@ -916,10 +918,10 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; resultColor=" + resultColor + "; level=" + lifeStoneLevel + "; grade=" + lifeStoneGrade); } - return new L2Augmentation(((stat34 << 16) + stat12)); + return new Augmentation(((stat34 << 16) + stat12)); } - private L2Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) + private Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) { int stat12 = 0; int stat34 = 0; @@ -987,7 +989,8 @@ public class AugmentationData } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } lifeStoneLevel = Math.min(lifeStoneLevel, 9); int base = 0; @@ -1031,7 +1034,7 @@ public class AugmentationData op = OptionData.getInstance().getOptions(stat34); } - if ((op == null) || (!op.hasActiveSkill() && !op.hasPassiveSkill() && !op.hasActivationSkills())) + if ((op == null) || (!op.hasActiveSkills() && !op.hasPassiveSkills() && !op.hasActivationSkills())) { // second augmentation (stats) // calculating any different from stat12 value inside sub-block @@ -1048,7 +1051,8 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Accessory augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; level=" + lifeStoneLevel); } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } public boolean isAugmentaionStoneValid(int stoneId) diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java index 5294f6f231..6a3e232a26 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java @@ -74,7 +74,6 @@ public final class MapRegionManager implements IGameXmlReader String name; String town; int locId; - int castle; int bbs; for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) @@ -89,10 +88,9 @@ public final class MapRegionManager implements IGameXmlReader name = attrs.getNamedItem("name").getNodeValue(); town = attrs.getNamedItem("town").getNodeValue(); locId = parseInteger(attrs, "locId"); - castle = parseInteger(attrs, "castle"); bbs = parseInteger(attrs, "bbs"); - final L2MapRegion region = new L2MapRegion(name, town, locId, castle, bbs); + final L2MapRegion region = new L2MapRegion(name, town, locId, bbs); for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) { attrs = c.getAttributes(); @@ -224,22 +222,6 @@ public final class MapRegionManager implements IGameXmlReader return region.getTown(); } - /** - * @param activeChar - * @return - */ - public int getAreaCastle(L2Character activeChar) - { - final L2MapRegion region = getMapRegion(activeChar); - - if (region == null) - { - return 0; - } - - return region.getCastle(); - } - /** * @param activeChar * @param teleportWhere diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/TownManager.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/TownManager.java deleted file mode 100644 index b0543eb11a..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/instancemanager/TownManager.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.instancemanager; - -import com.l2jmobius.gameserver.model.entity.Castle; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; - -public final class TownManager -{ - public static int getTownCastle(int townId) - { - switch (townId) - { - case 912: - { - return 1; - } - case 916: - { - return 2; - } - case 918: - { - return 3; - } - case 922: - { - return 4; - } - case 924: - { - return 5; - } - case 926: - { - return 6; - } - case 1538: - { - return 7; - } - case 1537: - { - return 8; - } - case 1714: - { - return 9; - } - default: - { - return 0; - } - } - } - - public static boolean townHasCastleInSiege(int townId) - { - final int castleId = getTownCastle(townId); - if (castleId > 0) - { - final Castle castle = CastleManager.getInstance().getCastleById(castleId); - if (castle != null) - { - return castle.getSiege().isInProgress(); - } - } - return false; - } - - public static boolean townHasCastleInSiege(int x, int y) - { - return townHasCastleInSiege(MapRegionManager.getInstance().getMapRegionLocId(x, y)); - } - - public static L2TownZone getTown(int townId) - { - for (L2TownZone temp : ZoneManager.getInstance().getAllZones(L2TownZone.class)) - { - if (temp.getTownId() == townId) - { - return temp; - } - } - return null; - } - - /** - * Returns the town at that position (if any) - * @param x - * @param y - * @param z - * @return - */ - public static L2TownZone getTown(int x, int y, int z) - { - for (L2ZoneType temp : ZoneManager.getInstance().getZones(x, y, z)) - { - if (temp instanceof L2TownZone) - { - return (L2TownZone) temp; - } - } - return null; - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2Augmentation.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/Augmentation.java similarity index 68% rename from L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2Augmentation.java rename to L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/Augmentation.java index 65ff4312c1..9a0e2b459d 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2Augmentation.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/Augmentation.java @@ -1,107 +1,95 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Logger; - -import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.options.Options; - -/** - * Used to store an augmentation and its bonuses. - * @author durgus, UnAfraid - */ -public final class L2Augmentation -{ - private static final Logger LOGGER = Logger.getLogger(L2Augmentation.class.getName()); - private final List _options = new ArrayList<>(); - private boolean _active; - private final int _id; - - public L2Augmentation(int id) - { - _id = id; - _active = false; - final int[] stats = new int[2]; - stats[0] = 0x0000FFFF & id; - stats[1] = (id >> 16); - - for (int stat : stats) - { - final Options op = OptionData.getInstance().getOptions(stat); - if (op != null) - { - _options.add(op); - } - else - { - LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stat); - } - } - } - - /** - * Get the augmentation "id" used in serverpackets. - * @return augmentationId - */ - public int getId() - { - return _id; - } - - public List getOptions() - { - return _options; - } - - public void applyBonus(L2PcInstance player) - { - // make sure the bonuses are not applied twice.. - if (_active) - { - return; - } - - for (Options op : _options) - { - op.apply(player); - } - - player.getStat().recalculateStats(true); - _active = true; - } - - public void removeBonus(L2PcInstance player) - { - // make sure the bonuses are not removed twice - if (!_active) - { - return; - } - - for (Options op : _options) - { - op.remove(player); - } - - player.getStat().recalculateStats(true); - _active = false; - } -} +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model; + +import java.util.logging.Logger; + +import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.options.Options; + +/** + * Used to store an augmentation and its bonuses. + * @author durgus, UnAfraid + */ +public final class Augmentation +{ + private static final Logger LOGGER = Logger.getLogger(Augmentation.class.getName()); + private final Options[] _options; + private final int _id; + + public Augmentation(int id) + { + _id = id; + final int[] stats = new int[2]; + stats[0] = 0x0000FFFF & id; + stats[1] = (id >> 16); + _options = new Options[stats.length]; + + for (int i = 0; i < stats.length; i++) + { + final Options op = OptionData.getInstance().getOptions(stats[i]); + if (op != null) + { + _options[i] = op; + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stats[i]); + } + } + } + + /** + * Get the augmentation "id" used in serverpackets. + * @return augmentationId + */ + public int getId() + { + return _id; + } + + public Options[] getOptions() + { + return _options; + } + + public int getOptionId(int index) + { + if ((index >= 0) && (index < _options.length) && (_options[index] != null)) + { + return _options[index].getId(); + } + return 0; + } + + public void applyBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.apply(player); + } + } + + public void removeBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.remove(player); + } + } +} diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java index 00e25a5f8f..ec138037fb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java @@ -50,7 +50,7 @@ public class CharSelectInfoPackage private int _reputation = 0; private int _pkKills = 0; private int _pvpKills = 0; - private int _augmentationId = 0; + private Augmentation _augmentation; private int _x = 0; private int _y = 0; private int _z = 0; @@ -336,14 +336,14 @@ public class CharSelectInfoPackage return _reputation; } - public void setAugmentationId(int augmentationId) + public void setAugmentation(Augmentation augmentation) { - _augmentationId = augmentationId; + _augmentation = augmentation; } - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } public void setPkKills(int PkKills) diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/ItemInfo.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/ItemInfo.java index e8e8b21cd0..fb42cf8124 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/ItemInfo.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/ItemInfo.java @@ -39,10 +39,10 @@ public class ItemInfo private L2Item _item; /** The level of enchant on the L2ItemInstance */ - private int _enchant; + private int _enchantLevel; /** The augmentation of the item */ - private int _augmentation; + private Augmentation _augmentation; /** The quantity of L2ItemInstance */ private long _count; @@ -68,7 +68,7 @@ public class ItemInfo private byte _elemAtkType = -2; private int _elemAtkPower = 0; - private final int[] _elemDefAttr = + private final int[] _attributeDefence = { 0, 0, @@ -99,17 +99,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentation().getId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -150,7 +143,7 @@ public class ItemInfo _elemAtkPower = item.getAttackAttributePower(); for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) { - _elemDefAttr[type.getClientId()] = item.getDefenceAttribute(type); + _attributeDefence[type.getClientId()] = item.getDefenceAttribute(type); } _option = item.getEnchantOptions(); _soulCrystalOptions = item.getSpecialAbilities(); @@ -179,10 +172,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchant(); + _enchantLevel = item.getEnchant(); // Get the augmentation bonus - _augmentation = item.getAugmentId(); + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -207,7 +200,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); @@ -230,10 +223,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = 0; + _enchantLevel = 0; - // Get the augmentation boni - _augmentation = 0; + // Get the augmentation bonus + _augmentation = null; // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -272,17 +265,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentationId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -303,7 +289,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); _soulCrystalOptions = item.getSoulCrystalOptions(); @@ -320,26 +306,16 @@ public class ItemInfo return _item; } - public int getEnchant() + public int getEnchantLevel() { - return _enchant; + return _enchantLevel; } - public int getAugmentationBonus() + public Augmentation getAugmentation() { return _augmentation; } - public int get1stAugmentationId() - { - return 0x0000FFFF & getAugmentationBonus(); - } - - public int get2ndAugmentationId() - { - return getAugmentationBonus() >> 16; - } - public long getCount() { return _count; @@ -395,9 +371,9 @@ public class ItemInfo return _elemAtkPower; } - public int getElementDefAttr(byte i) + public int getAttributeDefence(AttributeType attribute) { - return _elemDefAttr[i]; + return _attributeDefence[attribute.getClientId()]; } public int[] getEnchantOptions() @@ -412,12 +388,12 @@ public class ItemInfo public Collection getSoulCrystalOptions() { - return _soulCrystalOptions; + return _soulCrystalOptions != null ? _soulCrystalOptions : Collections.emptyList(); } public Collection getSoulCrystalSpecialOptions() { - return _soulCrystalSpecialOptions; + return _soulCrystalSpecialOptions != null ? _soulCrystalSpecialOptions : Collections.emptyList(); } public long getVisualExpiration() diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2MapRegion.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2MapRegion.java index 1fc3170544..bf0bb6353b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2MapRegion.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/L2MapRegion.java @@ -33,7 +33,6 @@ public class L2MapRegion private final String _name; private final String _town; private final int _locId; - private final int _castle; private final int _bbs; private List _maps = null; @@ -44,12 +43,11 @@ public class L2MapRegion private final Map _bannedRace = new HashMap<>(); - public L2MapRegion(String name, String town, int locId, int castle, int bbs) + public L2MapRegion(String name, String town, int locId, int bbs) { _name = name; _town = town; _locId = locId; - _castle = castle; _bbs = bbs; } @@ -68,11 +66,6 @@ public class L2MapRegion return _locId; } - public final int getCastle() - { - return _castle; - } - public final int getBbs() { return _bbs; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/StatsSet.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/StatsSet.java index 8bd7bed637..67277686c3 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/StatsSet.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/StatsSet.java @@ -711,6 +711,20 @@ public class StatsSet implements IParserAdvUtils return (A) obj; } + @SuppressWarnings("unchecked") + public final
A getObject(String name, Class type, A defaultValue) + { + Objects.requireNonNull(name); + Objects.requireNonNull(type); + final Object obj = _set.get(name); + if ((obj == null) || !type.isAssignableFrom(obj.getClass())) + { + return defaultValue; + } + + return (A) obj; + } + public SkillHolder getSkillHolder(String key) { Objects.requireNonNull(key); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeItem.java index b37de23dd2..b688345ebf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -51,7 +51,7 @@ public class TradeItem private final Collection _soulCrystalOptions; private final Collection _soulCrystalSpecialOptions; private int _visualId; - private int _augmentId; + private Augmentation _augmentation; public TradeItem(L2ItemInstance item, long count, long price) { @@ -74,7 +74,7 @@ public class TradeItem _soulCrystalOptions = item.getSpecialAbilities(); _soulCrystalSpecialOptions = item.getAdditionalSpecialAbilities(); _visualId = item.getVisualId(); - _augmentId = item.isAugmented() ? item.getAugmentation().getId() : 0; + _augmentation = item.getAugmentation(); } public TradeItem(L2Item item, long count, long price) @@ -215,9 +215,9 @@ public class TradeItem return _soulCrystalSpecialOptions; } - public int getAugmentId() + public Augmentation getAugmentation() { - return _augmentId; + return _augmentation; } public int getVisualId() diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeList.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeList.java index 87d9c64d67..7a25f5afe4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeList.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/TradeList.java @@ -325,6 +325,12 @@ public class TradeList return null; } + if (count < 0) + { + _log.warning(_owner.getName() + ": Attempt to remove " + count + " items from TradeList!"); + return null; + } + for (TradeItem titem : _items) { if ((titem.getObjectId() == objectId) || (titem.getItem().getId() == itemId)) @@ -885,10 +891,10 @@ public class TradeList /** * Sell items to this PrivateStore list * @param player - * @param items + * @param requestedItems * @return : boolean true if success */ - public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] items) + public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] requestedItems) { if (_locked) { @@ -911,12 +917,14 @@ public class TradeList long totalPrice = 0; - for (ItemRequest item : items) + final TradeItem[] sellerItems = _items.toArray(new TradeItem[0]); + + for (ItemRequest item : requestedItems) { // searching item in tradelist using itemId boolean found = false; - for (TradeItem ti : _items) + for (TradeItem ti : sellerItems) { if (ti.getItem().getId() == item.getItemId()) { @@ -960,8 +968,19 @@ public class TradeList continue; } + if ((item.getObjectId() < 1) || (item.getObjectId() > sellerItems.length)) + { + continue; + } + + final TradeItem tradeItem = sellerItems[item.getObjectId() - 1]; + if ((tradeItem == null) || (tradeItem.getItem().getId() != item.getItemId())) + { + continue; + } + // Check if requested item is available for manipulation - int objectId = item.getObjectId(); + int objectId = tradeItem.getObjectId(); L2ItemInstance oldItem = player.checkItemManipulation(objectId, item.getCount(), "sell"); // private store - buy use same objectId for buying several non-stackable items if (oldItem == null) diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Npc.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Npc.java index b669e16e76..5dc7a521bb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Npc.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/L2Npc.java @@ -34,6 +34,7 @@ import com.l2jmobius.gameserver.enums.MpRewardAffectType; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.ShotType; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.enums.Team; import com.l2jmobius.gameserver.enums.UserInfoType; import com.l2jmobius.gameserver.handler.BypassHandler; @@ -42,7 +43,6 @@ import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager.DBStatusType; import com.l2jmobius.gameserver.instancemanager.FortManager; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.L2Object; @@ -83,6 +83,7 @@ import com.l2jmobius.gameserver.model.spawns.NpcSpawnTemplate; import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.variables.NpcVariables; import com.l2jmobius.gameserver.model.zone.ZoneId; +import com.l2jmobius.gameserver.model.zone.type.L2TaxZone; import com.l2jmobius.gameserver.network.NpcStringId; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; @@ -154,6 +155,9 @@ public class L2Npc extends L2Character private StatsSet _params; private DBSpawnManager.DBStatusType _raidStatus; + /** Contains information about local tax payments. */ + private L2TaxZone _taxZone = null; + /** * Constructor of L2NpcInstance (use L2Character constructor).
* Actions: @@ -519,6 +523,48 @@ public class L2Npc extends L2Character return true; } + /** + * Set another tax zone which will be used for tax payments. + * @param zone newly entered tax zone + */ + public final void setTaxZone(L2TaxZone zone) + { + _taxZone = ((zone != null) && !isInInstance()) ? zone : null; + } + + /** + * Gets castle for tax payments. + * @return instance of {@link Castle} when NPC is inside {@link L2TaxZone} otherwise {@code null} + */ + public final Castle getTaxCastle() + { + return (_taxZone != null) ? _taxZone.getCastle() : null; + } + + /** + * Gets castle tax rate + * @param type type of tax + * @return tax rate when NPC is inside tax zone otherwise {@code 0} + */ + public final double getCastleTaxRate(TaxType type) + { + final Castle castle = getTaxCastle(); + return (castle != null) ? (castle.getTaxPercent(type) / 100.0) : 0; + } + + /** + * Increase castle vault by specified tax amount. + * @param amount tax amount + */ + public final void handleTaxPayment(long amount) + { + final Castle taxCastle = getTaxCastle(); + if (taxCastle != null) + { + taxCastle.addToTreasury(amount); + } + } + /** * @return the nearest L2Castle this L2NpcInstance belongs to. Otherwise null. */ @@ -560,11 +606,6 @@ public class L2Npc extends L2Character return FortManager.getInstance().findNearestFort(this, maxDistance); } - public final boolean isInTown() - { - return TownManager.getTown(getX(), getY(), getZ()) != null; - } - /** * Open a quest or chat window on client with the text of the L2NpcInstance in function of the command.
* Example of use : @@ -1063,14 +1104,9 @@ public class L2Npc extends L2Character WalkingManager.getInstance().onSpawn(this); } - // Display clan flag - if (isInsideZone(ZoneId.TOWN) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) + if (isInsideZone(ZoneId.TAX) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) { - final int townId = TownManager.getTown(getX(), getY(), getZ()).getTownId(); - if ((townId != 33) && (townId != 22)) - { - setClanId(getCastle().getOwnerId()); - } + setClanId(getCastle().getOwnerId()); } } @@ -1079,12 +1115,12 @@ public class L2Npc extends L2Character */ public void onRespawn() { - // Stop all effects and recalculate stats without broadcasting. - getEffectList().stopAllEffects(false); - // Make it alive setIsDead(false); + // Stop all effects and recalculate stats without broadcasting. + getEffectList().stopAllEffects(false); + // Reset decay info setDecayed(false); @@ -1827,11 +1863,17 @@ public class L2Npc extends L2Character initSeenCreatures(getTemplate().getAggroRange()); } + /** + * @return the NpcStringId for name + */ public NpcStringId getNameString() { return _nameString; } + /** + * @return the NpcStringId for title + */ public NpcStringId getTitleString() { return _titleString; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java index b48afd7f29..71096be532 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java @@ -21,7 +21,7 @@ import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -52,8 +52,7 @@ public class L2MerchantInstance extends L2NpcInstance @Override public String getHtmlPath(int npcId, int val) { - String pom = ""; - + String pom; if (val == 0) { pom = "" + npcId; @@ -62,7 +61,6 @@ public class L2MerchantInstance extends L2NpcInstance { pom = npcId + "-" + val; } - return "data/html/merchant/" + pom + ".htm"; } @@ -71,9 +69,9 @@ public class L2MerchantInstance extends L2NpcInstance showBuyWindow(player, val, true); } - public final void showBuyWindow(L2PcInstance player, int val, boolean applyTax) + public final void showBuyWindow(L2PcInstance player, int val, boolean applyCastleTax) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); @@ -90,23 +88,7 @@ public class L2MerchantInstance extends L2NpcInstance player.setInventoryBlockingStatus(true); - player.sendPacket(new BuyList(buyList, player.getAdena(), (applyTax) ? getTotalTaxRate(TaxType.BUY) : 0)); - player.sendPacket(new ExBuySellList(player, false, (applyTax) ? getTotalTaxRate(TaxType.SELL) : 0)); - player.sendPacket(ActionFailed.STATIC_PACKET); - } - - public boolean hasCastle() - { - return getCastle() != null; - } - - public int getTotalTax(TaxType taxType) - { - return hasCastle() ? getCastle().getTaxPercent(taxType) : 0; - } - - public double getTotalTaxRate(TaxType taxType) - { - return getTotalTax(taxType) / 100.0; + player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0)); + player.sendPacket(new ExBuySellList(player, false, (applyCastleTax) ? getCastleTaxRate(TaxType.SELL) : 0)); } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java index b561365375..be823d68f5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java @@ -212,6 +212,7 @@ import com.l2jmobius.gameserver.model.holders.MonsterBookCardHolder; import com.l2jmobius.gameserver.model.holders.MonsterBookRewardHolder; import com.l2jmobius.gameserver.model.holders.MovieHolder; import com.l2jmobius.gameserver.model.holders.PlayerEventHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import com.l2jmobius.gameserver.model.holders.RecipeHolder; import com.l2jmobius.gameserver.model.holders.SellBuffHolder; import com.l2jmobius.gameserver.model.holders.SkillUseHolder; @@ -237,7 +238,6 @@ import com.l2jmobius.gameserver.model.items.type.CrystalType; import com.l2jmobius.gameserver.model.items.type.EtcItemType; import com.l2jmobius.gameserver.model.items.type.WeaponType; import com.l2jmobius.gameserver.model.matching.MatchingRoom; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameTask; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; @@ -565,7 +565,7 @@ public final class L2PcInstance extends L2Playable private TradeList _buyList; // Multisell - private PreparedListContainer _currentMultiSell = null; + private PreparedMultisellListHolder _currentMultiSell = null; private int _nobleLevel = 0; private boolean _hero = false; @@ -4337,7 +4337,7 @@ public final class L2PcInstance extends L2Playable } if (Config.GAMEGUARD_ENFORCE) { - ThreadPool.scheduleGeneral(new GameGuardCheckTask(this), 30 * 1000); + ThreadPoolManager.scheduleGeneral(new GameGuardCheckTask(this), 30 * 1000); } }*/ //@formatter:on @@ -4711,12 +4711,12 @@ public final class L2PcInstance extends L2Playable } } - public final PreparedListContainer getMultiSell() + public final PreparedMultisellListHolder getMultiSell() { return _currentMultiSell; } - public final void setMultiSell(PreparedListContainer list) + public final void setMultiSell(PreparedMultisellListHolder list) { _currentMultiSell = list; } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/Product.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/Product.java index 10242424c7..0da19f8ec7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/Product.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/Product.java @@ -25,9 +25,11 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; +import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.type.EtcItemType; /** * @author NosBit @@ -41,28 +43,25 @@ public final class Product private final long _price; private final long _restockDelay; private final long _maxCount; + private final double _baseTax; private AtomicLong _count = null; private ScheduledFuture _restockTask = null; - public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount) + public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount, int baseTax) { Objects.requireNonNull(item); _buyListId = buyListId; _item = item; - _price = price; + _price = (price < 0) ? item.getReferencePrice() : price; _restockDelay = restockDelay * 60000; _maxCount = maxCount; + _baseTax = baseTax / 100.0; if (hasLimitedStock()) { _count = new AtomicLong(maxCount); } } - public int getBuyListId() - { - return _buyListId; - } - public L2Item getItem() { return _item; @@ -75,11 +74,17 @@ public final class Product public long getPrice() { - if (_price < 0) + long price = _price; + if (_item.getItemType().equals(EtcItemType.CASTLE_GUARD)) { - return getItem().getReferencePrice(); + price *= Config.RATE_SIEGE_GUARDS_PRICE; } - return _price; + return price; + } + + public double getBaseTaxRate() + { + return _baseTax; } public long getRestockDelay() @@ -155,7 +160,7 @@ public final class Product try (Connection con = DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("INSERT INTO `buylists`(`buylist_id`, `item_id`, `count`, `next_restock_time`) VALUES(?, ?, ?, ?) ON DUPLICATE KEY UPDATE `count` = ?, `next_restock_time` = ?")) { - statement.setInt(1, getBuyListId()); + statement.setInt(1, _buyListId); statement.setInt(2, getItemId()); statement.setLong(3, getCount()); statement.setLong(5, getCount()); @@ -174,7 +179,7 @@ public final class Product } catch (Exception e) { - _log.log(Level.WARNING, "Failed to save Product buylist_id:" + getBuyListId() + " item_id:" + getItemId(), e); + _log.log(Level.WARNING, "Failed to save Product buylist_id:" + _buyListId + " item_id:" + getItemId(), e); } } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/ProductList.java similarity index 88% rename from L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java rename to L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/ProductList.java index 3a2f60297b..884bd110a6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/buylist/ProductList.java @@ -25,13 +25,13 @@ import java.util.Set; /** * @author NosBit */ -public final class L2BuyList +public final class ProductList { private final int _listId; private final Map _products = new LinkedHashMap<>(); private Set _allowedNpcs = null; - public L2BuyList(int listId) + public ProductList(int listId) { _listId = listId; } @@ -70,8 +70,8 @@ public final class L2BuyList return (_allowedNpcs != null) && _allowedNpcs.contains(npcId); } - public Set getNpcsAllowed() - { - return _allowedNpcs; - } + //public Set getNpcsAllowed() + //{ + // return _allowedNpcs; + //} } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java index 18b06f6692..e6dc9d5e58 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java @@ -49,4 +49,10 @@ public class EnsoulOption extends SkillHolder { return _desc; } + + @Override + public String toString() + { + return "Ensoul Id: " + _id + " Name: " + _name + " Desc: " + _desc; + } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/entity/Castle.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/entity/Castle.java index b657df5013..f1aa77737c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/entity/Castle.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/entity/Castle.java @@ -78,7 +78,6 @@ public final class Castle extends AbstractResidence private boolean _isTimeRegistrationOver = true; // true if Castle Lords set the time, or 24h is elapsed after the siege private Calendar _siegeTimeRegistrationEndDate; // last siege end date + 1 day private CastleSide _castleSide = null; - private double _taxRate; private long _treasury = 0; private boolean _showNpcCrest = false; private L2SiegeZone _zone = null; @@ -301,7 +300,7 @@ public final class Castle extends AbstractResidence final Castle rune = CastleManager.getInstance().getCastle("rune"); if (rune != null) { - final long runeTax = (long) (amount * rune.getTaxRate()); + final long runeTax = (long) (amount * rune.getTaxRate(TaxType.BUY)); if (rune.getOwnerId() > 0) { rune.addToTreasury(runeTax); @@ -319,7 +318,7 @@ public final class Castle extends AbstractResidence final Castle aden = CastleManager.getInstance().getCastle("aden"); if (aden != null) { - final long adenTax = (long) (amount * aden.getTaxRate()); // Find out what Aden gets from the current castle instance's income + final long adenTax = (long) (amount * aden.getTaxRate(TaxType.BUY)); // Find out what Aden gets from the current castle instance's income if (aden.getOwnerId() > 0) { aden.addToTreasury(adenTax); // Only bother to really add the tax to the treasury if not npc owned @@ -673,7 +672,6 @@ public final class Castle extends AbstractResidence } } - setTaxRate(getTaxPercent(TaxType.BUY) / 100); ps2.setInt(1, getResidenceId()); try (ResultSet rs = ps2.executeQuery()) { @@ -980,14 +978,9 @@ public final class Castle extends AbstractResidence return taxPercent; } - public void setTaxRate(double taxRate) + public final double getTaxRate(TaxType taxType) { - _taxRate = taxRate; - } - - public final double getTaxRate() - { - return _taxRate; + return getTaxPercent(taxType) / 100.0; } public final long getTreasury() @@ -1229,7 +1222,6 @@ public final class Castle extends AbstractResidence _log.log(Level.WARNING, e.getMessage(), e); } _castleSide = side; - setTaxRate(getTaxPercent(TaxType.BUY) / 100); Broadcast.toAllOnlinePlayers(new ExCastleState(this)); spawnSideNpcs(); } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/events/AbstractScript.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/events/AbstractScript.java index c100d063ca..606ae56cb9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/events/AbstractScript.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/events/AbstractScript.java @@ -2701,7 +2701,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime // set enchant level for item if that item is not adena if ((attributeType != null) && (attributeValue > 0)) { - item.setAttribute(new AttributeHolder(attributeType, attributeValue)); + item.setAttribute(new AttributeHolder(attributeType, attributeValue), true); if (item.isEquipped()) { // Recalculate all stats diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java index 09f3f798a1..0c4c87491d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java @@ -16,7 +16,7 @@ */ package com.l2jmobius.gameserver.model.events.impl.character.player; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.events.EventType; import com.l2jmobius.gameserver.model.events.impl.IBaseEvent; @@ -29,10 +29,10 @@ public class OnPlayerAugment implements IBaseEvent { private final L2PcInstance _activeChar; private final L2ItemInstance _item; - private final L2Augmentation _augmentation; + private final Augmentation _augmentation; private final boolean _isAugment; // true = is being augmented // false = augment is being removed - public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, L2Augmentation augment, boolean isAugment) + public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, Augmentation augment, boolean isAugment) { _activeChar = activeChar; _item = item; @@ -50,7 +50,7 @@ public class OnPlayerAugment implements IBaseEvent return _item; } - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java index 5ca4c5c7af..5a1e474b7f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java @@ -16,6 +16,10 @@ */ package com.l2jmobius.gameserver.model.holders; +import java.util.List; + +import com.l2jmobius.commons.util.Rnd; + /** * A DTO for items; contains item ID, count and chance.
* Complemented by {@link QuestItemHolder}. @@ -45,6 +49,34 @@ public class ItemChanceHolder extends ItemHolder return _chance; } + /** + * Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected. + * @param holders list of holders to calculate chance from. + * @return {@code ItemChanceHolder} of the successful random roll or {@code null} if there was no lucky holder selected. + */ + public static ItemChanceHolder getRandomHolder(List holders) + { + double itemRandom = 100 * Rnd.nextDouble(); + + for (ItemChanceHolder holder : holders) + { + // Any mathmatical expression including NaN will result in either NaN or 0 of converted to something other than double. + // We would usually want to skip calculating any holders that include NaN as a chance, because that ruins the overall process. + if (!Double.isNaN(holder.getChance())) + { + // Calculate chance + if (holder.getChance() > itemRandom) + { + return holder; + } + + itemRandom -= holder.getChance(); + } + } + + return null; + } + @Override public String toString() { diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java new file mode 100644 index 0000000000..68a6ee23b1 --- /dev/null +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java @@ -0,0 +1,56 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.items.L2Item; + +/** + * @author Nik + */ +public class MultisellEntryHolder +{ + private final boolean _stackable; + private final List _ingredients; + private final List _products; + + public MultisellEntryHolder(List ingredients, List products) + { + _ingredients = Collections.unmodifiableList(ingredients); + _products = Collections.unmodifiableList(products); + _stackable = products.stream().map(i -> ItemTable.getInstance().getTemplate(i.getId())).filter(Objects::nonNull).allMatch(L2Item::isStackable); + } + + public final List getIngredients() + { + return _ingredients; + } + + public final List getProducts() + { + return _products; + } + + public final boolean isStackable() + { + return _stackable; + } +} \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java new file mode 100644 index 0000000000..df7ddfa43d --- /dev/null +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java @@ -0,0 +1,112 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.interfaces.IIdentifiable; + +/** + * A static list container of all multisell entries of a given list. + * @author Nik + */ +public class MultisellListHolder implements IIdentifiable +{ + private final int _listId; + private final boolean _isChanceMultisell; + private final boolean _applyTaxes; + private final boolean _maintainEnchantment; + private final double _ingredientMultiplier; + private final double _productMultiplier; + + protected List _entries; + protected final Set _npcsAllowed; + + public MultisellListHolder(int listId, boolean isChanceMultisell, boolean applyTaxes, boolean maintainEnchantment, double ingredientMultiplier, double productMultiplier, List entries, Set npcsAllowed) + { + _listId = listId; + _isChanceMultisell = isChanceMultisell; + _applyTaxes = applyTaxes; + _maintainEnchantment = maintainEnchantment; + _ingredientMultiplier = ingredientMultiplier; + _productMultiplier = productMultiplier; + _entries = entries; + _npcsAllowed = npcsAllowed; + } + + @SuppressWarnings("unchecked") + public MultisellListHolder(StatsSet set) + { + _listId = set.getInt("listId"); + _isChanceMultisell = set.getBoolean("isChanceMultisell", false); + _applyTaxes = set.getBoolean("applyTaxes", false); + _maintainEnchantment = set.getBoolean("maintainEnchantment", false); + _ingredientMultiplier = set.getDouble("ingredientMultiplier", 1.0); + _productMultiplier = set.getDouble("productMultiplier", 1.0); + _entries = Collections.unmodifiableList(set.getList("entries", MultisellEntryHolder.class, Collections.emptyList())); + _npcsAllowed = set.getObject("allowNpc", Set.class); + } + + public List getEntries() + { + return _entries; + } + + @Override + public final int getId() + { + return _listId; + } + + public final boolean isChanceMultisell() + { + return _isChanceMultisell; + } + + public final boolean isApplyTaxes() + { + return _applyTaxes; + } + + public final boolean isMaintainEnchantment() + { + return _maintainEnchantment; + } + + public final double getIngredientMultiplier() + { + return _ingredientMultiplier; + } + + public final double getProductMultiplier() + { + return _productMultiplier; + } + + public final boolean isNpcAllowed(int npcId) + { + return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); + } + + public final boolean isNpcOnly() + { + return _npcsAllowed != null; + } +} \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java new file mode 100644 index 0000000000..db693465a0 --- /dev/null +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java @@ -0,0 +1,107 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.ArrayList; +import java.util.List; + +import com.l2jmobius.gameserver.enums.TaxType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; +import com.l2jmobius.gameserver.model.itemcontainer.ItemContainer; + +/** + * A modified version of {@link MultisellListHolder} that may include altered data of the original and other dynamic data resulted from players' interraction. + * @author Nik + */ +public class PreparedMultisellListHolder extends MultisellListHolder +{ + private int _npcObjectId; + private final boolean _inventoryOnly; + private double _taxRate; + private List _itemInfos; + + public PreparedMultisellListHolder(MultisellListHolder list, boolean inventoryOnly, ItemContainer inventory, L2Npc npc, double ingredientMultiplier, double productMultiplier) + { + super(list.getId(), list.isChanceMultisell(), list.isApplyTaxes(), list.isMaintainEnchantment(), list.getIngredientMultiplier(), list.getProductMultiplier(), list._entries, list._npcsAllowed); + + _inventoryOnly = inventoryOnly; + + if (npc != null) + { + _npcObjectId = npc.getObjectId(); + _taxRate = npc.getCastleTaxRate(TaxType.BUY); + } + + // Display items from inventory that are available for exchange. + if (inventoryOnly) + { + _entries = new ArrayList<>(); + _itemInfos = new ArrayList<>(); + + // Only do the match up on equippable items that are not currently equipped. For each appropriate item, produce a set of entries for the multisell list. + inventory.getItems(item -> !item.isEquipped() && (item.isArmor() || item.isWeapon())).forEach(item -> + { + // Check ingredients of each entry to see if it's an entry we'd like to include. + list.getEntries().stream().filter(e -> e.getIngredients().stream().anyMatch(i -> i.getId() == item.getId())).forEach(e -> + { + _entries.add(e); + _itemInfos.add(new ItemInfo(item)); + }); + }); + } + } + + public ItemInfo getItemEnchantment(int index) + { + return _itemInfos != null ? _itemInfos.get(index) : null; + } + + public double getTaxRate() + { + return isApplyTaxes() ? _taxRate : 0; + } + + public boolean isInventoryOnly() + { + return _inventoryOnly; + } + + public final boolean checkNpcObjectId(int npcObjectId) + { + return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); + } + + /** + * @param ingredient + * @return the new count of the given ingredient after applying ingredient multiplier and adena tax rate. + */ + public long getIngredientCount(ItemHolder ingredient) + { + return (ingredient.getId() == Inventory.ADENA_ID) ? Math.round(ingredient.getCount() * getIngredientMultiplier() * (1 + _taxRate)) : Math.round(ingredient.getCount() * getIngredientMultiplier()); + } + + /** + * @param product + * @return the new count of the given product after applying product multiplier. + */ + public long getProductCount(ItemChanceHolder product) + { + return Math.round(product.getCount() * getProductMultiplier()); + } +} \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java index 22f7a0625a..48d6d470a6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -16,9 +16,10 @@ */ package com.l2jmobius.gameserver.model.itemauction; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.idfactory.IdFactory; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; @@ -83,10 +84,10 @@ public final class AuctionItem L2World.getInstance().storeObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); - final int augmentationId = _itemExtra.getInt("augmentation_id", 0); - if (augmentationId > 0) + final Augmentation augmentation = AugmentationData.getInstance().getAugmentation(_itemExtra.getInt("augmentation_id", 0)); + if (augmentation != null) { - item.setAugmentation(new L2Augmentation(augmentationId)); + item.setAugmentation(augmentation, false); } return item; } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java index c5f33c86df..e587d83d0f 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.ItemLocation; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2ArmorSet; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.PcCondOverride; @@ -1021,10 +1022,10 @@ public abstract class Inventory extends ItemContainer return (item != null) ? item.getVisualId() : 0; } - public int getPaperdollAugmentationId(int slot) + public Augmentation getPaperdollAugmentation(int slot) { final L2ItemInstance item = _paperdoll[slot]; - return ((item != null) && (item.getAugmentation() != null)) ? item.getAugmentation().getId() : 0; + return (item != null) ? item.getAugmentation() : null; } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java index 9450e02823..8b80a1d496 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java @@ -159,50 +159,6 @@ public class PcInventory extends Inventory return list; } - /** - * Returns the list of items in inventory available for transaction Allows an item to appear twice if and only if there is a difference in enchantment level. - * @param allowAdena - * @param allowAncientAdena - * @return L2ItemInstance : items in inventory - */ - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena) - { - return getUniqueItemsByEnchantLevel(allowAdena, allowAncientAdena, true); - } - - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena, boolean onlyAvailable) - { - final Collection list = new LinkedList<>(); - for (L2ItemInstance item : _items.values()) - { - if (!allowAdena && (item.getId() == ADENA_ID)) - { - continue; - } - if (!allowAncientAdena && (item.getId() == ANCIENT_ADENA_ID)) - { - continue; - } - - boolean isDuplicate = false; - for (L2ItemInstance litem : list) - { - if ((litem.getId() == item.getId()) && (litem.getEnchantLevel() == item.getEnchantLevel())) - { - isDuplicate = true; - break; - } - } - - if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false, false)))) - { - list.add(item); - } - } - - return list; - } - /** * @param itemId * @return diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java index 49f470e282..b108dba8f0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Objects; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.type.CrystalType; @@ -44,8 +45,7 @@ public class L2WarehouseItem private final int _locationSlot; private final int _enchant; private final CrystalType _grade; - private boolean _isAugmented; - private int _augmentationId; + private final Augmentation _augmentation; private final int _customType1; private final int _customType2; private final int _mana; @@ -81,15 +81,7 @@ public class L2WarehouseItem _customType1 = item.getCustomType1(); _customType2 = item.getCustomType2(); _grade = item.getItem().getCrystalType(); - if (item.isAugmented()) - { - _isAugmented = true; - _augmentationId = item.getAugmentation().getId(); - } - else - { - _isAugmented = false; - } + _augmentation = item.getAugmentation(); _mana = item.getMana(); _time = item.isTimeLimitedItem() ? (int) (item.getRemainingTime() / 1000) : -1; @@ -232,20 +224,12 @@ public class L2WarehouseItem return _item.getName(); } - /** - * @return {@code true} if the item is augmented, {@code false} otherwise. - */ - public boolean isAugmented() - { - return _isAugmented; - } - /** * @return the augmentation If. */ - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java index d429fbfee8..7921b2ef15 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.data.xml.impl.AppearanceItemData; import com.l2jmobius.gameserver.data.xml.impl.EnchantItemOptionsData; import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.InstanceType; @@ -53,8 +54,8 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import com.l2jmobius.gameserver.instancemanager.SiegeGuardManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.DropProtection; -import com.l2jmobius.gameserver.model.L2Augmentation; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; @@ -135,7 +136,7 @@ public final class L2ItemInstance extends L2Object private boolean _wear; /** Augmented Item */ - private L2Augmentation _augmentation = null; + private Augmentation _augmentation = null; /** Shadow item */ private int _mana = -1; @@ -948,7 +949,7 @@ public final class L2ItemInstance extends L2Object * Returns the augmentation object for this item * @return augmentation */ - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } @@ -956,9 +957,10 @@ public final class L2ItemInstance extends L2Object /** * Sets a new augmentation * @param augmentation + * @param updateDatabase * @return return true if successfully */ - public boolean setAugmentation(L2Augmentation augmentation) + public boolean setAugmentation(Augmentation augmentation, boolean updateDatabase) { // there shall be no previous augmentation.. if (_augmentation != null) @@ -968,13 +970,9 @@ public final class L2ItemInstance extends L2Object } _augmentation = augmentation; - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemAttributes(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e); + updateItemOptions(); } EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); return true; @@ -991,7 +989,7 @@ public final class L2ItemInstance extends L2Object } // Copy augmentation before removing it. - final L2Augmentation augment = _augmentation; + final Augmentation augment = _augmentation; _augmentation = null; try (Connection con = DatabaseFactory.getInstance().getConnection(); @@ -1023,7 +1021,7 @@ public final class L2ItemInstance extends L2Object final int aug_attributes = rs.getInt(1); if (aug_attributes != -1) { - _augmentation = new L2Augmentation(rs.getInt("augAttributes")); + _augmentation = AugmentationData.getInstance().getAugmentation(rs.getInt("augAttributes")); } } } @@ -1048,7 +1046,19 @@ public final class L2ItemInstance extends L2Object } } - private void updateItemAttributes(Connection con) + public void updateItemOptions() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemOptions(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + toString() + " from DB:", e); + } + } + + private void updateItemOptions(Connection con) { try (PreparedStatement ps = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?)")) { @@ -1062,6 +1072,18 @@ public final class L2ItemInstance extends L2Object } } + public void updateItemElementals() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemElements(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + toString() + " from DB: ", e); + } + } + private void updateItemElements(Connection con) { try (PreparedStatement ps = con.prepareStatement("DELETE FROM item_elementals WHERE itemId = ?")) @@ -1187,17 +1209,14 @@ public final class L2ItemInstance extends L2Object /** * Add elemental attribute to item and save to db * @param holder + * @param updateDatabase */ - public void setAttribute(AttributeHolder holder) + public void setAttribute(AttributeHolder holder, boolean updateDatabase) { applyAttribute(holder); - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemElements(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + this + " from DB:", e); + updateItemElementals(); } } @@ -1646,12 +1665,16 @@ public final class L2ItemInstance extends L2Object if (_augmentation != null) { - updateItemAttributes(con); + updateItemOptions(con); } if (_elementals != null) { updateItemElements(con); } + if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) + { + updateSpecialAbilities(con); + } } catch (Exception e) { @@ -2217,10 +2240,21 @@ public final class L2ItemInstance extends L2Object } } - private void updateSpecialAbilities() + public void updateSpecialAbilities() { - try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateSpecialAbilities(con); + } + catch (Exception e) + { + LOGGER.log(Level.WARNING, "Couldn't update item special abilities", e); + } + } + + private void updateSpecialAbilities(Connection con) + { + try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); for (Entry entry : _ensoulOptions.entrySet()) diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/Entry.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/Entry.java deleted file mode 100644 index 3a54373813..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/Entry.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author DS - */ -public class Entry -{ - protected int _entryId; - protected boolean _stackable = true; - - protected List _products; - protected List _ingredients; - - public Entry(int entryId) - { - _entryId = entryId; - _products = new ArrayList<>(); - _ingredients = new ArrayList<>(); - } - - /** - * This constructor used in PreparedEntry only, ArrayLists not created. - */ - protected Entry() - { - } - - public final void setEntryId(int id) - { - _entryId = id; - } - - public final int getEntryId() - { - return _entryId; - } - - public final void addProduct(Ingredient product) - { - _products.add(product); - - if (!product.isStackable()) - { - _stackable = false; - } - } - - public final List getProducts() - { - return _products; - } - - public final void addIngredient(Ingredient ingredient) - { - _ingredients.add(ingredient); - } - - public final List getIngredients() - { - return _ingredients; - } - - public final boolean isStackable() - { - return _stackable; - } - - public long getTaxAmount() - { - return 0; - } -} \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java deleted file mode 100644 index b0dd180176..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Item; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class Ingredient -{ - private int _itemId; - private long _itemCount; - private final int _enchantmentLevel; - private boolean _isTaxIngredient; - private boolean _maintainIngredient; - private L2Item _template = null; - private ItemInfo _itemInfo = null; - private final double _chance; - - public Ingredient(StatsSet set) - { - this(set.getInt("id"), set.getLong("count"), set.getInt("enchantmentLevel", 0), set.getDouble("chance", 0), set.getBoolean("isTaxIngredient", false), set.getBoolean("maintainIngredient", false)); - } - - public Ingredient(int itemId, long itemCount, int enchantmentLevel, double chance, boolean isTaxIngredient, boolean maintainIngredient) - { - _itemId = itemId; - _itemCount = itemCount; - _enchantmentLevel = enchantmentLevel; - _chance = chance; - _isTaxIngredient = isTaxIngredient; - _maintainIngredient = maintainIngredient; - if (_itemId > 0) - { - _template = ItemTable.getInstance().getTemplate(_itemId); - } - } - - /** - * @return a new Ingredient instance with the same values as this. - */ - public Ingredient getCopy() - { - return new Ingredient(_itemId, _itemCount, _enchantmentLevel, _chance, _isTaxIngredient, _maintainIngredient); - } - - public final L2Item getTemplate() - { - return _template; - } - - public final void setItemInfo(L2ItemInstance item) - { - _itemInfo = new ItemInfo(item); - } - - public final void setItemInfo(ItemInfo info) - { - _itemInfo = info; - } - - public final ItemInfo getItemInfo() - { - return _itemInfo; - } - - public final int getEnchantLevel() - { - return _itemInfo == null ? _enchantmentLevel : _itemInfo.getEnchantLevel(); - } - - public final void setItemId(int itemId) - { - _itemId = itemId; - } - - public final int getItemId() - { - return _itemId; - } - - public final void setItemCount(long itemCount) - { - _itemCount = itemCount; - } - - public final long getItemCount() - { - return _itemCount; - } - - public double getChance() - { - return _chance; - } - - public final void setIsTaxIngredient(boolean isTaxIngredient) - { - _isTaxIngredient = isTaxIngredient; - } - - public final boolean isTaxIngredient() - { - return _isTaxIngredient; - } - - public final void setMaintainIngredient(boolean maintainIngredient) - { - _maintainIngredient = maintainIngredient; - } - - public final boolean getMaintainIngredient() - { - return _maintainIngredient; - } - - public final boolean isStackable() - { - return (_template == null) || _template.isStackable(); - } - - public final boolean isArmorOrWeapon() - { - return (_template != null) && ((_template instanceof L2Armor) || (_template instanceof L2Weapon)); - } - - public final int getWeight() - { - return _template == null ? 0 : _template.getWeight(); - } -} diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java deleted file mode 100644 index 4658a69daf..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.Collection; - -import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.variables.ItemVariables; - -/** - * @author DS - */ -public class ItemInfo -{ - private final int _enchantLevel, _augmentId; - private final byte _elementId; - private final int _elementPower; - private final AttributeHolder[] _attributes; - private final int _visualId; - private final int _visualStoneId; - private final long _visualIdLifetime; - private final Collection _specialAbilities; - private final Collection _additionalSpecialAbilities; - - public ItemInfo(L2ItemInstance item) - { - _enchantLevel = item.getEnchantLevel(); - _augmentId = item.getAugmentation() != null ? item.getAugmentation().getId() : 0; - _elementId = item.getAttackAttributeType().getClientId(); - _elementPower = item.getAttackAttributePower(); - _attributes = item.getAttributes() != null ? item.getAttributes().toArray(new AttributeHolder[6]) : new AttributeHolder[6]; - _visualId = item.getVisualId(); - _visualStoneId = item.getVariables().getInt(ItemVariables.VISUAL_APPEARANCE_STONE_ID, 0); - _visualIdLifetime = item.getVisualLifeTime(); - _specialAbilities = item.getSpecialAbilities(); - _additionalSpecialAbilities = item.getAdditionalSpecialAbilities(); - } - - public final int getEnchantLevel() - { - return _enchantLevel; - } - - public final int getAugmentId() - { - return _augmentId; - } - - public final byte getElementId() - { - return _elementId; - } - - public final int getElementPower() - { - return _elementPower; - } - - public final AttributeHolder[] getElementals() - { - return _attributes; - } - - public int getVisualId() - { - return _visualId; - } - - public int getVisualStoneId() - { - return _visualStoneId; - } - - public long getVisualIdLifeTime() - { - return _visualIdLifetime; - } - - public Collection getSpecialAbilities() - { - return _specialAbilities; - } - - public Collection getAdditionalSpecialAbilities() - { - return _additionalSpecialAbilities; - } -} \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java deleted file mode 100644 index ce1783c276..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * @author DS - */ -public class ListContainer -{ - private final int _listId; - private boolean _isChanceMultisell; - private boolean _applyTaxes = false; - private boolean _maintainEnchantment = false; - private double _useRate = 1.0; - - protected List _entries = new ArrayList<>(); - protected Set _npcsAllowed = null; - - public ListContainer(int listId) - { - _listId = listId; - } - - public ListContainer(ListContainer container) - { - _listId = container.getListId(); - _isChanceMultisell = container.isChanceMultisell(); - _maintainEnchantment = container.getMaintainEnchantment(); - } - - public final List getEntries() - { - return _entries; - } - - public final int getListId() - { - return _listId; - } - - public boolean isChanceMultisell() - { - return _isChanceMultisell; - } - - public void setIsChanceMultisell(boolean val) - { - _isChanceMultisell = val; - } - - public final void setApplyTaxes(boolean applyTaxes) - { - _applyTaxes = applyTaxes; - } - - public final boolean getApplyTaxes() - { - return _applyTaxes; - } - - public final void setMaintainEnchantment(boolean maintainEnchantment) - { - _maintainEnchantment = maintainEnchantment; - } - - public double getUseRate() - { - return _useRate; - } - - /** - * Set this to create multisell with increased products, all product counts will be multiplied by the rate specified.
- * NOTE: It affects only parser, it won't change values of already parsed multisell since MultiSells' parseEntry method handles this feature. - * @param rate - */ - public void setUseRate(double rate) - { - _useRate = rate; - } - - public final boolean getMaintainEnchantment() - { - return _maintainEnchantment; - } - - public void allowNpc(int npcId) - { - if (_npcsAllowed == null) - { - _npcsAllowed = new HashSet<>(); - } - _npcsAllowed.add(npcId); - } - - public boolean isNpcAllowed(int npcId) - { - return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); - } - - public boolean isNpcOnly() - { - return _npcsAllowed != null; - } -} diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java deleted file mode 100644 index 46f4aac588..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import static com.l2jmobius.gameserver.model.itemcontainer.Inventory.ADENA_ID; - -import java.util.ArrayList; - -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class PreparedEntry extends Entry -{ - private long _taxAmount = 0; - - public PreparedEntry(Entry template, L2ItemInstance item, boolean applyTaxes, boolean maintainEnchantment, double taxRate) - { - _entryId = template.getEntryId() * 100000; - if (maintainEnchantment && (item != null)) - { - _entryId += item.getEnchantLevel(); - } - - ItemInfo info = null; - long adenaAmount = 0; - - _ingredients = new ArrayList<>(template.getIngredients().size()); - for (Ingredient ing : template.getIngredients()) - { - if (ing.getItemId() == ADENA_ID) - { - // Tax ingredients added only if taxes enabled - if (ing.isTaxIngredient()) - { - // if taxes are to be applied, modify/add the adena count based on the template adena/ancient adena count - if (applyTaxes) - { - _taxAmount += Math.round(ing.getItemCount() * taxRate); - } - } - else - { - adenaAmount += ing.getItemCount(); - } - // do not yet add this adena amount to the list as non-taxIngredient adena might be entered later (order not guaranteed) - continue; - } - if (maintainEnchantment && (item != null) && ing.isArmorOrWeapon()) - { - info = new ItemInfo(item); - final Ingredient newIngredient = ing.getCopy(); - newIngredient.setItemInfo(info); - _ingredients.add(newIngredient); - } - else - { - _ingredients.add(ing.getCopy()); - } - } - - // now add the adena, if any. - adenaAmount += _taxAmount; // do not forget tax - if (adenaAmount > 0) - { - _ingredients.add(new Ingredient(ADENA_ID, adenaAmount, 0, 0, false, false)); - } - - // now copy products - _products = new ArrayList<>(template.getProducts().size()); - for (Ingredient ing : template.getProducts()) - { - if (!ing.isStackable()) - { - _stackable = false; - } - - final Ingredient newProduct = ing.getCopy(); - if (maintainEnchantment && ing.isArmorOrWeapon()) - { - newProduct.setItemInfo(info); - } - _products.add(newProduct); - } - } - - @Override - public final long getTaxAmount() - { - return _taxAmount; - } -} diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java deleted file mode 100644 index 2e78fa3019..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedList; - -import com.l2jmobius.gameserver.model.actor.L2Npc; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -public class PreparedListContainer extends ListContainer -{ - private int _npcObjectId = 0; - - public PreparedListContainer(ListContainer template, boolean inventoryOnly, L2PcInstance player, L2Npc npc) - { - super(template); - - setMaintainEnchantment(template.getMaintainEnchantment()); - setApplyTaxes(false); - double taxRate = 0; - if (npc != null) - { - _npcObjectId = npc.getObjectId(); - if (template.getApplyTaxes() && npc.isInTown() && (npc.getCastle().getOwnerId() > 0)) - { - setApplyTaxes(true); - taxRate = npc.getCastle().getTaxRate(); - } - } - - if (inventoryOnly) - { - if (player == null) - { - return; - } - - final Collection items; - if (getMaintainEnchantment()) - { - items = player.getInventory().getUniqueItemsByEnchantLevel(false, false, false); - } - else - { - items = player.getInventory().getUniqueItems(false, false, false); - } - - _entries = new LinkedList<>(); - for (L2ItemInstance item : items) - { - // only do the match up on equippable items that are not currently equipped - // so for each appropriate item, produce a set of entries for the multisell list. - if (!item.isEquipped() && ((item.getItem() instanceof L2Armor) || (item.getItem() instanceof L2Weapon))) - { - // loop through the entries to see which ones we wish to include - for (Entry ent : template.getEntries()) - { - // check ingredients of this entry to see if it's an entry we'd like to include. - for (Ingredient ing : ent.getIngredients()) - { - if (item.getId() == ing.getItemId()) - { - _entries.add(new PreparedEntry(ent, item, getApplyTaxes(), getMaintainEnchantment(), taxRate)); - break; // next entry - } - } - } - } - } - } - else - { - _entries = new ArrayList<>(template.getEntries().size()); - for (Entry ent : template.getEntries()) - { - _entries.add(new PreparedEntry(ent, null, getApplyTaxes(), false, taxRate)); - } - } - } - - public final boolean checkNpcObjectId(int npcObjectId) - { - return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); - } -} diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/options/Options.java index 2c24b77b7e..660c49c76e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/options/Options.java @@ -32,12 +32,10 @@ import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime; public class Options { private final int _id; - private final List _effects = new ArrayList<>(); - - private SkillHolder _activeSkill = null; - private SkillHolder _passiveSkill = null; - - private final List _activationSkills = new ArrayList<>(); + private List _effects = null; + private List _activeSkill = null; + private List _passiveSkill = null; + private List _activationSkills = null; /** * @param id @@ -54,6 +52,10 @@ public class Options public void addEffect(AbstractEffect effect) { + if (_effects == null) + { + _effects = new ArrayList<>(); + } _effects.add(effect); } @@ -64,51 +66,62 @@ public class Options public boolean hasEffects() { - return !_effects.isEmpty(); + return _effects != null; } - public boolean hasActiveSkill() + public boolean hasActiveSkills() { return _activeSkill != null; } - public SkillHolder getActiveSkill() + public List getActiveSkills() { return _activeSkill; } - public void setActiveSkill(SkillHolder holder) + public void addActiveSkill(SkillHolder holder) { - _activeSkill = holder; + if (_activeSkill == null) + { + _activeSkill = new ArrayList<>(); + } + _activeSkill.add(holder); } - public boolean hasPassiveSkill() + public boolean hasPassiveSkills() { return _passiveSkill != null; } - public SkillHolder getPassiveSkill() + public List getPassiveSkills() { return _passiveSkill; } - public void setPassiveSkill(SkillHolder holder) + public void addPassiveSkill(SkillHolder holder) { - _passiveSkill = holder; + if (_passiveSkill == null) + { + _passiveSkill = new ArrayList<>(); + } + _passiveSkill.add(holder); } public boolean hasActivationSkills() { - return !_activationSkills.isEmpty(); + return _activationSkills != null; } public boolean hasActivationSkills(OptionsSkillType type) { - for (OptionsSkillHolder holder : _activationSkills) + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - return true; + if (holder.getSkillType() == type) + { + return true; + } } } return false; @@ -121,12 +134,15 @@ public class Options public List getActivationsSkills(OptionsSkillType type) { - final List temp = new ArrayList<>(); - for (OptionsSkillHolder holder : _activationSkills) + List temp = new ArrayList<>(); + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - temp.add(holder); + if (holder.getSkillType() == type) + { + temp.add(holder); + } } } return temp; @@ -134,6 +150,10 @@ public class Options public void addActivationSkill(OptionsSkillHolder holder) { + if (_activationSkills == null) + { + _activationSkills = new ArrayList<>(); + } _activationSkills.add(holder); } @@ -171,15 +191,21 @@ public class Options player.getEffectList().add(info); } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - addSkill(player, getActiveSkill().getSkill()); - player.sendDebugMessage("Adding active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - addSkill(player, getPassiveSkill().getSkill()); - player.sendDebugMessage("Adding passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { @@ -208,15 +234,21 @@ public class Options } } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - player.removeSkill(getActiveSkill().getSkill(), false, false); - player.sendDebugMessage("Removing active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + player.removeSkill(holder.getSkill(), false, false); + player.sendDebugMessage("Removing active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - player.removeSkill(getPassiveSkill().getSkill(), false, true); - player.sendDebugMessage("Removing passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + player.removeSkill(holder.getSkill(), false, true); + player.sendDebugMessage("Removing passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java index fd1fb41f5f..269911c172 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -59,6 +59,7 @@ public class PlayerVariables extends AbstractVariables public static final String EXTEND_DROP = "EXTEND_DROP"; public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; + public static final String DELUSION_RETURN = "DELUSION_RETURN"; private final int _objectId; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/ZoneId.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/ZoneId.java index d3e223d4e3..41f3e41947 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/ZoneId.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/ZoneId.java @@ -37,7 +37,6 @@ public enum ZoneId NO_SUMMON_FRIEND, FORT, NO_STORE, - TOWN, SCRIPT, HQ, DANGER_AREA, @@ -47,7 +46,8 @@ public enum ZoneId NO_RESTART, SAYUNE, FISHING, - UNDYING; + UNDYING, + TAX; public static int getZoneCount() { diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java similarity index 56% rename from L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java rename to L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java index 3304f6cbe3..df70242f32 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java @@ -16,36 +16,33 @@ */ package com.l2jmobius.gameserver.model.zone.type; +import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.entity.Castle; import com.l2jmobius.gameserver.model.zone.L2ZoneType; import com.l2jmobius.gameserver.model.zone.ZoneId; /** - * A Town zone - * @author durgus + * Tax zone type. + * @author malyelfik */ -public class L2TownZone extends L2ZoneType +public class L2TaxZone extends L2ZoneType { - private int _townId; - private int _taxById; + private int _domainId; + private Castle _castle; - public L2TownZone(int id) + public L2TaxZone(int id) { super(id); - - _taxById = 0; } @Override public void setParameter(String name, String value) { - if (name.equals("townId")) + if (name.equalsIgnoreCase("domainId")) { - _townId = Integer.parseInt(value); - } - else if (name.equals("taxById")) - { - _taxById = Integer.parseInt(value); + _domainId = Integer.parseInt(value); } else { @@ -56,30 +53,34 @@ public class L2TownZone extends L2ZoneType @Override protected void onEnter(L2Character character) { - character.setInsideZone(ZoneId.TOWN, true); + character.setInsideZone(ZoneId.TAX, true); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(this); + } } @Override protected void onExit(L2Character character) { - character.setInsideZone(ZoneId.TOWN, false); + character.setInsideZone(ZoneId.TAX, false); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(null); + } } /** - * Returns this zones town id (if any) - * @return + * Gets castle associated with tax zone.
+ * @return instance of {@link Castle} if found otherwise {@code null} */ - public int getTownId() + public Castle getCastle() { - return _townId; - } - - /** - * Returns this town zones castle id - * @return - */ - public final int getTaxById() - { - return _taxById; + // Lazy loading is used because zone is loaded before residence + if (_castle == null) + { + _castle = CastleManager.getInstance().getCastleById(_domainId); + } + return _castle; } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java index 05d5921904..febb0c0f84 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java @@ -16,31 +16,39 @@ */ package com.l2jmobius.gameserver.network.clientpackets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedHashMap; +import java.util.Collections; +import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.Map.Entry; +import java.util.OptionalLong; +import java.util.stream.Collectors; -import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.commons.util.Rnd; +import com.l2jmobius.commons.util.CommonUtil; +import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; import com.l2jmobius.gameserver.data.xml.impl.MultisellData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.enums.SpecialItemType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.model.variables.ItemVariables; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; +import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import com.l2jmobius.gameserver.network.serverpackets.UserInfo; /** * The Class MultiSellChoose. @@ -50,6 +58,19 @@ public class MultiSellChoose implements IClientIncomingPacket private int _listId; private int _entryId; private long _amount; + private int _enchantLevel; + private int _augmentOption1; + private int _augmentOption2; + private short _attackAttribute; + private short _attributePower; + private short _fireDefence; + private short _waterDefence; + private short _windDefence; + private short _earthDefence; + private short _holyDefence; + private short _darkDefence; + private EnsoulOption[] _soulCrystalOptions; + private EnsoulOption[] _soulCrystalSpecialOptions; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -57,17 +78,29 @@ public class MultiSellChoose implements IClientIncomingPacket _listId = packet.readD(); _entryId = packet.readD(); _amount = packet.readQ(); - // _unk1 = packet.readH(); - // _unk2 = packet.readD(); - // _unk3 = packet.readD(); - // _unk4 = packet.readH(); // elemental attributes - // _unk5 = packet.readH(); // elemental attributes - // _unk6 = packet.readH(); // elemental attributes - // _unk7 = packet.readH(); // elemental attributes - // _unk8 = packet.readH(); // elemental attributes - // _unk9 = packet.readH(); // elemental attributes - // _unk10 = packet.readH(); // elemental attributes - // _unk11 = packet.readH(); // elemental attributes + _enchantLevel = packet.readH(); + _augmentOption1 = packet.readD(); + _augmentOption2 = packet.readD(); + _attackAttribute = (short) packet.readH(); + _attributePower = (short) packet.readH(); + _fireDefence = (short) packet.readH(); + _waterDefence = (short) packet.readH(); + _windDefence = (short) packet.readH(); + _earthDefence = (short) packet.readH(); + _holyDefence = (short) packet.readH(); + _darkDefence = (short) packet.readH(); + _soulCrystalOptions = new EnsoulOption[packet.readC()]; // Ensoul size + for (int i = 0; i < _soulCrystalOptions.length; i++) + { + final int ensoulId = packet.readD(); // Ensoul option id + _soulCrystalOptions[i] = EnsoulData.getInstance().getOption(ensoulId); + } + _soulCrystalSpecialOptions = new EnsoulOption[packet.readC()]; // Special ensoul size + for (int i = 0; i < _soulCrystalSpecialOptions.length; i++) + { + final int ensoulId = packet.readD(); // Special ensoul option id. + _soulCrystalSpecialOptions[i] = EnsoulData.getInstance().getOption(ensoulId); + } return true; } @@ -86,411 +119,471 @@ public class MultiSellChoose implements IClientIncomingPacket return; } - if ((_amount < 1) || (_amount > 5000)) + if ((_amount < 1) || (_amount > 999999)) // 999 999 is client max. { - player.setMultiSell(null); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); return; } - final PreparedListContainer list = player.getMultiSell(); - if ((list == null) || (list.getListId() != _listId)) + PreparedMultisellListHolder list = player.getMultiSell(); + if ((list == null) || (list.getId() != _listId)) { player.setMultiSell(null); return; } final L2Npc npc = player.getLastFolkNPC(); - if (!list.isNpcAllowed(-1) && !isAllowedToUse(player, npc, list)) + if (!isAllowedToUse(player, npc, list)) { + if (player.isGM()) + { + player.sendMessage("Multisell " + _listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + player.setMultiSell(null); + return; + } + } + + if (((_soulCrystalOptions != null) && CommonUtil.contains(_soulCrystalOptions, null)) || ((_soulCrystalSpecialOptions != null) && CommonUtil.contains(_soulCrystalSpecialOptions, null))) + { + _log.severe("Character: " + player.getName() + " requested multisell entry with invalid soul crystal options. Multisell: " + _listId + " entry: " + _entryId); player.setMultiSell(null); return; } - for (Entry entry : list.getEntries()) + final MultisellEntryHolder entry = list.getEntries().get(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + if (entry == null) { - if (entry.getEntryId() == _entryId) + _log.severe("Character: " + player.getName() + " requested inexistant prepared multisell entry. Multisell: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + if (!entry.isStackable() && (_amount > 1)) + { + _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final ItemInfo itemEnchantment = list.getItemEnchantment(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + + // Validate the requested item with its full stats. + //@formatter:off + if ((itemEnchantment != null) && ((_amount > 1) + || (itemEnchantment.getEnchantLevel() != _enchantLevel) + || (itemEnchantment.getAttackElementType() != _attackAttribute) + || (itemEnchantment.getAttackElementPower() != _attributePower) + || (itemEnchantment.getAttributeDefence(AttributeType.FIRE) != _fireDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WATER) != _waterDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WIND) != _windDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.EARTH) != _earthDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.HOLY) != _holyDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.DARK) != _darkDefence) + || ((itemEnchantment.getAugmentation() == null) && ((_augmentOption1 != 0) || (_augmentOption2 != 0))) + || ((itemEnchantment.getAugmentation() != null) && ((itemEnchantment.getAugmentation().getOptionId(0) != _augmentOption1) || (itemEnchantment.getAugmentation().getOptionId(1) != _augmentOption2))) + || ((_soulCrystalOptions != null) && itemEnchantment.getSoulCrystalOptions().stream().anyMatch(e -> !CommonUtil.contains(_soulCrystalOptions, e))) + || ((_soulCrystalOptions == null) && !itemEnchantment.getSoulCrystalOptions().isEmpty()) + || ((_soulCrystalSpecialOptions != null) && itemEnchantment.getSoulCrystalOptions().stream().anyMatch(e -> !CommonUtil.contains(_soulCrystalSpecialOptions, e))) + || ((_soulCrystalSpecialOptions == null) && !itemEnchantment.getSoulCrystalSpecialOptions().isEmpty()) + )) + //@formatter:on + { + _log.severe("Character: " + player.getName() + " is trying to upgrade equippable item, but the stats doesn't match. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final L2Clan clan = player.getClan(); + final PcInventory inventory = player.getInventory(); + + try + { + int slots = 0; + int weight = 0; + for (ItemChanceHolder product : entry.getProducts()) { - if (!entry.isStackable() && (_amount > 1)) + if (product.getId() < 0) + { + // Check if clan exists for clan reputation products. + if ((clan == null) && (SpecialItemType.CLAN_REPUTATION.getClientId() == product.getId())) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return; + } + + continue; + } + + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + if (template == null) { - _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell, id:" + _listId + ":" + _entryId); player.setMultiSell(null); return; } - final PcInventory inv = player.getInventory(); + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); - int slots = 0; - int weight = 0; - for (Ingredient e : entry.getProducts()) + if (!(totalCount >= 0) && (totalCount <= Integer.MAX_VALUE)) { - if (e.getItemId() < 0) - { - continue; - } - - if (!e.isStackable()) - { - slots += e.getItemCount() * _amount; - } - else if (player.getInventory().getItemByItemId(e.getItemId()) == null) - { - slots++; - } - weight += e.getItemCount() * _amount * e.getWeight(); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; } - if (!inv.validateWeight(weight)) + if (!template.isStackable() || (player.getInventory().getItemByItemId(product.getId()) == null)) + { + slots++; + } + + weight += totalCount * template.getWeight(); + + if (!inventory.validateWeight(weight)) { player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_WEIGHT_LIMIT); return; } - if (!inv.validateCapacity(slots)) + if ((slots > 0) && !inventory.validateCapacity(slots)) { player.sendPacket(SystemMessageId.YOUR_INVENTORY_IS_FULL); return; } - final ArrayList ingredientsList = new ArrayList<>(entry.getIngredients().size()); - // Generate a list of distinct ingredients and counts in order to check if the correct item-counts are possessed by the player - boolean newIng; - for (Ingredient e : entry.getIngredients()) + // If this is a chance multisell, reset slots and weight because only one item should be seleted. We just need to check if conditions for every item is met. + if (list.isChanceMultisell()) { - newIng = true; - // at this point, the template has already been modified so that enchantments are properly included - // whenever they need to be applied. Uniqueness of items is thus judged by item id AND enchantment level - for (int i = ingredientsList.size(); --i >= 0;) + slots = 0; + weight = 0; + } + } + + // Check for enchanted item if its present in the inventory. + if ((itemEnchantment != null) && (inventory.getItemByObjectId(itemEnchantment.getObjectId()) == null)) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(itemEnchantment.getItem().getId()); + player.sendPacket(sm); + return; + } + + // Summarize all item counts into one map. That would include non-stackable items under 1 id and multiple count. + final Map itemIdCount = entry.getIngredients().stream().collect(Collectors.toMap(i -> i.getId(), i -> list.getIngredientCount(i), (k1, k2) -> Math.addExact(k1, k2))); + + // Now check if the player has sufficient items in the inventory to cover the ingredients' expences. Take care for non-stackable items like 2 swords to dual. + boolean allOk = true; + for (Entry idCount : itemIdCount.entrySet()) + { + allOk &= checkIngredients(player, list, inventory, clan, idCount.getKey(), Math.multiplyExact(idCount.getValue(), _amount)); + } + + // The above operation should not be short-circuited, in order to show all missing ingredients. + if (!allOk) + { + return; + } + + final InventoryUpdate iu = new InventoryUpdate(); + boolean itemEnchantmentProcessed = (itemEnchantment == null); + + // Take all ingredients + for (ItemHolder ingredient : entry.getIngredients()) + { + final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId()); + if (specialItem != null) + { + // Take special item. + switch (specialItem) { - final Ingredient ex = ingredientsList.get(i); - // if the item was already added in the list, merely increment the count - // this happens if 1 list entry has the same ingredient twice (example 2 swords = 1 dual) - if ((ex.getItemId() == e.getItemId()) && (ex.getEnchantLevel() == e.getEnchantLevel())) + case CLAN_REPUTATION: { - if ((ex.getItemCount() + e.getItemCount()) > Integer.MAX_VALUE) + if (clan != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); - return; + clan.takeReputationScore((int) totalCount, true); + SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); + smsg.addLong(totalCount); + player.sendPacket(smsg); } - // two same ingredients, merge into one and replace old - final Ingredient ing = ex.getCopy(); - ing.setItemCount(ex.getItemCount() + e.getItemCount()); - ingredientsList.set(i, ing); - newIng = false; break; } - } - if (newIng) - { - // if it's a new ingredient, just store its info directly (item id, count, enchantment) - ingredientsList.add(e); + case FAME: + { + player.setFame(player.getFame() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.setRaidbossPoints(player.getRaidbossPoints() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(totalCount)); + break; + } + case PC_CAFE_POINTS: + { + player.setPcCafePoints((int) (player.getPcCafePoints() - totalCount)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special ingredient with id: " + ingredient.getId() + "."); + return; + } } } - - // now check if the player has sufficient items in the inventory to cover the ingredient expenses - for (Ingredient e : ingredientsList) + else if (!itemEnchantmentProcessed && (itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) { - if ((e.getItemCount() * _amount) > Integer.MAX_VALUE) + // Take the enchanted item. + final L2ItemInstance destroyedItem = inventory.destroyItem("Multisell", itemEnchantment.getObjectId(), totalCount, player, npc); + if (destroyedItem != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + itemEnchantmentProcessed = true; + iu.addItem(destroyedItem); + } + else + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(ingredient.getId()); + player.sendPacket(sm); return; } - if (e.getItemId() < 0) + } + else + { + // Take a regular item. + final L2ItemInstance destroyedItem = inventory.destroyItemByItemId("Multisell", ingredient.getId(), totalCount, player, npc); + if (destroyedItem != null) { - if (!MultisellData.hasSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) - { - return; - } + iu.addItem(destroyedItem); } else { - // if this is not a list that maintains enchantment, check the count of all items that have the given id. - // otherwise, check only the count of items with exactly the needed enchantment level - final long required = (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount(); - if (inv.getInventoryItemCount(e.getItemId(), (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) ? e.getEnchantLevel() : -1, false) < required) + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredient.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + return; + } + } + } + + // Generate the appropriate items + List products = entry.getProducts(); + if (list.isChanceMultisell()) + { + final ItemChanceHolder randomProduct = ItemChanceHolder.getRandomHolder(entry.getProducts()); + products = randomProduct != null ? Collections.singletonList(randomProduct) : Collections.emptyList(); + } + + for (ItemChanceHolder product : products) + { + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(product.getId()); + if (specialItem != null) + { + // Give special item. + switch (specialItem) + { + case CLAN_REPUTATION: { - if (e.getEnchantLevel() > 0) + if (clan != null) { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addString("+" + e.getEnchantLevel() + " " + e.getTemplate().getName()); - sm.addLong(required); - player.sendPacket(sm); - } - else - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addItemName(e.getTemplate()); - sm.addLong(required); - player.sendPacket(sm); + clan.addReputationScore((int) totalCount, true); } + break; + } + case FAME: + { + player.setFame((int) (player.getFame() + totalCount)); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.increaseRaidbossPoints((int) totalCount); + player.sendPacket(new UserInfo(player)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special product with id: " + product.getId() + "."); return; } } } - - final Map originalInfos = new LinkedHashMap<>(); - /** All ok, remove items and add final product */ - - for (Ingredient e : entry.getIngredients()) + else { - if (e.getItemId() < 0) + // Give item. + final L2ItemInstance addedItem = inventory.addItem("Multisell", product.getId(), totalCount, player, npc); + iu.addItem(addedItem); + + // Check if the newly given item should be enchanted. + if (itemEnchantmentProcessed && list.isMaintainEnchantment() && (itemEnchantment != null) && addedItem.isEquipable() && addedItem.getItem().getClass().equals(itemEnchantment.getItem().getClass())) { - if (!MultisellData.takeSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) + addedItem.setEnchantLevel(itemEnchantment.getEnchantLevel()); + addedItem.setAugmentation(itemEnchantment.getAugmentation(), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.findByClientId(itemEnchantment.getAttackElementType()), itemEnchantment.getAttackElementPower()), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.FIRE, itemEnchantment.getAttributeDefence(AttributeType.FIRE)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WATER, itemEnchantment.getAttributeDefence(AttributeType.WATER)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WIND, itemEnchantment.getAttributeDefence(AttributeType.WIND)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.EARTH, itemEnchantment.getAttributeDefence(AttributeType.EARTH)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.HOLY, itemEnchantment.getAttributeDefence(AttributeType.HOLY)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.DARK, itemEnchantment.getAttributeDefence(AttributeType.DARK)), false); + if (_soulCrystalOptions != null) { - return; - } - } - else - { - L2ItemInstance itemToTake = inv.getItemByItemId(e.getItemId()); // initialize and initial guess for the item to take. - if (itemToTake == null) - { // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - _log.severe("Character: " + player.getName() + " is trying to cheat in multisell, id:" + _listId + ":" + _entryId); - player.setMultiSell(null); - return; - } - - // if (itemToTake.isEquipped()) - // { - // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - // LOGGER.severe("Character: " + player.getName() + " is trying to cheat in multisell, exchanging equipped item, merchatnt id:" + merchant.getNpcId()); - // player.setMultiSell(null); - // return; - // } - - if (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) - { - // if it's a stackable item, just reduce the amount from the first (only) instance that is found in the inventory - if (itemToTake.isStackable()) + for (int i = 0; i < _soulCrystalOptions.length; i++) { - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), e.getItemCount() * _amount, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - else - { - // for non-stackable items, one of two scenaria are possible: - // a) list maintains enchantment: get the instances that exactly match the requested enchantment level - // b) list does not maintain enchantment: get the instances with the LOWEST enchantment level - - // a) if enchantment is maintained, then get a list of items that exactly match this enchantment - if (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) - { - // loop through this list and remove (one by one) each item until the required amount is taken. - final L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), e.getEnchantLevel(), false).toArray(new L2ItemInstance[0]); - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - originalInfos.put(i, new ItemInfo(inventoryContents[i])); - if (!player.destroyItem("Multisell", inventoryContents[i].getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } - else - // b) enchantment is not maintained. Get the instances with the LOWEST enchantment level - { - // NOTE: There are 2 ways to achieve the above goal. - // 1) Get all items that have the correct itemId, loop through them until the lowest enchantment - // level is found. Repeat all this for the next item until proper count of items is reached. - // 2) Get all items that have the correct itemId, sort them once based on enchantment level, - // and get the range of items that is necessary. - // Method 1 is faster for a small number of items to be exchanged. - // Method 2 is faster for large amounts. - // - // EXPLANATION: - // Worst case scenario for algorithm 1 will make it run in a number of cycles given by: - // m*(2n-m+1)/2 where m is the number of items to be exchanged and n is the total - // number of inventory items that have a matching id. - // With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle - // for case b (just grab the m first items) or in linear time for case a (find the beginning of items - // with correct enchantment, index x, and take all items from x to x+m). - // Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 > - // (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) + log(n/n*n) = - // nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n) - // So for m < log(n) then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n) - // - // IDEALLY: - // In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n - // if ( (2<<(e.getItemCount()// _amount)) < inventoryContents.length ) - // // do Algorithm 1, no sorting - // else - // // do Algorithm 2, sorting - // - // CURRENT IMPLEMENTATION: - // In general, it is going to be very rare for a person to do a massive exchange of non-stackable items - // For this reason, we assume that algorithm 1 will always suffice and we keep things simple. - // If, in the future, it becomes necessary that we optimize, the above discussion should make it clear - // what optimization exactly is necessary (based on the comments under "IDEALLY"). - // - - // choice 1. Small number of items exchanged. No sorting. - for (int i = 1; i <= (e.getItemCount() * _amount); i++) - { - final Collection inventoryContents = inv.getAllItemsByItemId(e.getItemId(), false); - - itemToTake = inventoryContents.iterator().next(); - // get item with the LOWEST enchantment level from the inventory... - // +0 is lowest by default... - if (itemToTake.getEnchantLevel() > 0) - { - for (L2ItemInstance item : inventoryContents) - { - if ((item.getEnchantLevel() < itemToTake.getEnchantLevel()) && (item.getEnchantLevel() >= e.getEnchantLevel())) - { - itemToTake = item; - // nothing will have enchantment less than 0. If a zero-enchanted - // item is found, just take it - if (itemToTake.getEnchantLevel() == 0) - { - break; - } - } - } - } - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } + addedItem.addSpecialAbility(_soulCrystalOptions[i], i + 1, 1, false); } } - } - } - - final double itemRandom = 100 * Rnd.nextDouble(); - float cumulativeChance = 0; - - boolean matched = false; - // Generate the appropriate items - for (Ingredient e : entry.getProducts()) - { - if (list.isChanceMultisell()) - { - // Skip first entry. - if (e.getChance() < 1) + if (_soulCrystalSpecialOptions != null) { - continue; + for (int i = 0; i < _soulCrystalSpecialOptions.length; i++) + { + addedItem.addSpecialAbility(_soulCrystalSpecialOptions[i], i + 1, 2, false); + } } - // Calculate chance - matched = itemRandom < (cumulativeChance += e.getChance()); - if (!matched) - { - continue; - } + addedItem.updateDatabase(); + + // Mark that we have already upgraded the item. + itemEnchantmentProcessed = false; } - if (e.getItemId() < 0) + if (addedItem.getCount() > 1) { - MultisellData.giveSpecialProduct(e.getItemId(), e.getItemCount() * _amount, player); + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); + sm.addItemName(addedItem.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + } + else if (addedItem.getEnchantLevel() > 0) + { + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); + sm.addLong(addedItem.getEnchantLevel()); + sm.addItemName(addedItem.getId()); + player.sendPacket(sm); } else { - if (e.isStackable()) - { - inv.addItem("Multisell", e.getItemId(), e.getItemCount() * _amount, player, player.getTarget()); - } - else - { - L2ItemInstance product = null; - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - product = inv.addItem("Multisell", e.getItemId(), 1, player, player.getTarget()); - if ((product != null) && (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0))) - { - final ItemInfo info = originalInfos.get(i); - if (info != null) - { - if (info.getAugmentId() > 0) - { - product.setAugmentation(new L2Augmentation(info.getAugmentId())); - } - if (info.getElementals().length > 0) - { - Arrays.stream(info.getElementals()).filter(Objects::nonNull).forEach(product::setAttribute); - } - if (info.getVisualId() > 0) - { - product.setVisualId(info.getVisualId()); - if (info.getVisualStoneId() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_STONE_ID, info.getVisualStoneId()); - } - if (info.getVisualIdLifeTime() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_LIFE_TIME, info.getVisualIdLifeTime()); - product.scheduleVisualLifeTime(); - } - } - if (!info.getSpecialAbilities().isEmpty()) - { - int position = 0; - for (EnsoulOption option : info.getSpecialAbilities()) - { - product.addSpecialAbility(option, position++, 1, true); - } - } - if (!info.getAdditionalSpecialAbilities().isEmpty()) - { - int position = 0; - for (EnsoulOption option : info.getAdditionalSpecialAbilities()) - { - product.addSpecialAbility(option, position++, 2, true); - } - } - } - product.setEnchantLevel(e.getEnchantLevel()); - product.updateDatabase(); - } - } - } - - final SystemMessage sm; - if ((e.getItemCount() * _amount) > 1) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); - sm.addItemName(e.getItemId()); - sm.addLong(e.getItemCount() * _amount); - player.sendPacket(sm); - } - else - { - if (list.getMaintainEnchantment() && (e.getEnchantLevel() > 0)) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); - sm.addLong(e.getEnchantLevel()); - sm.addItemName(e.getItemId()); - } - else - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); - sm.addItemName(e.getItemId()); - } - player.sendPacket(sm); - } - } - - if (matched) - { - break; + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); + sm.addItemName(addedItem); + player.sendPacket(sm); } } - player.sendItemList(false); - - // finally, give the tax to the castle... - if ((npc != null) && (entry.getTaxAmount() > 0)) + } + + // Update inventory and weight. + player.sendInventoryUpdate(iu); + + // finally, give the tax to the castle... + if ((npc != null) && list.isApplyTaxes()) + { + final OptionalLong taxPaid = entry.getIngredients().stream().filter(i -> i.getId() == Inventory.ADENA_ID).mapToLong(i -> Math.round(i.getCount() * list.getIngredientMultiplier() * list.getTaxRate()) * _amount).reduce(Math::multiplyExact); + if (taxPaid.isPresent()) { - npc.getCastle().addToTreasury(entry.getTaxAmount() * _amount); + npc.handleTaxPayment(taxPaid.getAsLong()); } - - break; } } + catch (ArithmeticException ae) + { + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; + } + + // Re-send multisell after successful exchange of inventory-only shown items. + if (list.isInventoryOnly()) + { + MultisellData.getInstance().separateAndSend(list.getId(), player, npc, list.isInventoryOnly(), list.getProductMultiplier(), list.getIngredientMultiplier()); + } + } + + /** + * @param player + * @param list + * @param inventory + * @param clan + * @param ingredientId + * @param totalCount + * @return {@code false} if ingredient amount is not enough, {@code true} otherwise. + */ + private boolean checkIngredients(final L2PcInstance player, PreparedMultisellListHolder list, final PcInventory inventory, final L2Clan clan, final int ingredientId, final long totalCount) + { + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredientId); + if (specialItem != null) + { + // Check special item. + switch (specialItem) + { + case CLAN_REPUTATION: + { + if (clan == null) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return false; + } + else if (!player.isClanLeader()) + { + player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); + return false; + } + else if (clan.getReputationScore() < totalCount) + { + player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); + return false; + } + return true; + } + case FAME: + { + if (player.getFame() < totalCount) + { + player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); + return false; + } + return true; + } + case RAIDBOSS_POINTS: + { + if (player.getRaidbossPoints() < totalCount) + { + player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); + return false; + } + return true; + } + case PC_CAFE_POINTS: + { + if (player.getPcCafePoints() < totalCount) + { + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); + return false; + } + return true; + } + default: + { + _log.severe("Multisell: " + _listId + " is using a non-implemented special ingredient with id: " + ingredientId + "."); + return false; + } + } + } + // Check if the necessary items are there. If list maintains enchantment, allow all enchanted items, otherwise only unenchanted. TODO: Check how retail does it. + else if (inventory.getInventoryItemCount(ingredientId, list.isMaintainEnchantment() ? -1 : 0, false) < totalCount) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredientId); + sm.addLong(totalCount); + player.sendPacket(sm); + return false; + } + + return true; } /** @@ -499,7 +592,7 @@ public class MultiSellChoose implements IClientIncomingPacket * @param list * @return {@code true} if player can buy stuff from the multisell, {@code false} otherwise. */ - private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedListContainer list) + private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedMultisellListHolder list) { if (npc != null) { @@ -507,7 +600,7 @@ public class MultiSellChoose implements IClientIncomingPacket { return false; } - else if (list.isNpcOnly() && ((npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) + else if (list.isNpcOnly() && (!list.checkNpcObjectId(npc.getObjectId()) || (npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) { return false; } @@ -518,4 +611,4 @@ public class MultiSellChoose implements IClientIncomingPacket } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java index 80f66487bd..df1cc723fd 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java @@ -29,8 +29,8 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -110,7 +110,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - merchant = (L2MerchantInstance) target; + merchant = (L2MerchantInstance) target; // FIXME: Doesn't work for GMs. } if ((merchant == null) && !player.isGM() && (_listId != CUSTOM_CB_SELL_LIST)) @@ -119,7 +119,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -134,7 +134,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - castleTaxRate = merchant.getTotalTaxRate(TaxType.BUY); + castleTaxRate = merchant.getCastleTaxRate(TaxType.BUY); } long subTotal = 0; @@ -159,11 +159,6 @@ public final class RequestBuyItem implements IClientIncomingPacket } long price = product.getPrice(); - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - price *= Config.RATE_SIEGE_GUARDS_PRICE; - } - if (price < 0) { _log.warning("ERROR, no price found .. wrong buylist ??"); @@ -194,7 +189,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } // first calculate price per item with tax, then multiply by count - price = (long) (price * (1 + castleTaxRate)); + price = (long) (price * (1 + castleTaxRate + product.getBaseTaxRate())); subTotal += i.getCount() * price; if (subTotal > MAX_ADENA) { @@ -257,7 +252,7 @@ public final class RequestBuyItem implements IClientIncomingPacket // add to castle treasury if (merchant != null) { - merchant.getCastle().addToTreasury((long) (subTotal * castleTaxRate)); + merchant.handleTaxPayment((long) (subTotal * castleTaxRate)); } client.sendPacket(new ExUserInfoInvenWeight(player)); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index f942ddc681..afbf88a5b9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -202,6 +202,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket } } + item.updateItemElementals(); player.destroyItem("AttrEnchant", stone, usedStones, player, true); final AttributeHolder newElement = item.getAttribute(elementToAdd); final int newValue = newElement != null ? newElement.getValue() : 0; @@ -350,7 +351,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket if (success) { - item.setAttribute(new AttributeHolder(elementToAdd, newPower)); + item.setAttribute(new AttributeHolder(elementToAdd, newPower), false); } return success ? 1 : 0; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java index c1db83f07e..7fb3de5cb4 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.buylist.Product; import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.items.L2Armor; @@ -157,7 +157,7 @@ public final class RequestPreviewItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(activeChar, "Warning!! Character " + activeChar.getName() + " of account " + activeChar.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index a30ac40863..0007b7ffb0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -18,7 +18,7 @@ package com.l2jmobius.gameserver.network.clientpackets; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.datatables.AugmentationData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -118,12 +118,10 @@ public final class RequestRefine extends AbstractRefinePacket return; } - final L2Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); - targetItem.setAugmentation(aug); + final Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); + targetItem.setAugmentation(aug, true); - final int stat12 = 0x0000FFFF & aug.getId(); - final int stat34 = aug.getId() >> 16; - activeChar.sendPacket(new ExVariationResult(stat12, stat34, 1)); + activeChar.sendPacket(new ExVariationResult(aug.getOptionId(0), aug.getOptionId(1), 1)); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(targetItem); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java index 3cc8f4c564..9ab82245e8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java @@ -21,11 +21,10 @@ import static com.l2jmobius.gameserver.model.actor.L2Npc.INTERACTION_DISTANCE; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; -import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -79,13 +78,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - if (_items == null) - { - client.sendPacket(ActionFailed.STATIC_PACKET); - return; - } - - if (!player.hasRefund()) + if ((_items == null) || !player.hasRefund()) { client.sendPacket(ActionFailed.STATIC_PACKET); return; @@ -109,7 +102,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -164,12 +157,7 @@ public final class RequestRefundItem implements IClientIncomingPacket final long count = item.getCount(); weight += count * template.getWeight(); - long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } - adena += price * count; + adena += (count * template.getReferencePrice()) / 2; if (!template.isStackable()) { slots += count; @@ -213,6 +201,6 @@ public final class RequestRefundItem implements IClientIncomingPacket // Update current load status on player client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java index e6538867b5..92704fff45 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.UniqueItemHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -129,7 +129,7 @@ public final class RequestSellItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -153,10 +153,6 @@ public final class RequestSellItem implements IClientIncomingPacket } long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } totalPrice += price * i.getCount(); if (((MAX_ADENA / i.getCount()) < price) || (totalPrice > MAX_ADENA)) { @@ -166,25 +162,27 @@ public final class RequestSellItem implements IClientIncomingPacket if (Config.ALLOW_REFUND) { - item = player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); + player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); } else { - item = player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); + player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); } } + // add to castle treasury + if (merchant != null) + { + // Keep here same formula as in {@link ExBuySellList} to produce same result. + final long profit = (long) (totalPrice * (1.0 - merchant.getCastleTaxRate(TaxType.SELL))); + merchant.handleTaxPayment(totalPrice - profit); + totalPrice = profit; + } + player.addAdena("Sell", totalPrice, merchant, false); - // add to castle treasury? - if (merchant != null) - { - final long taxCollection = (long) (totalPrice * (1.0 - merchant.getTotalTaxRate(TaxType.SELL))); - merchant.getCastle().addToTreasury(taxCollection); - } - // Update current load as well client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java index b8d4e6101b..ae8b7753d1 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java @@ -75,7 +75,7 @@ public class RequestChangeAttributeItem implements IClientIncomingPacket final int oldElementId = item.getAttackAttributeType().getClientId(); final int elementValue = item.getAttackAttribute().getValue(); item.clearAllAttributes(); - item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue)); + item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue), true); // send packets final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_S_S2_ATTRIBUTE_HAS_SUCCESSFULLY_CHANGED_TO_S3_ATTRIBUTE); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java index b53abd0918..d03199cbbb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java @@ -17,6 +17,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.ItemListType; import com.l2jmobius.gameserver.model.ItemInfo; import com.l2jmobius.gameserver.model.TradeItem; @@ -75,15 +76,14 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket 0) + if (item.getAugmentation() != null) { mask |= ItemListType.AUGMENT_BONUS.getMask(); } - if (item.getAttackElementType() >= 0) + if ((item.getAttackElementType() >= 0) || (item.getAttributeDefence(AttributeType.FIRE) > 0) || (item.getAttributeDefence(AttributeType.WATER) > 0) || (item.getAttributeDefence(AttributeType.WIND) > 0) || (item.getAttributeDefence(AttributeType.EARTH) > 0) || (item.getAttributeDefence(AttributeType.HOLY) > 0) || (item.getAttributeDefence(AttributeType.DARK) > 0)) { mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); } - else - { - for (byte i = 0; i < 6; i++) - { - if (item.getElementDefAttr(i) > 0) - { - mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); - break; - } - } - } if (item.getEnchantOptions() != null) { @@ -162,6 +141,20 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket _list; private final long _money; - private double _taxRate = 0; + private final int _inventorySlots; + private final double _castleTaxRate; - public BuyList(L2BuyList list, long currentMoney, double taxRate) + public BuyList(ProductList list, L2PcInstance player, double castleTaxRate) { _listId = list.getListId(); _list = list.getProducts(); - _money = currentMoney; - _taxRate = taxRate; + _money = player.getAdena(); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); + _castleTaxRate = castleTaxRate; } @Override @@ -47,23 +49,14 @@ public final class BuyList extends AbstractItemPacket packet.writeD(0x00); // Type BUY packet.writeQ(_money); // current money packet.writeD(_listId); - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); packet.writeH(_list.size()); - for (Product product : _list) { if ((product.getCount() > 0) || !product.hasLimitedStock()) { writeItem(packet, product); - - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - packet.writeQ((long) (product.getPrice() * Config.RATE_SIEGE_GUARDS_PRICE * (1 + _taxRate))); - } - else - { - packet.writeQ((long) (product.getPrice() * (1 + _taxRate))); - } + packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate()))); } } return true; diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java index 17f45cb022..d0e7aac157 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java @@ -21,6 +21,7 @@ import java.util.Set; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2DecoyInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent; @@ -134,7 +135,9 @@ public class CharInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrderAugument()) { - packet.writeQ(_activeChar.getInventory().getPaperdollAugmentationId(slot)); // Confirmed + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_armorEnchant); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java index ecd9dde18c..3b46eb9e3a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java @@ -29,6 +29,7 @@ import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.entity.Hero; @@ -191,7 +192,8 @@ public class CharSelectionInfo implements IClientOutgoingPacket packet.writeD(i == _activeId ? 1 : 0); packet.writeC(charInfoPackage.getEnchantEffect() > 127 ? 127 : charInfoPackage.getEnchantEffect()); - packet.writeQ(charInfoPackage.getAugmentationId()); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(0) : 0); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(1) : 0); // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. @@ -365,7 +367,10 @@ public class CharSelectionInfo implements IClientOutgoingPacket if (result.next()) { final int augment = result.getInt("augAttributes"); - charInfopackage.setAugmentationId(augment == -1 ? 0 : augment); + if (augment > 0) + { + charInfopackage.setAugmentation(AugmentationData.getInstance().getAugmentation(augment)); + } } } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java index f793112067..547f24c351 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import java.util.Collection; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.model.actor.L2Summon; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -28,14 +29,17 @@ import com.l2jmobius.gameserver.network.OutgoingPackets; */ public class ExBuySellList extends AbstractItemPacket { - private Collection _sellList = null; + private Collection _sellList; private Collection _refundList = null; private final boolean _done; - private double _taxRate = 1; + private final int _inventorySlots; + private double _castleTaxRate = 1; public ExBuySellList(L2PcInstance player, boolean done) { - _sellList = player.getInventory().getAvailableItems(false, false, false); + final L2Summon pet = player.getPet(); + _sellList = player.getInventory().getItems(item -> !item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); if (player.hasRefund()) { _refundList = player.getRefund().getItems(); @@ -43,10 +47,10 @@ public class ExBuySellList extends AbstractItemPacket _done = done; } - public ExBuySellList(L2PcInstance player, boolean done, double taxRate) + public ExBuySellList(L2PcInstance player, boolean done, double castleTaxRate) { this(player, done); - _taxRate = 1 - taxRate; + _castleTaxRate = 1 - castleTaxRate; } @Override @@ -55,7 +59,7 @@ public class ExBuySellList extends AbstractItemPacket OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet); packet.writeD(0x01); // Type SELL - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); if ((_sellList != null)) { @@ -63,15 +67,15 @@ public class ExBuySellList extends AbstractItemPacket for (L2ItemInstance item : _sellList) { writeItem(packet, item); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _castleTaxRate)); } - } + } else { packet.writeH(0x00); } - if ((_refundList != null) && !_refundList.isEmpty()) + if ((_refundList != null) && !_refundList.isEmpty()) { packet.writeH(_refundList.size()); int i = 0; @@ -79,7 +83,7 @@ public class ExBuySellList extends AbstractItemPacket { writeItem(packet, item); packet.writeD(i++); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((item.getItem().getReferencePrice() / 2) * item.getCount()); } } else diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java index 362df12b76..791da494e7 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java @@ -26,15 +26,15 @@ public class ExPutItemResultForVariationCancel implements IClientOutgoingPacket private final int _itemId; private final int _itemAug1; private final int _itemAug2; - private final int _price; + private final long _price; - public ExPutItemResultForVariationCancel(L2ItemInstance item, int price) + public ExPutItemResultForVariationCancel(L2ItemInstance item, long price) { _itemObjId = item.getObjectId(); _itemId = item.getDisplayId(); _price = price; - _itemAug1 = ((short) item.getAugmentation().getId()); - _itemAug2 = item.getAugmentation().getId() >> 16; + _itemAug1 = item.getAugmentation().getOptionId(0); + _itemAug2 = item.getAugmentation().getOptionId(1); } @Override diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java index 45193eda4d..9e6d8f9a35 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java @@ -18,6 +18,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.enums.InventorySlot; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -73,10 +74,12 @@ public class ExUserInfoEquipSlot extends AbstractMaskPacket { if (containsMask(slot)) { + final Augmentation augment = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(inventory.getPaperdollObjectId(slot.getSlot())); packet.writeD(inventory.getPaperdollItemId(slot.getSlot())); - packet.writeQ(inventory.getPaperdollAugmentationId(slot.getSlot())); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); + packet.writeD(augment != null ? augment.getOptionId(1) : 0); packet.writeD(inventory.getPaperdollItemVisualId(slot.getSlot())); } } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java index 317d7c7312..4dde470846 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java @@ -102,7 +102,8 @@ public class FakePlayerInfo implements IClientOutgoingPacket for (@SuppressWarnings("unused") int slot : getPaperdollOrderAugument()) { - packet.writeQ(0x00); + packet.writeD(0x00); + packet.writeD(0x00); } packet.writeC(_fpcHolder.getArmorEnchantLevel()); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java index f376dc11dc..b1891c48d8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -88,7 +89,9 @@ public class GMViewCharacterInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrder()) { - packet.writeQ(_activeChar.getInventory().getPaperdollAugmentationId(slot)); + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_activeChar.getInventory().getTalismanSlots()); // CT2.3 diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java index 56b85ff361..5b66dbf2bb 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java @@ -48,7 +48,7 @@ public class GMViewSkillInfo implements IClientOutgoingPacket { packet.writeD(skill.isPassive() ? 1 : 0); packet.writeH(skill.getDisplayLevel()); - packet.writeH(0x00); // Sub level + packet.writeH(skill.getSubLevel()); packet.writeD(skill.getDisplayId()); packet.writeD(0x00); packet.writeC(isDisabled && skill.isClanSkill() ? 1 : 0); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java index 3c4792a3da..2be6f8c06e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java @@ -19,21 +19,22 @@ package com.l2jmobius.gameserver.network.serverpackets; import static com.l2jmobius.gameserver.data.xml.impl.MultisellData.PAGE_SIZE; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.ListContainer; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; -public final class MultiSellList implements IClientOutgoingPacket +public final class MultiSellList extends AbstractItemPacket { private int _size, _index; - private final ListContainer _list; + private final PreparedMultisellListHolder _list; private final boolean _finished; - public MultiSellList(ListContainer list, int index) + public MultiSellList(PreparedMultisellListHolder list, int index) { _list = list; _index = index; @@ -54,8 +55,8 @@ public final class MultiSellList implements IClientOutgoingPacket { OutgoingPackets.MULTI_SELL_LIST.writeId(packet); - packet.writeC(0x00); - packet.writeD(_list.getListId()); // list id + packet.writeC(0x00); // Helios + packet.writeD(_list.getId()); // list id packet.writeC(0x00); // GOD Unknown packet.writeD(1 + (_index / PAGE_SIZE)); // page started from 1 packet.writeD(_finished ? 0x01 : 0x00); // finished @@ -63,167 +64,63 @@ public final class MultiSellList implements IClientOutgoingPacket packet.writeD(_size); // list length packet.writeC(0x00); // Grand Crusade packet.writeC(_list.isChanceMultisell() ? 0x01 : 0x00); // new multisell window - packet.writeD(0x20); // Always 32 oO + packet.writeD(0x20); // Helios - Always 32 - Entry ent; while (_size-- > 0) { - ent = _list.getEntries().get(_index++); - packet.writeD(ent.getEntryId()); - packet.writeC(ent.isStackable() ? 1 : 0); - packet.writeH(0x00); - packet.writeD(0x00); - packet.writeD(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } + final ItemInfo itemEnchantment = _list.getItemEnchantment(_index); + final MultisellEntryHolder entry = _list.getEntries().get(_index++); - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } + packet.writeD(_index); // Entry ID. Start from 1. + packet.writeC(entry.isStackable() ? 1 : 0); - packet.writeH(ent.getProducts().size()); - packet.writeH(ent.getIngredients().size()); + // Those values will be passed down to MultiSellChoose packet. + packet.writeH(itemEnchantment != null ? itemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, itemEnchantment); + writeItemElemental(packet, itemEnchantment); + writeItemEnsoulOptions(packet, itemEnchantment); - for (Ingredient ing : ent.getProducts()) + packet.writeH(entry.getProducts().size()); + packet.writeH(entry.getIngredients().size()); + + for (ItemChanceHolder product : entry.getProducts()) { - packet.writeD(ing.getItemId()); - if (ing.getTemplate() != null) + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + final ItemInfo displayItemEnchantment = (_list.isMaintainEnchantment() && (itemEnchantment != null) && (template != null) && template.getClass().equals(itemEnchantment.getItem().getClass())) ? itemEnchantment : null; + + packet.writeD(product.getId()); + if (template != null) { - packet.writeQ(ing.getTemplate().getBodyPart()); - packet.writeH(ing.getTemplate().getType2()); + packet.writeQ(template.getBodyPart()); + packet.writeH(template.getType2()); } else { packet.writeQ(0); packet.writeH(65535); } - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - - packet.writeC(item.getSpecialAbilities().size()); // Size of regular soul crystal options. - for (EnsoulOption option : item.getSpecialAbilities()) - { - packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - } - - packet.writeC(item.getAdditionalSpecialAbilities().size()); // Size of special soul crystal options. - for (EnsoulOption option : item.getAdditionalSpecialAbilities()) - { - packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } - - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } - } + packet.writeQ(_list.getProductCount(product)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + packet.writeD((int) Math.ceil(product.getChance())); // chance + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); + writeItemEnsoulOptions(packet, displayItemEnchantment); } - for (Ingredient ing : ent.getIngredients()) + for (ItemHolder ingredient : entry.getIngredients()) { - packet.writeD(ing.getItemId()); - packet.writeH(ing.getTemplate() != null ? ing.getTemplate().getType2() : 65535); - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - packet.writeC(item.getSpecialAbilities().size()); // Size of regular soul crystal options. - for (EnsoulOption option : item.getSpecialAbilities()) - { - packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - } - - packet.writeC(item.getAdditionalSpecialAbilities().size()); // Size of special soul crystal options. - for (EnsoulOption option : item.getAdditionalSpecialAbilities()) - { - packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } - - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } - } + final L2Item template = ItemTable.getInstance().getTemplate(ingredient.getId()); + final ItemInfo displayItemEnchantment = ((itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) ? itemEnchantment : null; + + packet.writeD(ingredient.getId()); + packet.writeH(template != null ? template.getType2() : 65535); + packet.writeQ(_list.getIngredientCount(ingredient)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); + writeItemEnsoulOptions(packet, displayItemEnchantment); } } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java deleted file mode 100644 index e10221838e..0000000000 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.network.serverpackets; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.enums.AttributeType; -import com.l2jmobius.gameserver.enums.TaxType; -import com.l2jmobius.gameserver.model.actor.L2Summon; -import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.network.OutgoingPackets; - -public class SellList implements IClientOutgoingPacket -{ - private final L2PcInstance _activeChar; - private final L2MerchantInstance _merchant; - private final long _money; - private final List _sellList; - - public SellList(L2PcInstance player) - { - this(player, null); - } - - public SellList(L2PcInstance player, L2MerchantInstance lease) - { - _activeChar = player; - _merchant = lease; - _money = _activeChar.getAdena(); - - if (_merchant == null) - { - _sellList = new LinkedList<>(); - final L2Summon pet = _activeChar.getPet(); - for (L2ItemInstance item : _activeChar.getInventory().getItems()) - { - if (!item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))) // Pet is summoned and not the item that summoned the pet - { - _sellList.add(item); - } - } - } - else - { - _sellList = Collections.emptyList(); - } - } - - @Override - public boolean write(PacketWriter packet) - { - OutgoingPackets.SELL_LIST.writeId(packet); - - packet.writeQ(_money); - packet.writeD(_merchant == null ? 0x00 : 1000000 + _merchant.getTemplate().getId()); - packet.writeH(_sellList.size()); - - for (L2ItemInstance item : _sellList) - { - long price = item.getItem().getReferencePrice() / 2; - if (_merchant != null) - { - price -= (price * _merchant.getTotalTaxRate(TaxType.SELL)); - } - - packet.writeH(item.getItem().getType1()); - packet.writeD(item.getObjectId()); - packet.writeD(item.getDisplayId()); - packet.writeQ(item.getCount()); - packet.writeH(item.getItem().getType2()); - packet.writeH(item.isEquipped() ? 0x01 : 0x00); - packet.writeD(item.getItem().getBodyPart()); - packet.writeH(item.getEnchantLevel()); - packet.writeH(0x00); // TODO: Verify me - packet.writeH(item.getCustomType2()); - packet.writeQ(price); - // T1 - packet.writeH(item.getAttackAttributeType().getClientId()); - packet.writeH(item.getAttackAttributePower()); - for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) - { - packet.writeH(item.getDefenceAttribute(type)); - } - // Enchant Effects - for (int op : item.getEnchantOptions()) - { - packet.writeH(op); - } - } - return true; - } -} diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java index 7ecb2ebd18..5ff399fe43 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java @@ -20,7 +20,7 @@ import java.util.Collection; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.buylist.Product; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.type.CrystalType; @@ -33,7 +33,7 @@ public class ShopPreviewList implements IClientOutgoingPacket private final long _money; private CrystalType _expertise; - public ShopPreviewList(L2BuyList list, long currentMoney, CrystalType expertise) + public ShopPreviewList(ProductList list, long currentMoney, CrystalType expertise) { _listId = list.getListId(); _list = list.getProducts(); diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java index 24d153ef95..8d5ef1a54c 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java @@ -45,7 +45,7 @@ public class ExResponseCommissionBuyItem implements IClientOutgoingPacket if (_commissionItem != null) { final ItemInfo itemInfo = _commissionItem.getItemInfo(); - packet.writeD(itemInfo.getEnchant()); + packet.writeD(itemInfo.getEnchantLevel()); packet.writeD(itemInfo.getItem().getId()); packet.writeQ(itemInfo.getCount()); } diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Character.ini b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Character.ini index 66bedc79d7..fcf5ea494c 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Character.ini +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/config/Character.ini @@ -508,10 +508,6 @@ AltGameCreationSpRate = 1 # Default: 2 AltGameCreationRareXpSpRate = 2 -# If set to False, blacksmiths don't take recipes from players inventory when crafting. -# Default: True -AltBlacksmithUseRecipes = True - # Store/Restore Dwarven Manufacture list # Keep manufacture shoplist after relog # Default: False diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/zone.htm b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/zone.htm index 8fabc38c8b..4db84a7ac1 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/zone.htm +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/html/admin/zone.htm @@ -14,7 +14,7 @@
Peace:%PEACE%
Pvp:%PVP%
Siege:%SIEGE%
-
Town:%TOWN%
+
Tax:%TAX%
Castle:%CASTLE%
Fort:%FORT%
HQ:%HQ%
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/multisell/1108.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/multisell/1108.xml deleted file mode 100644 index a990351a94..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/multisell/1108.xml +++ /dev/null @@ -1,258 +0,0 @@ - - - - 30283 - 30307 - 30317 - 30363 - 30471 - 30526 - 30527 - 30564 - 30846 - 30678 - 30688 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/multisell/custom/600010.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/multisell/custom/600010.xml index 1812e61cc0..e04e885832 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/multisell/custom/600010.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/multisell/custom/600010.xml @@ -7,9 +7,11 @@ - + + - + +
diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java index 967d248bff..480462fea7 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminElement.java @@ -162,7 +162,7 @@ public class AdminElement implements IAdminCommandHandler } else { - itemInstance.setAttribute(new AttributeHolder(type, value)); + itemInstance.setAttribute(new AttributeHolder(type, value), true); } player.getInventory().equipItem(itemInstance); diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java index dde2ae8058..dfd8ab322b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminShop.java @@ -19,9 +19,10 @@ package handlers.admincommandhandlers; import java.util.logging.Logger; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; +import com.l2jmobius.gameserver.data.xml.impl.MultisellData; import com.l2jmobius.gameserver.handler.IAdminCommandHandler; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -40,7 +41,9 @@ public class AdminShop implements IAdminCommandHandler private static final String[] ADMIN_COMMANDS = { "admin_buy", - "admin_gmshop" + "admin_gmshop", + "admin_multisell", + "admin_exc_multisell" }; @Override @@ -61,6 +64,30 @@ public class AdminShop implements IAdminCommandHandler { AdminHtml.showAdminHtml(activeChar, "gmshops.htm"); } + else if (command.startsWith("admin_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(16).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, false); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } + else if (command.toLowerCase().startsWith("admin_exc_multisell")) + { + try + { + int listId = Integer.parseInt(command.substring(20).trim()); + MultisellData.getInstance().separateAndSend(listId, activeChar, null, true); + } + catch (NumberFormatException | IndexOutOfBoundsException e) + { + activeChar.sendMessage("Please specify multisell list ID."); + } + } return true; } @@ -82,17 +109,16 @@ public class AdminShop implements IAdminCommandHandler _log.warning("admin buylist failed:" + command); } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); - + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList != null) { - activeChar.sendPacket(new BuyList(buyList, activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(buyList, activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else { _log.warning("no buylist with id:" + val); + activeChar.sendPacket(ActionFailed.STATIC_PACKET); } - activeChar.sendPacket(ActionFailed.STATIC_PACKET); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java index cfe7ee4957..d17921338b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/admincommandhandlers/AdminZone.java @@ -114,7 +114,6 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%PEACE%", activeChar.isInsideZone(ZoneId.PEACE) ? "YES" : "NO"); adminReply.replace("%PVP%", activeChar.isInsideZone(ZoneId.PVP) ? "YES" : "NO"); adminReply.replace("%SIEGE%", activeChar.isInsideZone(ZoneId.SIEGE) ? "YES" : "NO"); - adminReply.replace("%TOWN%", activeChar.isInsideZone(ZoneId.TOWN) ? "YES" : "NO"); adminReply.replace("%CASTLE%", activeChar.isInsideZone(ZoneId.CASTLE) ? "YES" : "NO"); adminReply.replace("%FORT%", activeChar.isInsideZone(ZoneId.FORT) ? "YES" : "NO"); adminReply.replace("%HQ%", activeChar.isInsideZone(ZoneId.HQ) ? "YES" : "NO"); @@ -128,6 +127,7 @@ public class AdminZone implements IAdminCommandHandler adminReply.replace("%DANGER%", activeChar.isInsideZone(ZoneId.DANGER_AREA) ? "YES" : "NO"); adminReply.replace("%NOSTORE%", activeChar.isInsideZone(ZoneId.NO_STORE) ? "YES" : "NO"); adminReply.replace("%SCRIPT%", activeChar.isInsideZone(ZoneId.SCRIPT) ? "YES" : "NO"); + adminReply.replace("%TAX%", (activeChar.isInsideZone(ZoneId.TAX) ? "YES" : "NO")); final StringBuilder zones = new StringBuilder(100); for (L2ZoneType zone : ZoneManager.getInstance().getZones(activeChar)) diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/bypasshandlers/Wear.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/bypasshandlers/Wear.java index 9291747b2a..40de431ce5 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/bypasshandlers/Wear.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/bypasshandlers/Wear.java @@ -24,7 +24,7 @@ import com.l2jmobius.gameserver.data.xml.impl.BuyListData; import com.l2jmobius.gameserver.handler.IBypassHandler; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.ShopPreviewList; @@ -70,7 +70,7 @@ public class Wear implements IBypassHandler private static void showWearWindow(L2PcInstance player, int val) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/communityboard/HomeBoard.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/communityboard/HomeBoard.java index b39b9f0b38..9f7d9fb2f8 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/communityboard/HomeBoard.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/communityboard/HomeBoard.java @@ -154,7 +154,7 @@ public final class HomeBoard implements IParseBoardHandler { final String page = command.replace("_bbssell;", ""); returnHtml = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/CommunityBoard/Custom/" + page + ".html"); - activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar.getAdena(), 0)); + activeChar.sendPacket(new BuyList(BuyListData.getInstance().getBuyList(423), activeChar, 0)); activeChar.sendPacket(new ExBuySellList(activeChar, false)); } else if (command.startsWith("_bbsteleport")) diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/communityboard/RegionBoard.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/communityboard/RegionBoard.java index 7a9b5fd57d..ffb50fbf7b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/communityboard/RegionBoard.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/communityboard/RegionBoard.java @@ -18,6 +18,7 @@ package handlers.communityboard; import com.l2jmobius.gameserver.cache.HtmCache; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.handler.CommunityBoardHandler; import com.l2jmobius.gameserver.handler.IWriteBoardHandler; import com.l2jmobius.gameserver.instancemanager.CastleManager; @@ -64,7 +65,7 @@ public class RegionBoard implements IWriteBoardHandler link = link.replace("%region_name%", String.valueOf(REGIONS[i])); link = link.replace("%region_owning_clan%", (clan != null ? clan.getName() : "NPC")); link = link.replace("%region_owning_clan_alliance%", ((clan != null) && (clan.getAllyName() != null) ? clan.getAllyName() : "")); - link = link.replace("%region_tax_rate%", (castle.getTaxRate() * 100) + "%"); + link = link.replace("%region_tax_rate%", castle.getTaxPercent(TaxType.BUY) + "%"); sb.append(link); } diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java index 9e555bb17c..fb13b89a3e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/effecthandlers/ConvertItem.java @@ -139,7 +139,7 @@ public final class ConvertItem extends AbstractEffect if (elementals != null) { - newItem.setAttribute(elementals); + newItem.setAttribute(elementals, true); } newItem.setEnchantLevel(enchantLevel); player.getInventory().equipItem(newItem); diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/itemhandlers/Seed.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/itemhandlers/Seed.java index b2a011e238..a5c7d19397 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/itemhandlers/Seed.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/handlers/itemhandlers/Seed.java @@ -22,13 +22,13 @@ import com.l2jmobius.Config; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.handler.IItemHandler; import com.l2jmobius.gameserver.instancemanager.CastleManorManager; -import com.l2jmobius.gameserver.instancemanager.MapRegionManager; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2Seed; import com.l2jmobius.gameserver.model.actor.L2Playable; import com.l2jmobius.gameserver.model.actor.instance.L2ChestInstance; import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.entity.Castle; import com.l2jmobius.gameserver.model.holders.ItemSkillHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -81,7 +81,9 @@ public class Seed implements IItemHandler { return false; } - else if (seed.getCastleId() != MapRegionManager.getInstance().getAreaCastle(playable)) // TODO: replace me with tax zone + + final Castle taxCastle = target.getTaxCastle(); + if ((taxCastle == null) || (seed.getCastleId() != taxCastle.getResidenceId())) { playable.sendPacket(SystemMessageId.THIS_SEED_MAY_NOT_BE_SOWN_HERE); return false; diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/buylist.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/buylist.xsd index 70a73f7b8e..bc1a11b169 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/buylist.xsd +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/buylist.xsd @@ -29,9 +29,11 @@ + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/multisell.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/multisell.xsd index 196695f377..99107d2612 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/multisell.xsd +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/multisell.xsd @@ -22,7 +22,6 @@ - @@ -40,7 +39,8 @@ - + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/zones/custom_town.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/zones/custom_town.xml deleted file mode 100644 index 716130acf4..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/zones/custom_town.xml +++ /dev/null @@ -1,639 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/zones/tax.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/zones/tax.xml index 7a8eb7d1f9..79393d8e7f 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/zones/tax.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/zones/tax.xml @@ -1,6 +1,5 @@ - - + @@ -313,7 +312,7 @@ - + diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/Config.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/Config.java index d110fd2fa2..bb1fa2d8d6 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/Config.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/Config.java @@ -236,7 +236,6 @@ public final class Config public static double ALT_GAME_CREATION_XP_RATE; public static double ALT_GAME_CREATION_RARE_XPSP_RATE; public static double ALT_GAME_CREATION_SP_RATE; - public static boolean ALT_BLACKSMITH_USE_RECIPES; public static boolean ALT_CLAN_LEADER_INSTANT_ACTIVATION; public static int ALT_CLAN_JOIN_DAYS; public static int ALT_CLAN_CREATE_DAYS; @@ -1582,7 +1581,6 @@ public final class Config ALT_GAME_CREATION_XP_RATE = Character.getDouble("AltGameCreationXpRate", 1); ALT_GAME_CREATION_SP_RATE = Character.getDouble("AltGameCreationSpRate", 1); ALT_GAME_CREATION_RARE_XPSP_RATE = Character.getDouble("AltGameCreationRareXpSpRate", 2); - ALT_BLACKSMITH_USE_RECIPES = Character.getBoolean("AltBlacksmithUseRecipes", true); ALT_CLAN_LEADER_INSTANT_ACTIVATION = Character.getBoolean("AltClanLeaderInstantActivation", false); ALT_CLAN_JOIN_DAYS = Character.getInt("DaysBeforeJoinAClan", 1); ALT_CLAN_CREATE_DAYS = Character.getInt("DaysBeforeCreateAClan", 10); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java index 8c25ec2846..33e2d0df1d 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/BuyListData.java @@ -28,15 +28,14 @@ import java.util.logging.Logger; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; /** @@ -47,7 +46,7 @@ public final class BuyListData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(BuyListData.class.getName()); - private final Map _buyLists = new HashMap<>(); + private final Map _buyLists = new HashMap<>(); private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); protected BuyListData() @@ -77,7 +76,7 @@ public final class BuyListData implements IGameXmlReader final int itemId = rs.getInt("item_id"); final long count = rs.getLong("count"); final long nextRestockTime = rs.getLong("next_restock_time"); - final L2BuyList buyList = getBuyList(buyListId); + final ProductList buyList = getBuyList(buyListId); if (buyList == null) { LOGGER.warning("BuyList found in database but not loaded from xml! BuyListId: " + buyListId); @@ -108,71 +107,44 @@ public final class BuyListData implements IGameXmlReader try { final int buyListId = Integer.parseInt(f.getName().replaceAll(".xml", "")); - - for (Node node = doc.getFirstChild(); node != null; node = node.getNextSibling()) + forEach(doc, "list", (list) -> { - if ("list".equalsIgnoreCase(node.getNodeName())) + final int defaultBaseTax = parseInteger(list.getAttributes(), "baseTax", 0); + final ProductList buyList = new ProductList(buyListId); + forEach(list, (node) -> { - final L2BuyList buyList = new L2BuyList(buyListId); - for (Node list_node = node.getFirstChild(); list_node != null; list_node = list_node.getNextSibling()) + switch (node.getNodeName()) { - if ("item".equalsIgnoreCase(list_node.getNodeName())) + case "item": { - int itemId = -1; - long price = -1; - long restockDelay = -1; - long count = -1; - final NamedNodeMap attrs = list_node.getAttributes(); - Node attr = attrs.getNamedItem("id"); - itemId = Integer.parseInt(attr.getNodeValue()); - attr = attrs.getNamedItem("price"); - if (attr != null) - { - price = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("restock_delay"); - if (attr != null) - { - restockDelay = Long.parseLong(attr.getNodeValue()); - } - attr = attrs.getNamedItem("count"); - if (attr != null) - { - count = Long.parseLong(attr.getNodeValue()); - } + final NamedNodeMap attrs = node.getAttributes(); + + final int itemId = parseInteger(attrs, "id"); final L2Item item = ItemTable.getInstance().getTemplate(itemId); if (item != null) { - if ((price > -1) && (item.getReferencePrice() > price) && (buyList.getNpcsAllowed() != null)) - { - LOGGER.warning("Item price is too low. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); - LOGGER.warning("Setting price to reference price " + item.getReferencePrice() + " instead of " + price + "."); - buyList.addProduct(new Product(buyList.getListId(), item, item.getReferencePrice(), restockDelay, count)); - } - else - { - buyList.addProduct(new Product(buyList.getListId(), item, price, restockDelay, count)); - } + final long price = parseLong(attrs, "price", -1L); + final long restockDelay = parseLong(attrs, "restock_delay", -1L); + final long count = parseLong(attrs, "count", -1L); + final int baseTax = parseInteger(attrs, "baseTax", defaultBaseTax); + + buyList.addProduct(new Product(buyListId, item, price, restockDelay, count, baseTax)); } else { - LOGGER.warning("Item not found. BuyList:" + buyList.getListId() + " ItemID:" + itemId + " File:" + f.getName()); + LOGGER.warning("Item not found. BuyList:" + buyListId + " ItemID:" + itemId + " File:" + f); } + break; } - else if ("npcs".equalsIgnoreCase(list_node.getNodeName())) + case "npcs": { - for (Node npcs_node = list_node.getFirstChild(); npcs_node != null; npcs_node = npcs_node.getNextSibling()) - { - if ("npc".equalsIgnoreCase(npcs_node.getNodeName())) - { - buyList.addAllowedNpc(Integer.parseInt(npcs_node.getTextContent())); - } - } + forEach(node, "npc", (npcNode) -> buyList.addAllowedNpc(Integer.parseInt(npcNode.getTextContent()))); + break; } } - _buyLists.put(buyList.getListId(), buyList); - } - } + }); + _buyLists.put(buyListId, buyList); + }); } catch (Exception e) { @@ -186,7 +158,7 @@ public final class BuyListData implements IGameXmlReader return NUMERIC_FILTER; } - public L2BuyList getBuyList(int listId) + public ProductList getBuyList(int listId) { return _buyLists.get(listId); } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java index 01bd5c5942..8f4f7463aa 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/MultisellData.java @@ -18,50 +18,44 @@ package com.l2jmobius.gameserver.data.xml.impl; import java.io.File; import java.io.FileFilter; +import java.util.ArrayList; import java.util.HashMap; -import java.util.Iterator; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import org.w3c.dom.DOMException; import org.w3c.dom.Document; -import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.commons.util.file.filter.NumericNameFilter; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.SpecialItemType; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ListContainer; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.network.SystemMessageId; -import com.l2jmobius.gameserver.network.serverpackets.ExPCCafePointInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.MultisellListHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.serverpackets.MultiSellList; -import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; -import com.l2jmobius.gameserver.network.serverpackets.UserInfo; import com.l2jmobius.gameserver.util.Util; public final class MultisellData implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(MultisellData.class.getName()); - private final Map _entries = new HashMap<>(); - public static final int PAGE_SIZE = 40; - // Special IDs. - public static final int PC_CAFE_POINTS = -100; - public static final int CLAN_REPUTATION = -200; - public static final int FAME = -300; - public static final int FIELD_CYCLE_POINTS = -400; - public static final int RAIDBOSS_POINTS = -500; - // Misc private static final FileFilter NUMERIC_FILTER = new NumericNameFilter(); + private final Map _multisells = new HashMap<>(); + protected MultisellData() { load(); @@ -70,15 +64,14 @@ public final class MultisellData implements IGameXmlReader @Override public void load() { - _entries.clear(); + _multisells.clear(); parseDatapackDirectory("data/multisell", false); if (Config.CUSTOM_MULTISELL_LOAD) { parseDatapackDirectory("data/multisell/custom", false); } - verify(); - LOGGER.info(getClass().getSimpleName() + ": Loaded " + _entries.size() + " multisell lists."); + LOGGER.info(getClass().getSimpleName() + ": Loaded " + _multisells.size() + " multisell lists."); } @Override @@ -86,73 +79,88 @@ public final class MultisellData implements IGameXmlReader { try { - final int id = Integer.parseInt(f.getName().replaceAll(".xml", "")); - int entryId = 1; - Node att; - final ListContainer list = new ListContainer(id); - - for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) + forEach(doc, "list", listNode -> { - if ("list".equalsIgnoreCase(n.getNodeName())) + final StatsSet set = new StatsSet(parseAttributes(listNode)); + final int listId = Integer.parseInt(f.getName().substring(0, f.getName().length() - 4)); + final List entries = new ArrayList<>(listNode.getChildNodes().getLength()); + + forEach(listNode, itemNode -> { - list.setApplyTaxes(parseBoolean(n.getAttributes(), "applyTaxes", false)); - list.setIsChanceMultisell(parseBoolean(n.getAttributes(), "isChanceMultisell", false)); - list.setMaintainEnchantment(parseBoolean(n.getAttributes(), "maintainEnchantment", false)); - - att = n.getAttributes().getNamedItem("useRate"); - if (att != null) + if ("item".equalsIgnoreCase(itemNode.getNodeName())) { - try + final List ingredients = new ArrayList<>(1); + final List products = new ArrayList<>(1); + final MultisellEntryHolder entry = new MultisellEntryHolder(ingredients, products); + + for (Node d = itemNode.getFirstChild(); d != null; d = d.getNextSibling()) { - - list.setUseRate(Double.valueOf(att.getNodeValue())); - if (list.getUseRate() <= 1e-6) + if ("ingredient".equalsIgnoreCase(d.getNodeName())) { - throw new NumberFormatException("The value cannot be 0"); // threat 0 as invalid value - } - } - catch (NumberFormatException e) - { - try - { - list.setUseRate(Config.class.getField(att.getNodeValue()).getDouble(Config.class)); - } - catch (Exception e1) - { - LOGGER.warning(e1.getMessage() + doc.getLocalName()); - list.setUseRate(1.0); - } - } - catch (DOMException e) - { - LOGGER.warning(e.getMessage() + doc.getLocalName()); - } - } - - for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) - { - if ("item".equalsIgnoreCase(d.getNodeName())) - { - final Entry e = parseEntry(d, entryId++, list); - list.getEntries().add(e); - } - else if ("npcs".equalsIgnoreCase(d.getNodeName())) - { - for (Node b = d.getFirstChild(); b != null; b = b.getNextSibling()) - { - if ("npc".equalsIgnoreCase(b.getNodeName())) + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final ItemHolder ingredient = new ItemHolder(id, count); + + if (itemExists(ingredient)) { - if (Util.isDigit(b.getTextContent())) + ingredients.add(ingredient); + } + else + { + LOGGER.warning("Invalid ingredient id or count for itemId: " + ingredient.getId() + ", count: " + ingredient.getCount() + " in list: " + listId); + continue; + } + } + else if ("production".equalsIgnoreCase(d.getNodeName())) + { + final int id = parseInteger(d.getAttributes(), "id"); + final long count = parseLong(d.getAttributes(), "count"); + final double chance = parseDouble(d.getAttributes(), "chance", Double.NaN); + final ItemChanceHolder product = new ItemChanceHolder(id, chance, count); + + if (itemExists(product)) + { + // Check chance only of items that have set chance. Items without chance (NaN) are used for displaying purposes. + if ((!Double.isNaN(chance) && (chance < 0)) || (chance > 100)) { - list.allowNpc(Integer.parseInt(b.getTextContent())); + LOGGER.warning("Invalid chance for itemId: " + product.getId() + ", count: " + product.getCount() + ", chance: " + chance + " in list: " + listId); + continue; } + + products.add(product); + } + else + { + LOGGER.warning("Invalid product id or count for itemId: " + product.getId() + ", count: " + product.getCount() + " in list: " + listId); + continue; } } } + + final double totalChance = products.stream().filter(i -> !Double.isNaN(i.getChance())).mapToDouble(ItemChanceHolder::getChance).sum(); + if (totalChance > 100) + { + LOGGER.warning("Products' total chance of " + totalChance + "% exceeds 100% for list: " + listId + " at entry " + entries.size() + 1 + "."); + } + + entries.add(entry); } - } - } - _entries.put(id, list); + else if ("npcs".equalsIgnoreCase(itemNode.getNodeName())) + { + // Initialize NPCs with the size of child nodes. + final Set allowNpc = new HashSet<>(itemNode.getChildNodes().getLength()); + forEach(itemNode, n -> "npc".equalsIgnoreCase(n.getNodeName()) && Util.isDigit(n.getTextContent()), n -> allowNpc.add(Integer.parseInt(n.getTextContent()))); + + // Add npcs to stats set. + set.set("allowNpc", allowNpc); + } + }); + + set.set("listId", listId); + set.set("entries", entries); + + _multisells.put(listId, new MultisellListHolder(set)); + }); } catch (Exception e) { @@ -166,44 +174,6 @@ public final class MultisellData implements IGameXmlReader return NUMERIC_FILTER; } - private final Entry parseEntry(Node n, int entryId, ListContainer list) - { - final Node first = n.getFirstChild(); - final Entry entry = new Entry(entryId); - - NamedNodeMap attrs; - Node att; - StatsSet set; - - for (n = first; n != null; n = n.getNextSibling()) - { - if ("ingredient".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addIngredient(new Ingredient(set)); - } - else if ("production".equalsIgnoreCase(n.getNodeName())) - { - attrs = n.getAttributes(); - set = new StatsSet(); - for (int i = 0; i < attrs.getLength(); i++) - { - att = attrs.item(i); - set.set(att.getNodeName(), att.getNodeValue()); - } - entry.addProduct(new Ingredient(set)); - } - } - - return entry; - } - /** * This will generate the multisell list for the items.
* There exist various parameters in multisells that affect the way they will appear: @@ -230,38 +200,36 @@ public final class MultisellData implements IGameXmlReader * @param player * @param npc * @param inventoryOnly - * @param productMultiplier * @param ingredientMultiplier + * @param productMultiplier */ - public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double productMultiplier, double ingredientMultiplier) + public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly, double ingredientMultiplier, double productMultiplier) { - final ListContainer template = _entries.get(listId); + final MultisellListHolder template = _multisells.get(listId); if (template == null) { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find list ID: " + listId + " requested by player: " + player.getName() + ", NPC ID:" + (npc != null ? npc.getId() : 0)); + LOGGER.warning("Can't find list id: " + listId + " requested by player: " + player.getName() + ", npcId: " + (npc != null ? npc.getId() : 0)); return; } - if (!template.isNpcAllowed(-1) && (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly()))) + if (((npc != null) && !template.isNpcAllowed(npc.getId())) || ((npc == null) && template.isNpcOnly())) { - LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); - return; - } - - final PreparedListContainer list = new PreparedListContainer(template, inventoryOnly, player, npc); - - // Pass through this only when multipliers are different from 1 - if ((productMultiplier != 1) || (ingredientMultiplier != 1)) - { - list.getEntries().forEach(entry -> + if (player.isGM()) { - // Math.max used here to avoid dropping count to 0 - entry.getProducts().forEach(product -> product.setItemCount((long) Math.max(product.getItemCount() * productMultiplier, 1))); - - // Math.max used here to avoid dropping count to 0 - entry.getIngredients().forEach(ingredient -> ingredient.setItemCount((long) Math.max(ingredient.getItemCount() * ingredientMultiplier, 1))); - }); + player.sendMessage("Multisell " + listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Player " + player + " attempted to open multisell " + listId + " from npc " + npc + " which is not allowed!"); + return; + } } + + // Check if ingredient/product multipliers are set, if not, set them to the template value. + ingredientMultiplier = (Double.isNaN(ingredientMultiplier) ? template.getIngredientMultiplier() : ingredientMultiplier); + productMultiplier = (Double.isNaN(productMultiplier) ? template.getProductMultiplier() : productMultiplier); + + final PreparedMultisellListHolder list = new PreparedMultisellListHolder(template, inventoryOnly, player.getInventory(), npc, ingredientMultiplier, productMultiplier); int index = 0; do { @@ -276,172 +244,19 @@ public final class MultisellData implements IGameXmlReader public final void separateAndSend(int listId, L2PcInstance player, L2Npc npc, boolean inventoryOnly) { - separateAndSend(listId, player, npc, inventoryOnly, 1, 1); + separateAndSend(listId, player, npc, inventoryOnly, Double.NaN, Double.NaN); } - public static boolean hasSpecialIngredient(int id, long amount, L2PcInstance player) + private final boolean itemExists(ItemHolder holder) { - switch (id) + final SpecialItemType specialItem = SpecialItemType.getByClientId(holder.getId()); + if (specialItem != null) { - case PC_CAFE_POINTS: - { - if (player.getPcCafePoints() >= amount) - { - return true; - } - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); - break; - } - case CLAN_REPUTATION: - { - if (player.getClan() == null) - { - player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); - return false; - } - if (!player.isClanLeader()) - { - player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); - return false; - } - if (player.getClan().getReputationScore() < amount) - { - player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); - return false; - } - return true; - } - case FAME: - { - if (player.getFame() < amount) - { - player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); - return false; - } - return true; - } - case RAIDBOSS_POINTS: - { - if (player.getRaidbossPoints() < amount) - { - player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); - return false; - } - return true; - } - } - return false; - } - - public static boolean takeSpecialIngredient(int id, long amount, L2PcInstance player) - { - switch (id) - { - case PC_CAFE_POINTS: - { - final int cost = player.getPcCafePoints() - (int) amount; - player.setPcCafePoints(cost); - final SystemMessage smsgpc = SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_USING_S1_POINT); - smsgpc.addLong((int) amount); - player.sendPacket(smsgpc); - player.sendPacket(new ExPCCafePointInfo(player.getPcCafePoints(), (int) amount, 1)); - return true; - } - case CLAN_REPUTATION: - { - player.getClan().takeReputationScore((int) amount, true); - final SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); - smsg.addLong(amount); - player.sendPacket(smsg); - return true; - } - case FAME: - { - player.setFame(player.getFame() - (int) amount); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - return true; - } - case RAIDBOSS_POINTS: - { - player.setRaidbossPoints(player.getRaidbossPoints() - (int) amount); - player.sendPacket(new UserInfo(player)); - player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(amount)); - return true; - } - } - return false; - } - - public static void giveSpecialProduct(int id, long amount, L2PcInstance player) - { - switch (id) - { - case CLAN_REPUTATION: - { - player.getClan().addReputationScore((int) amount, true); - break; - } - case FAME: - { - player.setFame((int) (player.getFame() + amount)); - player.sendPacket(new UserInfo(player)); - // player.sendPacket(new ExBrExtraUserInfo(player)); - break; - } - case RAIDBOSS_POINTS: - { - player.increaseRaidbossPoints((int) amount); - player.sendPacket(new UserInfo(player)); - break; - } - } - } - - private final void verify() - { - ListContainer list; - final Iterator iter = _entries.values().iterator(); - while (iter.hasNext()) - { - list = iter.next(); - - for (Entry ent : list.getEntries()) - { - for (Ingredient ing : ent.getIngredients()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find ingredient with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - for (Ingredient ing : ent.getProducts()) - { - if (!verifyIngredient(ing)) - { - LOGGER.warning(getClass().getSimpleName() + ": Cannot find product with item ID: " + ing.getItemId() + " in list: " + list.getListId()); - } - } - } - } - } - - private final boolean verifyIngredient(Ingredient ing) - { - switch (ing.getItemId()) - { - case PC_CAFE_POINTS: - case CLAN_REPUTATION: - case FAME: - case RAIDBOSS_POINTS: - { - return true; - } - default: - { - return ing.getTemplate() != null; - } + return true; } + + final L2Item template = ItemTable.getInstance().getTemplate(holder.getId()); + return (template != null) && (template.isStackable() ? (holder.getCount() >= 1) : (holder.getCount() == 1)); } public static MultisellData getInstance() diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java index 3706b281b4..bffa2b107c 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/data/xml/impl/OptionData.java @@ -83,12 +83,12 @@ public class OptionData implements IGameXmlReader } case "active_skill": { - option.setActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addActiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "passive_skill": { - option.setPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); + option.addPassiveSkill(new SkillHolder(parseInteger(innerNode.getAttributes(), "id"), parseInteger(innerNode.getAttributes(), "level"))); break; } case "attack_skill": diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/datatables/AugmentationData.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/datatables/AugmentationData.java index 9011dbca78..08bd993847 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/datatables/AugmentationData.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/datatables/AugmentationData.java @@ -33,8 +33,7 @@ import org.w3c.dom.Node; import com.l2jmobius.Config; import com.l2jmobius.commons.util.Rnd; import com.l2jmobius.gameserver.data.xml.impl.OptionData; -import com.l2jmobius.gameserver.model.L2Augmentation; -import com.l2jmobius.gameserver.model.holders.SkillHolder; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.options.Options; @@ -86,12 +85,11 @@ public class AugmentationData private final List> _redSkills = new ArrayList<>(); private final List> _yellowSkills = new ArrayList<>(); + private final Map _augmentations = new HashMap<>(); private final List _augmentationChances = new ArrayList<>(); private final List _augmentationChancesAcc = new ArrayList<>(); private final List _augmentationStones = new ArrayList<>(); - private final Map _allSkills = new HashMap<>(); - protected AugmentationData() { for (int i = 0; i < 10; i++) @@ -298,8 +296,6 @@ public class AugmentationData { _redSkills.get(k).add(augmentationId); } - - _allSkills.put(augmentationId, new SkillHolder(skillId, skillLvL)); } } } @@ -424,7 +420,7 @@ public class AugmentationData } } // Accessories disabled for Classic. - /* + /** * if (Config.RETAIL_LIKE_AUGMENTATION_ACCESSORY) { final DocumentBuilderFactory factory3 = DocumentBuilderFactory.newInstance(); factory3.setValidating(false); factory3.setIgnoringComments(true); final File aFile3 = new File(Config.DATAPACK_ROOT + * "/data/stats/augmentation/retailchances_accessory.xml"); if (aFile3.exists()) { Document aDoc = null; try { aDoc = factory3.newDocumentBuilder().parse(aFile3); } catch (Exception e) { e.printStackTrace(); return; } String aWeaponType = null; int aStoneId = 0; int aVariationId = 0; int * aCategoryChance = 0; int aAugmentId = 0; float aAugmentChance = 0; for (Node l = aDoc.getFirstChild(); l != null; l = l.getNextSibling()) { if (l.getNodeName().equals("list")) { NamedNodeMap aNodeAttributes = null; for (Node n = l.getFirstChild(); n != null; n = n.getNextSibling()) { if @@ -437,6 +433,11 @@ public class AugmentationData */ } + public Augmentation getAugmentation(int id) + { + return _augmentations.computeIfAbsent(id, k -> new Augmentation(k)); + } + /** * Generate a new random augmentation * @param lifeStoneLevel @@ -446,7 +447,7 @@ public class AugmentationData * @param targetItem * @return */ - public L2Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) + public Augmentation generateRandomAugmentation(int lifeStoneLevel, int lifeStoneGrade, int bodyPart, int lifeStoneId, L2ItemInstance targetItem) { switch (bodyPart) { @@ -463,7 +464,7 @@ public class AugmentationData } } - private L2Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) + private Augmentation generateRandomWeaponAugmentation(int lifeStoneLevel, int lifeStoneGrade, int lifeStoneId, L2ItemInstance item) { int stat12 = 0; int stat34 = 0; @@ -656,7 +657,8 @@ public class AugmentationData } } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } boolean generateSkill = false; boolean generateGlow = false; @@ -833,10 +835,10 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; resultColor=" + resultColor + "; level=" + lifeStoneLevel + "; grade=" + lifeStoneGrade); } - return new L2Augmentation(((stat34 << 16) + stat12)); + return new Augmentation(((stat34 << 16) + stat12)); } - private L2Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) + private Augmentation generateRandomAccessoryAugmentation(int lifeStoneLevel, int bodyPart, int lifeStoneId) { int stat12 = 0; int stat34 = 0; @@ -904,7 +906,8 @@ public class AugmentationData } } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } lifeStoneLevel = Math.min(lifeStoneLevel, 9); int base = 0; @@ -948,7 +951,7 @@ public class AugmentationData op = OptionData.getInstance().getOptions(stat34); } - if ((op == null) || (!op.hasActiveSkill() && !op.hasPassiveSkill() && !op.hasActivationSkills())) + if ((op == null) || (!op.hasActiveSkills() && !op.hasPassiveSkills() && !op.hasActivationSkills())) { // second augmentation (stats) // calculating any different from stat12 value inside sub-block @@ -965,7 +968,8 @@ public class AugmentationData { LOGGER.info(getClass().getSimpleName() + ": Accessory augmentation success: stat12=" + stat12 + "; stat34=" + stat34 + "; level=" + lifeStoneLevel); } - return new L2Augmentation(((stat34 << 16) + stat12)); + final int augmentationId = ((stat34 << 16) + stat12); + return getAugmentation(augmentationId); } public boolean isAugmentaionStoneValid(int stoneId) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java index 5294f6f231..6a3e232a26 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/MapRegionManager.java @@ -74,7 +74,6 @@ public final class MapRegionManager implements IGameXmlReader String name; String town; int locId; - int castle; int bbs; for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) @@ -89,10 +88,9 @@ public final class MapRegionManager implements IGameXmlReader name = attrs.getNamedItem("name").getNodeValue(); town = attrs.getNamedItem("town").getNodeValue(); locId = parseInteger(attrs, "locId"); - castle = parseInteger(attrs, "castle"); bbs = parseInteger(attrs, "bbs"); - final L2MapRegion region = new L2MapRegion(name, town, locId, castle, bbs); + final L2MapRegion region = new L2MapRegion(name, town, locId, bbs); for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling()) { attrs = c.getAttributes(); @@ -224,22 +222,6 @@ public final class MapRegionManager implements IGameXmlReader return region.getTown(); } - /** - * @param activeChar - * @return - */ - public int getAreaCastle(L2Character activeChar) - { - final L2MapRegion region = getMapRegion(activeChar); - - if (region == null) - { - return 0; - } - - return region.getCastle(); - } - /** * @param activeChar * @param teleportWhere diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/TownManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/TownManager.java deleted file mode 100644 index b0543eb11a..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/instancemanager/TownManager.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.instancemanager; - -import com.l2jmobius.gameserver.model.entity.Castle; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.type.L2TownZone; - -public final class TownManager -{ - public static int getTownCastle(int townId) - { - switch (townId) - { - case 912: - { - return 1; - } - case 916: - { - return 2; - } - case 918: - { - return 3; - } - case 922: - { - return 4; - } - case 924: - { - return 5; - } - case 926: - { - return 6; - } - case 1538: - { - return 7; - } - case 1537: - { - return 8; - } - case 1714: - { - return 9; - } - default: - { - return 0; - } - } - } - - public static boolean townHasCastleInSiege(int townId) - { - final int castleId = getTownCastle(townId); - if (castleId > 0) - { - final Castle castle = CastleManager.getInstance().getCastleById(castleId); - if (castle != null) - { - return castle.getSiege().isInProgress(); - } - } - return false; - } - - public static boolean townHasCastleInSiege(int x, int y) - { - return townHasCastleInSiege(MapRegionManager.getInstance().getMapRegionLocId(x, y)); - } - - public static L2TownZone getTown(int townId) - { - for (L2TownZone temp : ZoneManager.getInstance().getAllZones(L2TownZone.class)) - { - if (temp.getTownId() == townId) - { - return temp; - } - } - return null; - } - - /** - * Returns the town at that position (if any) - * @param x - * @param y - * @param z - * @return - */ - public static L2TownZone getTown(int x, int y, int z) - { - for (L2ZoneType temp : ZoneManager.getInstance().getZones(x, y, z)) - { - if (temp instanceof L2TownZone) - { - return (L2TownZone) temp; - } - } - return null; - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/Augmentation.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/Augmentation.java new file mode 100644 index 0000000000..9a0e2b459d --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/Augmentation.java @@ -0,0 +1,95 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model; + +import java.util.logging.Logger; + +import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; +import com.l2jmobius.gameserver.model.options.Options; + +/** + * Used to store an augmentation and its bonuses. + * @author durgus, UnAfraid + */ +public final class Augmentation +{ + private static final Logger LOGGER = Logger.getLogger(Augmentation.class.getName()); + private final Options[] _options; + private final int _id; + + public Augmentation(int id) + { + _id = id; + final int[] stats = new int[2]; + stats[0] = 0x0000FFFF & id; + stats[1] = (id >> 16); + _options = new Options[stats.length]; + + for (int i = 0; i < stats.length; i++) + { + final Options op = OptionData.getInstance().getOptions(stats[i]); + if (op != null) + { + _options[i] = op; + } + else + { + LOGGER.warning(getClass().getSimpleName() + ": Couldn't find option: " + stats[i]); + } + } + } + + /** + * Get the augmentation "id" used in serverpackets. + * @return augmentationId + */ + public int getId() + { + return _id; + } + + public Options[] getOptions() + { + return _options; + } + + public int getOptionId(int index) + { + if ((index >= 0) && (index < _options.length) && (_options[index] != null)) + { + return _options[index].getId(); + } + return 0; + } + + public void applyBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.apply(player); + } + } + + public void removeBonus(L2PcInstance player) + { + for (Options op : _options) + { + op.remove(player); + } + } +} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java index 00e25a5f8f..ec138037fb 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/CharSelectInfoPackage.java @@ -50,7 +50,7 @@ public class CharSelectInfoPackage private int _reputation = 0; private int _pkKills = 0; private int _pvpKills = 0; - private int _augmentationId = 0; + private Augmentation _augmentation; private int _x = 0; private int _y = 0; private int _z = 0; @@ -336,14 +336,14 @@ public class CharSelectInfoPackage return _reputation; } - public void setAugmentationId(int augmentationId) + public void setAugmentation(Augmentation augmentation) { - _augmentationId = augmentationId; + _augmentation = augmentation; } - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } public void setPkKills(int PkKills) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/ItemInfo.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/ItemInfo.java index e8e8b21cd0..fb42cf8124 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/ItemInfo.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/ItemInfo.java @@ -39,10 +39,10 @@ public class ItemInfo private L2Item _item; /** The level of enchant on the L2ItemInstance */ - private int _enchant; + private int _enchantLevel; /** The augmentation of the item */ - private int _augmentation; + private Augmentation _augmentation; /** The quantity of L2ItemInstance */ private long _count; @@ -68,7 +68,7 @@ public class ItemInfo private byte _elemAtkType = -2; private int _elemAtkPower = 0; - private final int[] _elemDefAttr = + private final int[] _attributeDefence = { 0, 0, @@ -99,17 +99,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentation().getId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -150,7 +143,7 @@ public class ItemInfo _elemAtkPower = item.getAttackAttributePower(); for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) { - _elemDefAttr[type.getClientId()] = item.getDefenceAttribute(type); + _attributeDefence[type.getClientId()] = item.getDefenceAttribute(type); } _option = item.getEnchantOptions(); _soulCrystalOptions = item.getSpecialAbilities(); @@ -179,10 +172,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchant(); + _enchantLevel = item.getEnchant(); // Get the augmentation bonus - _augmentation = item.getAugmentId(); + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -207,7 +200,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); @@ -230,10 +223,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = 0; + _enchantLevel = 0; - // Get the augmentation boni - _augmentation = 0; + // Get the augmentation bonus + _augmentation = null; // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -272,17 +265,10 @@ public class ItemInfo _item = item.getItem(); // Get the enchant level of the L2ItemInstance - _enchant = item.getEnchantLevel(); + _enchantLevel = item.getEnchantLevel(); - // Get the augmentation boni - if (item.isAugmented()) - { - _augmentation = item.getAugmentationId(); - } - else - { - _augmentation = 0; - } + // Get the augmentation bonus + _augmentation = item.getAugmentation(); // Get the quantity of the L2ItemInstance _count = item.getCount(); @@ -303,7 +289,7 @@ public class ItemInfo _elemAtkPower = item.getAttackElementPower(); for (byte i = 0; i < 6; i++) { - _elemDefAttr[i] = item.getElementDefAttr(i); + _attributeDefence[i] = item.getElementDefAttr(i); } _option = item.getEnchantOptions(); _soulCrystalOptions = item.getSoulCrystalOptions(); @@ -320,26 +306,16 @@ public class ItemInfo return _item; } - public int getEnchant() + public int getEnchantLevel() { - return _enchant; + return _enchantLevel; } - public int getAugmentationBonus() + public Augmentation getAugmentation() { return _augmentation; } - public int get1stAugmentationId() - { - return 0x0000FFFF & getAugmentationBonus(); - } - - public int get2ndAugmentationId() - { - return getAugmentationBonus() >> 16; - } - public long getCount() { return _count; @@ -395,9 +371,9 @@ public class ItemInfo return _elemAtkPower; } - public int getElementDefAttr(byte i) + public int getAttributeDefence(AttributeType attribute) { - return _elemDefAttr[i]; + return _attributeDefence[attribute.getClientId()]; } public int[] getEnchantOptions() @@ -412,12 +388,12 @@ public class ItemInfo public Collection getSoulCrystalOptions() { - return _soulCrystalOptions; + return _soulCrystalOptions != null ? _soulCrystalOptions : Collections.emptyList(); } public Collection getSoulCrystalSpecialOptions() { - return _soulCrystalSpecialOptions; + return _soulCrystalSpecialOptions != null ? _soulCrystalSpecialOptions : Collections.emptyList(); } public long getVisualExpiration() diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2MapRegion.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2MapRegion.java index 1fc3170544..bf0bb6353b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2MapRegion.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/L2MapRegion.java @@ -33,7 +33,6 @@ public class L2MapRegion private final String _name; private final String _town; private final int _locId; - private final int _castle; private final int _bbs; private List _maps = null; @@ -44,12 +43,11 @@ public class L2MapRegion private final Map _bannedRace = new HashMap<>(); - public L2MapRegion(String name, String town, int locId, int castle, int bbs) + public L2MapRegion(String name, String town, int locId, int bbs) { _name = name; _town = town; _locId = locId; - _castle = castle; _bbs = bbs; } @@ -68,11 +66,6 @@ public class L2MapRegion return _locId; } - public final int getCastle() - { - return _castle; - } - public final int getBbs() { return _bbs; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/StatsSet.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/StatsSet.java index 8bd7bed637..67277686c3 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/StatsSet.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/StatsSet.java @@ -711,6 +711,20 @@ public class StatsSet implements IParserAdvUtils return (A) obj; } + @SuppressWarnings("unchecked") + public final
A getObject(String name, Class type, A defaultValue) + { + Objects.requireNonNull(name); + Objects.requireNonNull(type); + final Object obj = _set.get(name); + if ((obj == null) || !type.isAssignableFrom(obj.getClass())) + { + return defaultValue; + } + + return (A) obj; + } + public SkillHolder getSkillHolder(String key) { Objects.requireNonNull(key); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeItem.java index b37de23dd2..b688345ebf 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeItem.java @@ -51,7 +51,7 @@ public class TradeItem private final Collection _soulCrystalOptions; private final Collection _soulCrystalSpecialOptions; private int _visualId; - private int _augmentId; + private Augmentation _augmentation; public TradeItem(L2ItemInstance item, long count, long price) { @@ -74,7 +74,7 @@ public class TradeItem _soulCrystalOptions = item.getSpecialAbilities(); _soulCrystalSpecialOptions = item.getAdditionalSpecialAbilities(); _visualId = item.getVisualId(); - _augmentId = item.isAugmented() ? item.getAugmentation().getId() : 0; + _augmentation = item.getAugmentation(); } public TradeItem(L2Item item, long count, long price) @@ -215,9 +215,9 @@ public class TradeItem return _soulCrystalSpecialOptions; } - public int getAugmentId() + public Augmentation getAugmentation() { - return _augmentId; + return _augmentation; } public int getVisualId() diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeList.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeList.java index 762195553a..29362b8549 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeList.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/TradeList.java @@ -323,6 +323,12 @@ public class TradeList return null; } + if (count < 0) + { + _log.warning(_owner.getName() + ": Attempt to remove " + count + " items from TradeList!"); + return null; + } + for (TradeItem titem : _items) { if ((titem.getObjectId() == objectId) || (titem.getItem().getId() == itemId)) @@ -881,10 +887,10 @@ public class TradeList /** * Sell items to this PrivateStore list * @param player - * @param items + * @param requestedItems * @return : boolean true if success */ - public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] items) + public synchronized boolean privateStoreSell(L2PcInstance player, ItemRequest[] requestedItems) { if (_locked) { @@ -907,12 +913,14 @@ public class TradeList long totalPrice = 0; - for (ItemRequest item : items) + final TradeItem[] sellerItems = _items.toArray(new TradeItem[0]); + + for (ItemRequest item : requestedItems) { // searching item in tradelist using itemId boolean found = false; - for (TradeItem ti : _items) + for (TradeItem ti : sellerItems) { if (ti.getItem().getId() == item.getItemId()) { @@ -956,8 +964,19 @@ public class TradeList continue; } + if ((item.getObjectId() < 1) || (item.getObjectId() > sellerItems.length)) + { + continue; + } + + final TradeItem tradeItem = sellerItems[item.getObjectId() - 1]; + if ((tradeItem == null) || (tradeItem.getItem().getId() != item.getItemId())) + { + continue; + } + // Check if requested item is available for manipulation - int objectId = item.getObjectId(); + int objectId = tradeItem.getObjectId(); L2ItemInstance oldItem = player.checkItemManipulation(objectId, item.getCount(), "sell"); // private store - buy use same objectId for buying several non-stackable items if (oldItem == null) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Npc.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Npc.java index 0a27adf635..009696bfa6 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Npc.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/L2Npc.java @@ -34,6 +34,7 @@ import com.l2jmobius.gameserver.enums.MpRewardAffectType; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.enums.Race; import com.l2jmobius.gameserver.enums.ShotType; +import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.enums.Team; import com.l2jmobius.gameserver.enums.UserInfoType; import com.l2jmobius.gameserver.handler.BypassHandler; @@ -42,7 +43,6 @@ import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager; import com.l2jmobius.gameserver.instancemanager.DBSpawnManager.DBStatusType; import com.l2jmobius.gameserver.instancemanager.FortManager; -import com.l2jmobius.gameserver.instancemanager.TownManager; import com.l2jmobius.gameserver.instancemanager.WalkingManager; import com.l2jmobius.gameserver.instancemanager.ZoneManager; import com.l2jmobius.gameserver.model.L2Object; @@ -83,6 +83,7 @@ import com.l2jmobius.gameserver.model.spawns.NpcSpawnTemplate; import com.l2jmobius.gameserver.model.stats.Formulas; import com.l2jmobius.gameserver.model.variables.NpcVariables; import com.l2jmobius.gameserver.model.zone.ZoneId; +import com.l2jmobius.gameserver.model.zone.type.L2TaxZone; import com.l2jmobius.gameserver.network.NpcStringId; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; @@ -154,6 +155,9 @@ public class L2Npc extends L2Character private StatsSet _params; private DBSpawnManager.DBStatusType _raidStatus; + /** Contains information about local tax payments. */ + private L2TaxZone _taxZone = null; + /** * Constructor of L2NpcInstance (use L2Character constructor).
* Actions: @@ -519,6 +523,48 @@ public class L2Npc extends L2Character return true; } + /** + * Set another tax zone which will be used for tax payments. + * @param zone newly entered tax zone + */ + public final void setTaxZone(L2TaxZone zone) + { + _taxZone = ((zone != null) && !isInInstance()) ? zone : null; + } + + /** + * Gets castle for tax payments. + * @return instance of {@link Castle} when NPC is inside {@link L2TaxZone} otherwise {@code null} + */ + public final Castle getTaxCastle() + { + return (_taxZone != null) ? _taxZone.getCastle() : null; + } + + /** + * Gets castle tax rate + * @param type type of tax + * @return tax rate when NPC is inside tax zone otherwise {@code 0} + */ + public final double getCastleTaxRate(TaxType type) + { + final Castle castle = getTaxCastle(); + return (castle != null) ? (castle.getTaxPercent(type) / 100.0) : 0; + } + + /** + * Increase castle vault by specified tax amount. + * @param amount tax amount + */ + public final void handleTaxPayment(long amount) + { + final Castle taxCastle = getTaxCastle(); + if (taxCastle != null) + { + taxCastle.addToTreasury(amount); + } + } + /** * @return the nearest L2Castle this L2NpcInstance belongs to. Otherwise null. */ @@ -560,11 +606,6 @@ public class L2Npc extends L2Character return FortManager.getInstance().findNearestFort(this, maxDistance); } - public final boolean isInTown() - { - return TownManager.getTown(getX(), getY(), getZ()) != null; - } - /** * Open a quest or chat window on client with the text of the L2NpcInstance in function of the command.
* Example of use : @@ -1063,14 +1104,9 @@ public class L2Npc extends L2Character WalkingManager.getInstance().onSpawn(this); } - // Display clan flag - if (isInsideZone(ZoneId.TOWN) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) + if (isInsideZone(ZoneId.TAX) && (getCastle() != null) && (Config.SHOW_CREST_WITHOUT_QUEST || getCastle().getShowNpcCrest()) && (getCastle().getOwnerId() != 0)) { - final int townId = TownManager.getTown(getX(), getY(), getZ()).getTownId(); - if ((townId != 33) && (townId != 22)) - { - setClanId(getCastle().getOwnerId()); - } + setClanId(getCastle().getOwnerId()); } } @@ -1079,12 +1115,12 @@ public class L2Npc extends L2Character */ public void onRespawn() { - // Stop all effects and recalculate stats without broadcasting. - getEffectList().stopAllEffects(false); - // Make it alive setIsDead(false); + // Stop all effects and recalculate stats without broadcasting. + getEffectList().stopAllEffects(false); + // Reset decay info setDecayed(false); @@ -1827,11 +1863,17 @@ public class L2Npc extends L2Character initSeenCreatures(getTemplate().getAggroRange()); } + /** + * @return the NpcStringId for name + */ public NpcStringId getNameString() { return _nameString; } + /** + * @return the NpcStringId for title + */ public NpcStringId getTitleString() { return _titleString; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java index b48afd7f29..71096be532 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/instance/L2MerchantInstance.java @@ -21,7 +21,7 @@ import com.l2jmobius.gameserver.enums.InstanceType; import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.network.serverpackets.ActionFailed; import com.l2jmobius.gameserver.network.serverpackets.BuyList; import com.l2jmobius.gameserver.network.serverpackets.ExBuySellList; @@ -52,8 +52,7 @@ public class L2MerchantInstance extends L2NpcInstance @Override public String getHtmlPath(int npcId, int val) { - String pom = ""; - + String pom; if (val == 0) { pom = "" + npcId; @@ -62,7 +61,6 @@ public class L2MerchantInstance extends L2NpcInstance { pom = npcId + "-" + val; } - return "data/html/merchant/" + pom + ".htm"; } @@ -71,9 +69,9 @@ public class L2MerchantInstance extends L2NpcInstance showBuyWindow(player, val, true); } - public final void showBuyWindow(L2PcInstance player, int val, boolean applyTax) + public final void showBuyWindow(L2PcInstance player, int val, boolean applyCastleTax) { - final L2BuyList buyList = BuyListData.getInstance().getBuyList(val); + final ProductList buyList = BuyListData.getInstance().getBuyList(val); if (buyList == null) { _log.warning("BuyList not found! BuyListId:" + val); @@ -90,23 +88,7 @@ public class L2MerchantInstance extends L2NpcInstance player.setInventoryBlockingStatus(true); - player.sendPacket(new BuyList(buyList, player.getAdena(), (applyTax) ? getTotalTaxRate(TaxType.BUY) : 0)); - player.sendPacket(new ExBuySellList(player, false, (applyTax) ? getTotalTaxRate(TaxType.SELL) : 0)); - player.sendPacket(ActionFailed.STATIC_PACKET); - } - - public boolean hasCastle() - { - return getCastle() != null; - } - - public int getTotalTax(TaxType taxType) - { - return hasCastle() ? getCastle().getTaxPercent(taxType) : 0; - } - - public double getTotalTaxRate(TaxType taxType) - { - return getTotalTax(taxType) / 100.0; + player.sendPacket(new BuyList(buyList, player, (applyCastleTax) ? getCastleTaxRate(TaxType.BUY) : 0)); + player.sendPacket(new ExBuySellList(player, false, (applyCastleTax) ? getCastleTaxRate(TaxType.SELL) : 0)); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java index abff3608fa..622e7324cc 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/actor/instance/L2PcInstance.java @@ -161,7 +161,6 @@ import com.l2jmobius.gameserver.model.actor.stat.PcStat; import com.l2jmobius.gameserver.model.actor.status.PcStatus; import com.l2jmobius.gameserver.model.actor.tasks.player.DismountTask; import com.l2jmobius.gameserver.model.actor.tasks.player.FameTask; -import com.l2jmobius.gameserver.model.actor.tasks.player.GameGuardCheckTask; import com.l2jmobius.gameserver.model.actor.tasks.player.HennaDurationTask; import com.l2jmobius.gameserver.model.actor.tasks.player.InventoryEnableTask; import com.l2jmobius.gameserver.model.actor.tasks.player.PetFeedTask; @@ -211,6 +210,7 @@ import com.l2jmobius.gameserver.model.events.impl.character.player.OnPlayerSubCh import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.model.holders.MovieHolder; import com.l2jmobius.gameserver.model.holders.PlayerEventHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; import com.l2jmobius.gameserver.model.holders.SellBuffHolder; import com.l2jmobius.gameserver.model.holders.SkillUseHolder; import com.l2jmobius.gameserver.model.holders.TrainingHolder; @@ -234,7 +234,6 @@ import com.l2jmobius.gameserver.model.items.type.ArmorType; import com.l2jmobius.gameserver.model.items.type.EtcItemType; import com.l2jmobius.gameserver.model.items.type.WeaponType; import com.l2jmobius.gameserver.model.matching.MatchingRoom; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameManager; import com.l2jmobius.gameserver.model.olympiad.OlympiadGameTask; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; @@ -288,7 +287,6 @@ import com.l2jmobius.gameserver.network.serverpackets.ExUseSharedGroupItem; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoAbnormalVisualEffect; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoCubic; import com.l2jmobius.gameserver.network.serverpackets.ExUserInfoInvenWeight; -import com.l2jmobius.gameserver.network.serverpackets.GameGuardQuery; import com.l2jmobius.gameserver.network.serverpackets.GetOnVehicle; import com.l2jmobius.gameserver.network.serverpackets.HennaInfo; import com.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket; @@ -557,7 +555,7 @@ public final class L2PcInstance extends L2Playable private TradeList _buyList; // Multisell - private PreparedListContainer _currentMultiSell = null; + private PreparedMultisellListHolder _currentMultiSell = null; private boolean _noble = false; private boolean _hero = false; @@ -4305,6 +4303,8 @@ public final class L2PcInstance extends L2Playable return getClan().getAllyCrestId(); } + //@formatter:off + /* public void queryGameGuard() { if (getClient() != null) @@ -4314,9 +4314,10 @@ public final class L2PcInstance extends L2Playable } if (Config.GAMEGUARD_ENFORCE) { - ThreadPoolManager.schedule(new GameGuardCheckTask(this), 30 * 1000); + ThreadPoolManager.scheduleGeneral(new GameGuardCheckTask(this), 30 * 1000); } - } + }*/ + //@formatter:on /** * Send a Server->Client packet StatusUpdate to the L2PcInstance. @@ -4681,12 +4682,12 @@ public final class L2PcInstance extends L2Playable } } - public final PreparedListContainer getMultiSell() + public final PreparedMultisellListHolder getMultiSell() { return _currentMultiSell; } - public final void setMultiSell(PreparedListContainer list) + public final void setMultiSell(PreparedMultisellListHolder list) { _currentMultiSell = list; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java deleted file mode 100644 index 3a2f60297b..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/L2BuyList.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.buylist; - -import java.util.Collection; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; - -/** - * @author NosBit - */ -public final class L2BuyList -{ - private final int _listId; - private final Map _products = new LinkedHashMap<>(); - private Set _allowedNpcs = null; - - public L2BuyList(int listId) - { - _listId = listId; - } - - public int getListId() - { - return _listId; - } - - public Collection getProducts() - { - return _products.values(); - } - - public Product getProductByItemId(int itemId) - { - return _products.get(itemId); - } - - public void addProduct(Product product) - { - _products.put(product.getItemId(), product); - } - - public void addAllowedNpc(int npcId) - { - if (_allowedNpcs == null) - { - _allowedNpcs = new HashSet<>(); - } - _allowedNpcs.add(npcId); - } - - public boolean isNpcAllowed(int npcId) - { - return (_allowedNpcs != null) && _allowedNpcs.contains(npcId); - } - - public Set getNpcsAllowed() - { - return _allowedNpcs; - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/Product.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/Product.java index 10242424c7..0da19f8ec7 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/Product.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/Product.java @@ -25,9 +25,11 @@ import java.util.concurrent.atomic.AtomicLong; import java.util.logging.Level; import java.util.logging.Logger; +import com.l2jmobius.Config; import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.type.EtcItemType; /** * @author NosBit @@ -41,28 +43,25 @@ public final class Product private final long _price; private final long _restockDelay; private final long _maxCount; + private final double _baseTax; private AtomicLong _count = null; private ScheduledFuture _restockTask = null; - public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount) + public Product(int buyListId, L2Item item, long price, long restockDelay, long maxCount, int baseTax) { Objects.requireNonNull(item); _buyListId = buyListId; _item = item; - _price = price; + _price = (price < 0) ? item.getReferencePrice() : price; _restockDelay = restockDelay * 60000; _maxCount = maxCount; + _baseTax = baseTax / 100.0; if (hasLimitedStock()) { _count = new AtomicLong(maxCount); } } - public int getBuyListId() - { - return _buyListId; - } - public L2Item getItem() { return _item; @@ -75,11 +74,17 @@ public final class Product public long getPrice() { - if (_price < 0) + long price = _price; + if (_item.getItemType().equals(EtcItemType.CASTLE_GUARD)) { - return getItem().getReferencePrice(); + price *= Config.RATE_SIEGE_GUARDS_PRICE; } - return _price; + return price; + } + + public double getBaseTaxRate() + { + return _baseTax; } public long getRestockDelay() @@ -155,7 +160,7 @@ public final class Product try (Connection con = DatabaseFactory.getInstance().getConnection(); PreparedStatement statement = con.prepareStatement("INSERT INTO `buylists`(`buylist_id`, `item_id`, `count`, `next_restock_time`) VALUES(?, ?, ?, ?) ON DUPLICATE KEY UPDATE `count` = ?, `next_restock_time` = ?")) { - statement.setInt(1, getBuyListId()); + statement.setInt(1, _buyListId); statement.setInt(2, getItemId()); statement.setLong(3, getCount()); statement.setLong(5, getCount()); @@ -174,7 +179,7 @@ public final class Product } catch (Exception e) { - _log.log(Level.WARNING, "Failed to save Product buylist_id:" + getBuyListId() + " item_id:" + getItemId(), e); + _log.log(Level.WARNING, "Failed to save Product buylist_id:" + _buyListId + " item_id:" + getItemId(), e); } } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/ProductList.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/ProductList.java new file mode 100644 index 0000000000..884bd110a6 --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/buylist/ProductList.java @@ -0,0 +1,77 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.buylist; + +import java.util.Collection; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; + +/** + * @author NosBit + */ +public final class ProductList +{ + private final int _listId; + private final Map _products = new LinkedHashMap<>(); + private Set _allowedNpcs = null; + + public ProductList(int listId) + { + _listId = listId; + } + + public int getListId() + { + return _listId; + } + + public Collection getProducts() + { + return _products.values(); + } + + public Product getProductByItemId(int itemId) + { + return _products.get(itemId); + } + + public void addProduct(Product product) + { + _products.put(product.getItemId(), product); + } + + public void addAllowedNpc(int npcId) + { + if (_allowedNpcs == null) + { + _allowedNpcs = new HashSet<>(); + } + _allowedNpcs.add(npcId); + } + + public boolean isNpcAllowed(int npcId) + { + return (_allowedNpcs != null) && _allowedNpcs.contains(npcId); + } + + //public Set getNpcsAllowed() + //{ + // return _allowedNpcs; + //} +} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java index 18b06f6692..e6dc9d5e58 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/ensoul/EnsoulOption.java @@ -49,4 +49,10 @@ public class EnsoulOption extends SkillHolder { return _desc; } + + @Override + public String toString() + { + return "Ensoul Id: " + _id + " Name: " + _name + " Desc: " + _desc; + } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/entity/Castle.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/entity/Castle.java index b657df5013..f1aa77737c 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/entity/Castle.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/entity/Castle.java @@ -78,7 +78,6 @@ public final class Castle extends AbstractResidence private boolean _isTimeRegistrationOver = true; // true if Castle Lords set the time, or 24h is elapsed after the siege private Calendar _siegeTimeRegistrationEndDate; // last siege end date + 1 day private CastleSide _castleSide = null; - private double _taxRate; private long _treasury = 0; private boolean _showNpcCrest = false; private L2SiegeZone _zone = null; @@ -301,7 +300,7 @@ public final class Castle extends AbstractResidence final Castle rune = CastleManager.getInstance().getCastle("rune"); if (rune != null) { - final long runeTax = (long) (amount * rune.getTaxRate()); + final long runeTax = (long) (amount * rune.getTaxRate(TaxType.BUY)); if (rune.getOwnerId() > 0) { rune.addToTreasury(runeTax); @@ -319,7 +318,7 @@ public final class Castle extends AbstractResidence final Castle aden = CastleManager.getInstance().getCastle("aden"); if (aden != null) { - final long adenTax = (long) (amount * aden.getTaxRate()); // Find out what Aden gets from the current castle instance's income + final long adenTax = (long) (amount * aden.getTaxRate(TaxType.BUY)); // Find out what Aden gets from the current castle instance's income if (aden.getOwnerId() > 0) { aden.addToTreasury(adenTax); // Only bother to really add the tax to the treasury if not npc owned @@ -673,7 +672,6 @@ public final class Castle extends AbstractResidence } } - setTaxRate(getTaxPercent(TaxType.BUY) / 100); ps2.setInt(1, getResidenceId()); try (ResultSet rs = ps2.executeQuery()) { @@ -980,14 +978,9 @@ public final class Castle extends AbstractResidence return taxPercent; } - public void setTaxRate(double taxRate) + public final double getTaxRate(TaxType taxType) { - _taxRate = taxRate; - } - - public final double getTaxRate() - { - return _taxRate; + return getTaxPercent(taxType) / 100.0; } public final long getTreasury() @@ -1229,7 +1222,6 @@ public final class Castle extends AbstractResidence _log.log(Level.WARNING, e.getMessage(), e); } _castleSide = side; - setTaxRate(getTaxPercent(TaxType.BUY) / 100); Broadcast.toAllOnlinePlayers(new ExCastleState(this)); spawnSideNpcs(); } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/events/AbstractScript.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/events/AbstractScript.java index e7e77b497a..fac1d64c29 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/events/AbstractScript.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/events/AbstractScript.java @@ -2700,7 +2700,7 @@ public abstract class AbstractScript extends ManagedScript implements IEventTime // set enchant level for item if that item is not adena if ((attributeType != null) && (attributeValue > 0)) { - item.setAttribute(new AttributeHolder(attributeType, attributeValue)); + item.setAttribute(new AttributeHolder(attributeType, attributeValue), true); if (item.isEquipped()) { // Recalculate all stats diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java index 09f3f798a1..0c4c87491d 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/events/impl/character/player/OnPlayerAugment.java @@ -16,7 +16,7 @@ */ package com.l2jmobius.gameserver.model.events.impl.character.player; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.events.EventType; import com.l2jmobius.gameserver.model.events.impl.IBaseEvent; @@ -29,10 +29,10 @@ public class OnPlayerAugment implements IBaseEvent { private final L2PcInstance _activeChar; private final L2ItemInstance _item; - private final L2Augmentation _augmentation; + private final Augmentation _augmentation; private final boolean _isAugment; // true = is being augmented // false = augment is being removed - public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, L2Augmentation augment, boolean isAugment) + public OnPlayerAugment(L2PcInstance activeChar, L2ItemInstance item, Augmentation augment, boolean isAugment) { _activeChar = activeChar; _item = item; @@ -50,7 +50,7 @@ public class OnPlayerAugment implements IBaseEvent return _item; } - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java index 5ca4c5c7af..5a1e474b7f 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/ItemChanceHolder.java @@ -16,6 +16,10 @@ */ package com.l2jmobius.gameserver.model.holders; +import java.util.List; + +import com.l2jmobius.commons.util.Rnd; + /** * A DTO for items; contains item ID, count and chance.
* Complemented by {@link QuestItemHolder}. @@ -45,6 +49,34 @@ public class ItemChanceHolder extends ItemHolder return _chance; } + /** + * Calculates a cumulative chance of all given holders. If all holders' chance sum up to 100% or above, there is 100% guarantee a holder will be selected. + * @param holders list of holders to calculate chance from. + * @return {@code ItemChanceHolder} of the successful random roll or {@code null} if there was no lucky holder selected. + */ + public static ItemChanceHolder getRandomHolder(List holders) + { + double itemRandom = 100 * Rnd.nextDouble(); + + for (ItemChanceHolder holder : holders) + { + // Any mathmatical expression including NaN will result in either NaN or 0 of converted to something other than double. + // We would usually want to skip calculating any holders that include NaN as a chance, because that ruins the overall process. + if (!Double.isNaN(holder.getChance())) + { + // Calculate chance + if (holder.getChance() > itemRandom) + { + return holder; + } + + itemRandom -= holder.getChance(); + } + } + + return null; + } + @Override public String toString() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java new file mode 100644 index 0000000000..68a6ee23b1 --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/MultisellEntryHolder.java @@ -0,0 +1,56 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.items.L2Item; + +/** + * @author Nik + */ +public class MultisellEntryHolder +{ + private final boolean _stackable; + private final List _ingredients; + private final List _products; + + public MultisellEntryHolder(List ingredients, List products) + { + _ingredients = Collections.unmodifiableList(ingredients); + _products = Collections.unmodifiableList(products); + _stackable = products.stream().map(i -> ItemTable.getInstance().getTemplate(i.getId())).filter(Objects::nonNull).allMatch(L2Item::isStackable); + } + + public final List getIngredients() + { + return _ingredients; + } + + public final List getProducts() + { + return _products; + } + + public final boolean isStackable() + { + return _stackable; + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java new file mode 100644 index 0000000000..df7ddfa43d --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/MultisellListHolder.java @@ -0,0 +1,112 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import com.l2jmobius.gameserver.model.StatsSet; +import com.l2jmobius.gameserver.model.interfaces.IIdentifiable; + +/** + * A static list container of all multisell entries of a given list. + * @author Nik + */ +public class MultisellListHolder implements IIdentifiable +{ + private final int _listId; + private final boolean _isChanceMultisell; + private final boolean _applyTaxes; + private final boolean _maintainEnchantment; + private final double _ingredientMultiplier; + private final double _productMultiplier; + + protected List _entries; + protected final Set _npcsAllowed; + + public MultisellListHolder(int listId, boolean isChanceMultisell, boolean applyTaxes, boolean maintainEnchantment, double ingredientMultiplier, double productMultiplier, List entries, Set npcsAllowed) + { + _listId = listId; + _isChanceMultisell = isChanceMultisell; + _applyTaxes = applyTaxes; + _maintainEnchantment = maintainEnchantment; + _ingredientMultiplier = ingredientMultiplier; + _productMultiplier = productMultiplier; + _entries = entries; + _npcsAllowed = npcsAllowed; + } + + @SuppressWarnings("unchecked") + public MultisellListHolder(StatsSet set) + { + _listId = set.getInt("listId"); + _isChanceMultisell = set.getBoolean("isChanceMultisell", false); + _applyTaxes = set.getBoolean("applyTaxes", false); + _maintainEnchantment = set.getBoolean("maintainEnchantment", false); + _ingredientMultiplier = set.getDouble("ingredientMultiplier", 1.0); + _productMultiplier = set.getDouble("productMultiplier", 1.0); + _entries = Collections.unmodifiableList(set.getList("entries", MultisellEntryHolder.class, Collections.emptyList())); + _npcsAllowed = set.getObject("allowNpc", Set.class); + } + + public List getEntries() + { + return _entries; + } + + @Override + public final int getId() + { + return _listId; + } + + public final boolean isChanceMultisell() + { + return _isChanceMultisell; + } + + public final boolean isApplyTaxes() + { + return _applyTaxes; + } + + public final boolean isMaintainEnchantment() + { + return _maintainEnchantment; + } + + public final double getIngredientMultiplier() + { + return _ingredientMultiplier; + } + + public final double getProductMultiplier() + { + return _productMultiplier; + } + + public final boolean isNpcAllowed(int npcId) + { + return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); + } + + public final boolean isNpcOnly() + { + return _npcsAllowed != null; + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java new file mode 100644 index 0000000000..db693465a0 --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/holders/PreparedMultisellListHolder.java @@ -0,0 +1,107 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.holders; + +import java.util.ArrayList; +import java.util.List; + +import com.l2jmobius.gameserver.enums.TaxType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; +import com.l2jmobius.gameserver.model.itemcontainer.ItemContainer; + +/** + * A modified version of {@link MultisellListHolder} that may include altered data of the original and other dynamic data resulted from players' interraction. + * @author Nik + */ +public class PreparedMultisellListHolder extends MultisellListHolder +{ + private int _npcObjectId; + private final boolean _inventoryOnly; + private double _taxRate; + private List _itemInfos; + + public PreparedMultisellListHolder(MultisellListHolder list, boolean inventoryOnly, ItemContainer inventory, L2Npc npc, double ingredientMultiplier, double productMultiplier) + { + super(list.getId(), list.isChanceMultisell(), list.isApplyTaxes(), list.isMaintainEnchantment(), list.getIngredientMultiplier(), list.getProductMultiplier(), list._entries, list._npcsAllowed); + + _inventoryOnly = inventoryOnly; + + if (npc != null) + { + _npcObjectId = npc.getObjectId(); + _taxRate = npc.getCastleTaxRate(TaxType.BUY); + } + + // Display items from inventory that are available for exchange. + if (inventoryOnly) + { + _entries = new ArrayList<>(); + _itemInfos = new ArrayList<>(); + + // Only do the match up on equippable items that are not currently equipped. For each appropriate item, produce a set of entries for the multisell list. + inventory.getItems(item -> !item.isEquipped() && (item.isArmor() || item.isWeapon())).forEach(item -> + { + // Check ingredients of each entry to see if it's an entry we'd like to include. + list.getEntries().stream().filter(e -> e.getIngredients().stream().anyMatch(i -> i.getId() == item.getId())).forEach(e -> + { + _entries.add(e); + _itemInfos.add(new ItemInfo(item)); + }); + }); + } + } + + public ItemInfo getItemEnchantment(int index) + { + return _itemInfos != null ? _itemInfos.get(index) : null; + } + + public double getTaxRate() + { + return isApplyTaxes() ? _taxRate : 0; + } + + public boolean isInventoryOnly() + { + return _inventoryOnly; + } + + public final boolean checkNpcObjectId(int npcObjectId) + { + return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); + } + + /** + * @param ingredient + * @return the new count of the given ingredient after applying ingredient multiplier and adena tax rate. + */ + public long getIngredientCount(ItemHolder ingredient) + { + return (ingredient.getId() == Inventory.ADENA_ID) ? Math.round(ingredient.getCount() * getIngredientMultiplier() * (1 + _taxRate)) : Math.round(ingredient.getCount() * getIngredientMultiplier()); + } + + /** + * @param product + * @return the new count of the given product after applying product multiplier. + */ + public long getProductCount(ItemChanceHolder product) + { + return Math.round(product.getCount() * getProductMultiplier()); + } +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java index 22f7a0625a..48d6d470a6 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemauction/AuctionItem.java @@ -16,9 +16,10 @@ */ package com.l2jmobius.gameserver.model.itemauction; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.idfactory.IdFactory; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.StatsSet; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; @@ -83,10 +84,10 @@ public final class AuctionItem L2World.getInstance().storeObject(item); item.setCount(_itemCount); item.setEnchantLevel(item.getItem().getDefaultEnchantLevel()); - final int augmentationId = _itemExtra.getInt("augmentation_id", 0); - if (augmentationId > 0) + final Augmentation augmentation = AugmentationData.getInstance().getAugmentation(_itemExtra.getInt("augmentation_id", 0)); + if (augmentation != null) { - item.setAugmentation(new L2Augmentation(augmentationId)); + item.setAugmentation(augmentation, false); } return item; } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java index 88575164db..679ddd1b8f 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemcontainer/Inventory.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.ItemLocation; import com.l2jmobius.gameserver.enums.ItemSkillType; import com.l2jmobius.gameserver.enums.PrivateStoreType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.L2ArmorSet; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.PcCondOverride; @@ -1021,10 +1022,10 @@ public abstract class Inventory extends ItemContainer return (item != null) ? item.getVisualId() : 0; } - public int getPaperdollAugmentationId(int slot) + public Augmentation getPaperdollAugmentation(int slot) { final L2ItemInstance item = _paperdoll[slot]; - return ((item != null) && (item.getAugmentation() != null)) ? item.getAugmentation().getId() : 0; + return (item != null) ? item.getAugmentation() : null; } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java index 9450e02823..8b80a1d496 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/itemcontainer/PcInventory.java @@ -159,50 +159,6 @@ public class PcInventory extends Inventory return list; } - /** - * Returns the list of items in inventory available for transaction Allows an item to appear twice if and only if there is a difference in enchantment level. - * @param allowAdena - * @param allowAncientAdena - * @return L2ItemInstance : items in inventory - */ - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena) - { - return getUniqueItemsByEnchantLevel(allowAdena, allowAncientAdena, true); - } - - public Collection getUniqueItemsByEnchantLevel(boolean allowAdena, boolean allowAncientAdena, boolean onlyAvailable) - { - final Collection list = new LinkedList<>(); - for (L2ItemInstance item : _items.values()) - { - if (!allowAdena && (item.getId() == ADENA_ID)) - { - continue; - } - if (!allowAncientAdena && (item.getId() == ANCIENT_ADENA_ID)) - { - continue; - } - - boolean isDuplicate = false; - for (L2ItemInstance litem : list) - { - if ((litem.getId() == item.getId()) && (litem.getEnchantLevel() == item.getEnchantLevel())) - { - isDuplicate = true; - break; - } - } - - if (!isDuplicate && (!onlyAvailable || (item.isSellable() && item.isAvailable(getOwner(), false, false)))) - { - list.add(item); - } - } - - return list; - } - /** * @param itemId * @return diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java index 49f470e282..b108dba8f0 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/L2WarehouseItem.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Objects; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.model.items.type.CrystalType; @@ -44,8 +45,7 @@ public class L2WarehouseItem private final int _locationSlot; private final int _enchant; private final CrystalType _grade; - private boolean _isAugmented; - private int _augmentationId; + private final Augmentation _augmentation; private final int _customType1; private final int _customType2; private final int _mana; @@ -81,15 +81,7 @@ public class L2WarehouseItem _customType1 = item.getCustomType1(); _customType2 = item.getCustomType2(); _grade = item.getItem().getCrystalType(); - if (item.isAugmented()) - { - _isAugmented = true; - _augmentationId = item.getAugmentation().getId(); - } - else - { - _isAugmented = false; - } + _augmentation = item.getAugmentation(); _mana = item.getMana(); _time = item.isTimeLimitedItem() ? (int) (item.getRemainingTime() / 1000) : -1; @@ -232,20 +224,12 @@ public class L2WarehouseItem return _item.getName(); } - /** - * @return {@code true} if the item is augmented, {@code false} otherwise. - */ - public boolean isAugmented() - { - return _isAugmented; - } - /** * @return the augmentation If. */ - public int getAugmentationId() + public Augmentation getAugmentation() { - return _augmentationId; + return _augmentation; } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java index 551733f42a..8d47089f05 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/items/instance/L2ItemInstance.java @@ -42,6 +42,7 @@ import com.l2jmobius.gameserver.data.xml.impl.AppearanceItemData; import com.l2jmobius.gameserver.data.xml.impl.EnchantItemOptionsData; import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; import com.l2jmobius.gameserver.data.xml.impl.OptionData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.InstanceType; @@ -53,8 +54,8 @@ import com.l2jmobius.gameserver.idfactory.IdFactory; import com.l2jmobius.gameserver.instancemanager.CastleManager; import com.l2jmobius.gameserver.instancemanager.ItemsOnGroundManager; import com.l2jmobius.gameserver.instancemanager.SiegeGuardManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.DropProtection; -import com.l2jmobius.gameserver.model.L2Augmentation; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.L2World; import com.l2jmobius.gameserver.model.L2WorldRegion; @@ -135,7 +136,7 @@ public final class L2ItemInstance extends L2Object private boolean _wear; /** Augmented Item */ - private L2Augmentation _augmentation = null; + private Augmentation _augmentation = null; /** Shadow item */ private int _mana = -1; @@ -948,7 +949,7 @@ public final class L2ItemInstance extends L2Object * Returns the augmentation object for this item * @return augmentation */ - public L2Augmentation getAugmentation() + public Augmentation getAugmentation() { return _augmentation; } @@ -956,9 +957,10 @@ public final class L2ItemInstance extends L2Object /** * Sets a new augmentation * @param augmentation + * @param updateDatabase * @return return true if successfully */ - public boolean setAugmentation(L2Augmentation augmentation) + public boolean setAugmentation(Augmentation augmentation, boolean updateDatabase) { // there shall be no previous augmentation.. if (_augmentation != null) @@ -968,13 +970,9 @@ public final class L2ItemInstance extends L2Object } _augmentation = augmentation; - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemAttributes(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + this + " from DB:", e); + updateItemOptions(); } EventDispatcher.getInstance().notifyEventAsync(new OnPlayerAugment(getActingPlayer(), this, augmentation, true), getItem()); return true; @@ -991,7 +989,7 @@ public final class L2ItemInstance extends L2Object } // Copy augmentation before removing it. - final L2Augmentation augment = _augmentation; + final Augmentation augment = _augmentation; _augmentation = null; try (Connection con = DatabaseFactory.getInstance().getConnection(); @@ -1023,7 +1021,7 @@ public final class L2ItemInstance extends L2Object final int aug_attributes = rs.getInt(1); if (aug_attributes != -1) { - _augmentation = new L2Augmentation(rs.getInt("augAttributes")); + _augmentation = AugmentationData.getInstance().getAugmentation(rs.getInt("augAttributes")); } } } @@ -1048,7 +1046,19 @@ public final class L2ItemInstance extends L2Object } } - private void updateItemAttributes(Connection con) + public void updateItemOptions() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemOptions(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update atributes for item: " + toString() + " from DB:", e); + } + } + + private void updateItemOptions(Connection con) { try (PreparedStatement ps = con.prepareStatement("REPLACE INTO item_attributes VALUES(?,?)")) { @@ -1062,6 +1072,18 @@ public final class L2ItemInstance extends L2Object } } + public void updateItemElementals() + { + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateItemElements(con); + } + catch (SQLException e) + { + LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + toString() + " from DB: ", e); + } + } + private void updateItemElements(Connection con) { try (PreparedStatement ps = con.prepareStatement("DELETE FROM item_elementals WHERE itemId = ?")) @@ -1187,17 +1209,14 @@ public final class L2ItemInstance extends L2Object /** * Add elemental attribute to item and save to db * @param holder + * @param updateDatabase */ - public void setAttribute(AttributeHolder holder) + public void setAttribute(AttributeHolder holder, boolean updateDatabase) { applyAttribute(holder); - try (Connection con = DatabaseFactory.getInstance().getConnection()) + if (updateDatabase) { - updateItemElements(con); - } - catch (SQLException e) - { - LOGGER.log(Level.SEVERE, "Could not update elementals for item: " + this + " from DB:", e); + updateItemElementals(); } } @@ -1646,12 +1665,16 @@ public final class L2ItemInstance extends L2Object if (_augmentation != null) { - updateItemAttributes(con); + updateItemOptions(con); } if (_elementals != null) { updateItemElements(con); } + if ((_ensoulOptions != null) || (_ensoulSpecialOptions != null)) + { + updateSpecialAbilities(con); + } } catch (Exception e) { @@ -2217,10 +2240,21 @@ public final class L2ItemInstance extends L2Object } } - private void updateSpecialAbilities() + public void updateSpecialAbilities() { - try (Connection con = DatabaseFactory.getInstance().getConnection(); - PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) + try (Connection con = DatabaseFactory.getInstance().getConnection()) + { + updateSpecialAbilities(con); + } + catch (Exception e) + { + LOGGER.log(Level.WARNING, "Couldn't update item special abilities", e); + } + } + + private void updateSpecialAbilities(Connection con) + { + try (PreparedStatement ps = con.prepareStatement("INSERT INTO item_special_abilities (`objectId`, `type`, `optionId`, `position`) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE type = ?, optionId = ?, position = ?")) { ps.setInt(1, getObjectId()); for (Entry entry : _ensoulOptions.entrySet()) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/Entry.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/Entry.java deleted file mode 100644 index 3a54373813..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/Entry.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author DS - */ -public class Entry -{ - protected int _entryId; - protected boolean _stackable = true; - - protected List _products; - protected List _ingredients; - - public Entry(int entryId) - { - _entryId = entryId; - _products = new ArrayList<>(); - _ingredients = new ArrayList<>(); - } - - /** - * This constructor used in PreparedEntry only, ArrayLists not created. - */ - protected Entry() - { - } - - public final void setEntryId(int id) - { - _entryId = id; - } - - public final int getEntryId() - { - return _entryId; - } - - public final void addProduct(Ingredient product) - { - _products.add(product); - - if (!product.isStackable()) - { - _stackable = false; - } - } - - public final List getProducts() - { - return _products; - } - - public final void addIngredient(Ingredient ingredient) - { - _ingredients.add(ingredient); - } - - public final List getIngredients() - { - return _ingredients; - } - - public final boolean isStackable() - { - return _stackable; - } - - public long getTaxAmount() - { - return 0; - } -} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java deleted file mode 100644 index b0dd180176..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/Ingredient.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import com.l2jmobius.gameserver.datatables.ItemTable; -import com.l2jmobius.gameserver.model.StatsSet; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Item; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class Ingredient -{ - private int _itemId; - private long _itemCount; - private final int _enchantmentLevel; - private boolean _isTaxIngredient; - private boolean _maintainIngredient; - private L2Item _template = null; - private ItemInfo _itemInfo = null; - private final double _chance; - - public Ingredient(StatsSet set) - { - this(set.getInt("id"), set.getLong("count"), set.getInt("enchantmentLevel", 0), set.getDouble("chance", 0), set.getBoolean("isTaxIngredient", false), set.getBoolean("maintainIngredient", false)); - } - - public Ingredient(int itemId, long itemCount, int enchantmentLevel, double chance, boolean isTaxIngredient, boolean maintainIngredient) - { - _itemId = itemId; - _itemCount = itemCount; - _enchantmentLevel = enchantmentLevel; - _chance = chance; - _isTaxIngredient = isTaxIngredient; - _maintainIngredient = maintainIngredient; - if (_itemId > 0) - { - _template = ItemTable.getInstance().getTemplate(_itemId); - } - } - - /** - * @return a new Ingredient instance with the same values as this. - */ - public Ingredient getCopy() - { - return new Ingredient(_itemId, _itemCount, _enchantmentLevel, _chance, _isTaxIngredient, _maintainIngredient); - } - - public final L2Item getTemplate() - { - return _template; - } - - public final void setItemInfo(L2ItemInstance item) - { - _itemInfo = new ItemInfo(item); - } - - public final void setItemInfo(ItemInfo info) - { - _itemInfo = info; - } - - public final ItemInfo getItemInfo() - { - return _itemInfo; - } - - public final int getEnchantLevel() - { - return _itemInfo == null ? _enchantmentLevel : _itemInfo.getEnchantLevel(); - } - - public final void setItemId(int itemId) - { - _itemId = itemId; - } - - public final int getItemId() - { - return _itemId; - } - - public final void setItemCount(long itemCount) - { - _itemCount = itemCount; - } - - public final long getItemCount() - { - return _itemCount; - } - - public double getChance() - { - return _chance; - } - - public final void setIsTaxIngredient(boolean isTaxIngredient) - { - _isTaxIngredient = isTaxIngredient; - } - - public final boolean isTaxIngredient() - { - return _isTaxIngredient; - } - - public final void setMaintainIngredient(boolean maintainIngredient) - { - _maintainIngredient = maintainIngredient; - } - - public final boolean getMaintainIngredient() - { - return _maintainIngredient; - } - - public final boolean isStackable() - { - return (_template == null) || _template.isStackable(); - } - - public final boolean isArmorOrWeapon() - { - return (_template != null) && ((_template instanceof L2Armor) || (_template instanceof L2Weapon)); - } - - public final int getWeight() - { - return _template == null ? 0 : _template.getWeight(); - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java deleted file mode 100644 index 4658a69daf..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/ItemInfo.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.Collection; - -import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.variables.ItemVariables; - -/** - * @author DS - */ -public class ItemInfo -{ - private final int _enchantLevel, _augmentId; - private final byte _elementId; - private final int _elementPower; - private final AttributeHolder[] _attributes; - private final int _visualId; - private final int _visualStoneId; - private final long _visualIdLifetime; - private final Collection _specialAbilities; - private final Collection _additionalSpecialAbilities; - - public ItemInfo(L2ItemInstance item) - { - _enchantLevel = item.getEnchantLevel(); - _augmentId = item.getAugmentation() != null ? item.getAugmentation().getId() : 0; - _elementId = item.getAttackAttributeType().getClientId(); - _elementPower = item.getAttackAttributePower(); - _attributes = item.getAttributes() != null ? item.getAttributes().toArray(new AttributeHolder[6]) : new AttributeHolder[6]; - _visualId = item.getVisualId(); - _visualStoneId = item.getVariables().getInt(ItemVariables.VISUAL_APPEARANCE_STONE_ID, 0); - _visualIdLifetime = item.getVisualLifeTime(); - _specialAbilities = item.getSpecialAbilities(); - _additionalSpecialAbilities = item.getAdditionalSpecialAbilities(); - } - - public final int getEnchantLevel() - { - return _enchantLevel; - } - - public final int getAugmentId() - { - return _augmentId; - } - - public final byte getElementId() - { - return _elementId; - } - - public final int getElementPower() - { - return _elementPower; - } - - public final AttributeHolder[] getElementals() - { - return _attributes; - } - - public int getVisualId() - { - return _visualId; - } - - public int getVisualStoneId() - { - return _visualStoneId; - } - - public long getVisualIdLifeTime() - { - return _visualIdLifetime; - } - - public Collection getSpecialAbilities() - { - return _specialAbilities; - } - - public Collection getAdditionalSpecialAbilities() - { - return _additionalSpecialAbilities; - } -} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java deleted file mode 100644 index ce1783c276..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/ListContainer.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * @author DS - */ -public class ListContainer -{ - private final int _listId; - private boolean _isChanceMultisell; - private boolean _applyTaxes = false; - private boolean _maintainEnchantment = false; - private double _useRate = 1.0; - - protected List _entries = new ArrayList<>(); - protected Set _npcsAllowed = null; - - public ListContainer(int listId) - { - _listId = listId; - } - - public ListContainer(ListContainer container) - { - _listId = container.getListId(); - _isChanceMultisell = container.isChanceMultisell(); - _maintainEnchantment = container.getMaintainEnchantment(); - } - - public final List getEntries() - { - return _entries; - } - - public final int getListId() - { - return _listId; - } - - public boolean isChanceMultisell() - { - return _isChanceMultisell; - } - - public void setIsChanceMultisell(boolean val) - { - _isChanceMultisell = val; - } - - public final void setApplyTaxes(boolean applyTaxes) - { - _applyTaxes = applyTaxes; - } - - public final boolean getApplyTaxes() - { - return _applyTaxes; - } - - public final void setMaintainEnchantment(boolean maintainEnchantment) - { - _maintainEnchantment = maintainEnchantment; - } - - public double getUseRate() - { - return _useRate; - } - - /** - * Set this to create multisell with increased products, all product counts will be multiplied by the rate specified.
- * NOTE: It affects only parser, it won't change values of already parsed multisell since MultiSells' parseEntry method handles this feature. - * @param rate - */ - public void setUseRate(double rate) - { - _useRate = rate; - } - - public final boolean getMaintainEnchantment() - { - return _maintainEnchantment; - } - - public void allowNpc(int npcId) - { - if (_npcsAllowed == null) - { - _npcsAllowed = new HashSet<>(); - } - _npcsAllowed.add(npcId); - } - - public boolean isNpcAllowed(int npcId) - { - return (_npcsAllowed == null) || _npcsAllowed.contains(npcId); - } - - public boolean isNpcOnly() - { - return _npcsAllowed != null; - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java deleted file mode 100644 index 46f4aac588..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/PreparedEntry.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import static com.l2jmobius.gameserver.model.itemcontainer.Inventory.ADENA_ID; - -import java.util.ArrayList; - -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -/** - * @author DS - */ -public class PreparedEntry extends Entry -{ - private long _taxAmount = 0; - - public PreparedEntry(Entry template, L2ItemInstance item, boolean applyTaxes, boolean maintainEnchantment, double taxRate) - { - _entryId = template.getEntryId() * 100000; - if (maintainEnchantment && (item != null)) - { - _entryId += item.getEnchantLevel(); - } - - ItemInfo info = null; - long adenaAmount = 0; - - _ingredients = new ArrayList<>(template.getIngredients().size()); - for (Ingredient ing : template.getIngredients()) - { - if (ing.getItemId() == ADENA_ID) - { - // Tax ingredients added only if taxes enabled - if (ing.isTaxIngredient()) - { - // if taxes are to be applied, modify/add the adena count based on the template adena/ancient adena count - if (applyTaxes) - { - _taxAmount += Math.round(ing.getItemCount() * taxRate); - } - } - else - { - adenaAmount += ing.getItemCount(); - } - // do not yet add this adena amount to the list as non-taxIngredient adena might be entered later (order not guaranteed) - continue; - } - if (maintainEnchantment && (item != null) && ing.isArmorOrWeapon()) - { - info = new ItemInfo(item); - final Ingredient newIngredient = ing.getCopy(); - newIngredient.setItemInfo(info); - _ingredients.add(newIngredient); - } - else - { - _ingredients.add(ing.getCopy()); - } - } - - // now add the adena, if any. - adenaAmount += _taxAmount; // do not forget tax - if (adenaAmount > 0) - { - _ingredients.add(new Ingredient(ADENA_ID, adenaAmount, 0, 0, false, false)); - } - - // now copy products - _products = new ArrayList<>(template.getProducts().size()); - for (Ingredient ing : template.getProducts()) - { - if (!ing.isStackable()) - { - _stackable = false; - } - - final Ingredient newProduct = ing.getCopy(); - if (maintainEnchantment && ing.isArmorOrWeapon()) - { - newProduct.setItemInfo(info); - } - _products.add(newProduct); - } - } - - @Override - public final long getTaxAmount() - { - return _taxAmount; - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java deleted file mode 100644 index 2e78fa3019..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/multisell/PreparedListContainer.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.multisell; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.LinkedList; - -import com.l2jmobius.gameserver.model.actor.L2Npc; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.L2Armor; -import com.l2jmobius.gameserver.model.items.L2Weapon; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; - -public class PreparedListContainer extends ListContainer -{ - private int _npcObjectId = 0; - - public PreparedListContainer(ListContainer template, boolean inventoryOnly, L2PcInstance player, L2Npc npc) - { - super(template); - - setMaintainEnchantment(template.getMaintainEnchantment()); - setApplyTaxes(false); - double taxRate = 0; - if (npc != null) - { - _npcObjectId = npc.getObjectId(); - if (template.getApplyTaxes() && npc.isInTown() && (npc.getCastle().getOwnerId() > 0)) - { - setApplyTaxes(true); - taxRate = npc.getCastle().getTaxRate(); - } - } - - if (inventoryOnly) - { - if (player == null) - { - return; - } - - final Collection items; - if (getMaintainEnchantment()) - { - items = player.getInventory().getUniqueItemsByEnchantLevel(false, false, false); - } - else - { - items = player.getInventory().getUniqueItems(false, false, false); - } - - _entries = new LinkedList<>(); - for (L2ItemInstance item : items) - { - // only do the match up on equippable items that are not currently equipped - // so for each appropriate item, produce a set of entries for the multisell list. - if (!item.isEquipped() && ((item.getItem() instanceof L2Armor) || (item.getItem() instanceof L2Weapon))) - { - // loop through the entries to see which ones we wish to include - for (Entry ent : template.getEntries()) - { - // check ingredients of this entry to see if it's an entry we'd like to include. - for (Ingredient ing : ent.getIngredients()) - { - if (item.getId() == ing.getItemId()) - { - _entries.add(new PreparedEntry(ent, item, getApplyTaxes(), getMaintainEnchantment(), taxRate)); - break; // next entry - } - } - } - } - } - } - else - { - _entries = new ArrayList<>(template.getEntries().size()); - for (Entry ent : template.getEntries()) - { - _entries.add(new PreparedEntry(ent, null, getApplyTaxes(), false, taxRate)); - } - } - } - - public final boolean checkNpcObjectId(int npcObjectId) - { - return (_npcObjectId == 0) || (_npcObjectId == npcObjectId); - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/options/Options.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/options/Options.java index 2c24b77b7e..660c49c76e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/options/Options.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/options/Options.java @@ -32,12 +32,10 @@ import com.l2jmobius.gameserver.network.serverpackets.SkillCoolTime; public class Options { private final int _id; - private final List _effects = new ArrayList<>(); - - private SkillHolder _activeSkill = null; - private SkillHolder _passiveSkill = null; - - private final List _activationSkills = new ArrayList<>(); + private List _effects = null; + private List _activeSkill = null; + private List _passiveSkill = null; + private List _activationSkills = null; /** * @param id @@ -54,6 +52,10 @@ public class Options public void addEffect(AbstractEffect effect) { + if (_effects == null) + { + _effects = new ArrayList<>(); + } _effects.add(effect); } @@ -64,51 +66,62 @@ public class Options public boolean hasEffects() { - return !_effects.isEmpty(); + return _effects != null; } - public boolean hasActiveSkill() + public boolean hasActiveSkills() { return _activeSkill != null; } - public SkillHolder getActiveSkill() + public List getActiveSkills() { return _activeSkill; } - public void setActiveSkill(SkillHolder holder) + public void addActiveSkill(SkillHolder holder) { - _activeSkill = holder; + if (_activeSkill == null) + { + _activeSkill = new ArrayList<>(); + } + _activeSkill.add(holder); } - public boolean hasPassiveSkill() + public boolean hasPassiveSkills() { return _passiveSkill != null; } - public SkillHolder getPassiveSkill() + public List getPassiveSkills() { return _passiveSkill; } - public void setPassiveSkill(SkillHolder holder) + public void addPassiveSkill(SkillHolder holder) { - _passiveSkill = holder; + if (_passiveSkill == null) + { + _passiveSkill = new ArrayList<>(); + } + _passiveSkill.add(holder); } public boolean hasActivationSkills() { - return !_activationSkills.isEmpty(); + return _activationSkills != null; } public boolean hasActivationSkills(OptionsSkillType type) { - for (OptionsSkillHolder holder : _activationSkills) + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - return true; + if (holder.getSkillType() == type) + { + return true; + } } } return false; @@ -121,12 +134,15 @@ public class Options public List getActivationsSkills(OptionsSkillType type) { - final List temp = new ArrayList<>(); - for (OptionsSkillHolder holder : _activationSkills) + List temp = new ArrayList<>(); + if (_activationSkills != null) { - if (holder.getSkillType() == type) + for (OptionsSkillHolder holder : _activationSkills) { - temp.add(holder); + if (holder.getSkillType() == type) + { + temp.add(holder); + } } } return temp; @@ -134,6 +150,10 @@ public class Options public void addActivationSkill(OptionsSkillHolder holder) { + if (_activationSkills == null) + { + _activationSkills = new ArrayList<>(); + } _activationSkills.add(holder); } @@ -171,15 +191,21 @@ public class Options player.getEffectList().add(info); } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - addSkill(player, getActiveSkill().getSkill()); - player.sendDebugMessage("Adding active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - addSkill(player, getPassiveSkill().getSkill()); - player.sendDebugMessage("Adding passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + addSkill(player, holder.getSkill()); + player.sendDebugMessage("Adding passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { @@ -208,15 +234,21 @@ public class Options } } } - if (hasActiveSkill()) + if (hasActiveSkills()) { - player.removeSkill(getActiveSkill().getSkill(), false, false); - player.sendDebugMessage("Removing active skill: " + getActiveSkill()); + for (SkillHolder holder : getActiveSkills()) + { + player.removeSkill(holder.getSkill(), false, false); + player.sendDebugMessage("Removing active skill: " + getActiveSkills()); + } } - if (hasPassiveSkill()) + if (hasPassiveSkills()) { - player.removeSkill(getPassiveSkill().getSkill(), false, true); - player.sendDebugMessage("Removing passive skill: " + getPassiveSkill()); + for (SkillHolder holder : getPassiveSkills()) + { + player.removeSkill(holder.getSkill(), false, true); + player.sendDebugMessage("Removing passive skill: " + getPassiveSkills()); + } } if (hasActivationSkills()) { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java index fd1fb41f5f..269911c172 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/variables/PlayerVariables.java @@ -59,6 +59,7 @@ public class PlayerVariables extends AbstractVariables public static final String EXTEND_DROP = "EXTEND_DROP"; public static final String FORTUNE_TELLING_VARIABLE = "FortuneTelling"; public static final String FORTUNE_TELLING_BLACK_CAT_VARIABLE = "FortuneTellingBlackCat"; + public static final String DELUSION_RETURN = "DELUSION_RETURN"; private final int _objectId; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/ZoneId.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/ZoneId.java index d3e223d4e3..41f3e41947 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/ZoneId.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/ZoneId.java @@ -37,7 +37,6 @@ public enum ZoneId NO_SUMMON_FRIEND, FORT, NO_STORE, - TOWN, SCRIPT, HQ, DANGER_AREA, @@ -47,7 +46,8 @@ public enum ZoneId NO_RESTART, SAYUNE, FISHING, - UNDYING; + UNDYING, + TAX; public static int getZoneCount() { diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java new file mode 100644 index 0000000000..996f7888a2 --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/type/L2TaxZone.java @@ -0,0 +1,86 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.l2jmobius.gameserver.model.zone.type; + +import com.l2jmobius.gameserver.instancemanager.CastleManager; +import com.l2jmobius.gameserver.model.actor.L2Character; +import com.l2jmobius.gameserver.model.actor.L2Npc; +import com.l2jmobius.gameserver.model.entity.Castle; +import com.l2jmobius.gameserver.model.zone.L2ZoneType; +import com.l2jmobius.gameserver.model.zone.ZoneId; + +/** + * Tax zone type. + * @author malyelfik + */ +public class L2TaxZone extends L2ZoneType +{ + private int _domainId; + private Castle _castle; + + public L2TaxZone(int id) + { + super(id); + } + + @Override + public void setParameter(String name, String value) + { + if (name.equalsIgnoreCase("domainId")) + { + _domainId = Integer.parseInt(value); + } + else + { + super.setParameter(name, value); + } + } + + @Override + protected void onEnter(L2Character character) + { + character.setInsideZone(ZoneId.TAX, true); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(this); + } + } + + @Override + protected void onExit(L2Character character) + { + character.setInsideZone(ZoneId.TAX, false); + if (character.isNpc()) + { + ((L2Npc) character).setTaxZone(null); + } + } + + /** + * Gets castle associated with tax zone.
+ * @return instance of {@link Castle} if found otherwise {@code null} + */ + public Castle getCastle() + { + // Lazy loading is used because zone is loaded before residence + if (_castle == null) + { + _castle = CastleManager.getInstance().getCastleById(_domainId); + } + return _castle; + } +} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java deleted file mode 100644 index 3304f6cbe3..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/zone/type/L2TownZone.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.model.zone.type; - -import com.l2jmobius.gameserver.model.actor.L2Character; -import com.l2jmobius.gameserver.model.zone.L2ZoneType; -import com.l2jmobius.gameserver.model.zone.ZoneId; - -/** - * A Town zone - * @author durgus - */ -public class L2TownZone extends L2ZoneType -{ - private int _townId; - private int _taxById; - - public L2TownZone(int id) - { - super(id); - - _taxById = 0; - } - - @Override - public void setParameter(String name, String value) - { - if (name.equals("townId")) - { - _townId = Integer.parseInt(value); - } - else if (name.equals("taxById")) - { - _taxById = Integer.parseInt(value); - } - else - { - super.setParameter(name, value); - } - } - - @Override - protected void onEnter(L2Character character) - { - character.setInsideZone(ZoneId.TOWN, true); - } - - @Override - protected void onExit(L2Character character) - { - character.setInsideZone(ZoneId.TOWN, false); - } - - /** - * Returns this zones town id (if any) - * @return - */ - public int getTownId() - { - return _townId; - } - - /** - * Returns this town zones castle id - * @return - */ - public final int getTaxById() - { - return _taxById; - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java index 05d5921904..febb0c0f84 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/MultiSellChoose.java @@ -16,31 +16,39 @@ */ package com.l2jmobius.gameserver.network.clientpackets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.LinkedHashMap; +import java.util.Collections; +import java.util.List; import java.util.Map; -import java.util.Objects; +import java.util.Map.Entry; +import java.util.OptionalLong; +import java.util.stream.Collectors; -import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; -import com.l2jmobius.commons.util.Rnd; +import com.l2jmobius.commons.util.CommonUtil; +import com.l2jmobius.gameserver.data.xml.impl.EnsoulData; import com.l2jmobius.gameserver.data.xml.impl.MultisellData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.enums.SpecialItemType; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; +import com.l2jmobius.gameserver.model.items.L2Item; +import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.PreparedListContainer; -import com.l2jmobius.gameserver.model.variables.ItemVariables; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; +import com.l2jmobius.gameserver.network.serverpackets.InventoryUpdate; import com.l2jmobius.gameserver.network.serverpackets.SystemMessage; +import com.l2jmobius.gameserver.network.serverpackets.UserInfo; /** * The Class MultiSellChoose. @@ -50,6 +58,19 @@ public class MultiSellChoose implements IClientIncomingPacket private int _listId; private int _entryId; private long _amount; + private int _enchantLevel; + private int _augmentOption1; + private int _augmentOption2; + private short _attackAttribute; + private short _attributePower; + private short _fireDefence; + private short _waterDefence; + private short _windDefence; + private short _earthDefence; + private short _holyDefence; + private short _darkDefence; + private EnsoulOption[] _soulCrystalOptions; + private EnsoulOption[] _soulCrystalSpecialOptions; @Override public boolean read(L2GameClient client, PacketReader packet) @@ -57,17 +78,29 @@ public class MultiSellChoose implements IClientIncomingPacket _listId = packet.readD(); _entryId = packet.readD(); _amount = packet.readQ(); - // _unk1 = packet.readH(); - // _unk2 = packet.readD(); - // _unk3 = packet.readD(); - // _unk4 = packet.readH(); // elemental attributes - // _unk5 = packet.readH(); // elemental attributes - // _unk6 = packet.readH(); // elemental attributes - // _unk7 = packet.readH(); // elemental attributes - // _unk8 = packet.readH(); // elemental attributes - // _unk9 = packet.readH(); // elemental attributes - // _unk10 = packet.readH(); // elemental attributes - // _unk11 = packet.readH(); // elemental attributes + _enchantLevel = packet.readH(); + _augmentOption1 = packet.readD(); + _augmentOption2 = packet.readD(); + _attackAttribute = (short) packet.readH(); + _attributePower = (short) packet.readH(); + _fireDefence = (short) packet.readH(); + _waterDefence = (short) packet.readH(); + _windDefence = (short) packet.readH(); + _earthDefence = (short) packet.readH(); + _holyDefence = (short) packet.readH(); + _darkDefence = (short) packet.readH(); + _soulCrystalOptions = new EnsoulOption[packet.readC()]; // Ensoul size + for (int i = 0; i < _soulCrystalOptions.length; i++) + { + final int ensoulId = packet.readD(); // Ensoul option id + _soulCrystalOptions[i] = EnsoulData.getInstance().getOption(ensoulId); + } + _soulCrystalSpecialOptions = new EnsoulOption[packet.readC()]; // Special ensoul size + for (int i = 0; i < _soulCrystalSpecialOptions.length; i++) + { + final int ensoulId = packet.readD(); // Special ensoul option id. + _soulCrystalSpecialOptions[i] = EnsoulData.getInstance().getOption(ensoulId); + } return true; } @@ -86,411 +119,471 @@ public class MultiSellChoose implements IClientIncomingPacket return; } - if ((_amount < 1) || (_amount > 5000)) + if ((_amount < 1) || (_amount > 999999)) // 999 999 is client max. { - player.setMultiSell(null); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); return; } - final PreparedListContainer list = player.getMultiSell(); - if ((list == null) || (list.getListId() != _listId)) + PreparedMultisellListHolder list = player.getMultiSell(); + if ((list == null) || (list.getId() != _listId)) { player.setMultiSell(null); return; } final L2Npc npc = player.getLastFolkNPC(); - if (!list.isNpcAllowed(-1) && !isAllowedToUse(player, npc, list)) + if (!isAllowedToUse(player, npc, list)) { + if (player.isGM()) + { + player.sendMessage("Multisell " + _listId + " is restricted. Under current conditions cannot be used. Only GMs are allowed to use it."); + } + else + { + player.setMultiSell(null); + return; + } + } + + if (((_soulCrystalOptions != null) && CommonUtil.contains(_soulCrystalOptions, null)) || ((_soulCrystalSpecialOptions != null) && CommonUtil.contains(_soulCrystalSpecialOptions, null))) + { + _log.severe("Character: " + player.getName() + " requested multisell entry with invalid soul crystal options. Multisell: " + _listId + " entry: " + _entryId); player.setMultiSell(null); return; } - for (Entry entry : list.getEntries()) + final MultisellEntryHolder entry = list.getEntries().get(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + if (entry == null) { - if (entry.getEntryId() == _entryId) + _log.severe("Character: " + player.getName() + " requested inexistant prepared multisell entry. Multisell: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + if (!entry.isStackable() && (_amount > 1)) + { + _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final ItemInfo itemEnchantment = list.getItemEnchantment(_entryId - 1); // Entry Id begins from 1. We currently use entry IDs as index pointer. + + // Validate the requested item with its full stats. + //@formatter:off + if ((itemEnchantment != null) && ((_amount > 1) + || (itemEnchantment.getEnchantLevel() != _enchantLevel) + || (itemEnchantment.getAttackElementType() != _attackAttribute) + || (itemEnchantment.getAttackElementPower() != _attributePower) + || (itemEnchantment.getAttributeDefence(AttributeType.FIRE) != _fireDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WATER) != _waterDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.WIND) != _windDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.EARTH) != _earthDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.HOLY) != _holyDefence) + || (itemEnchantment.getAttributeDefence(AttributeType.DARK) != _darkDefence) + || ((itemEnchantment.getAugmentation() == null) && ((_augmentOption1 != 0) || (_augmentOption2 != 0))) + || ((itemEnchantment.getAugmentation() != null) && ((itemEnchantment.getAugmentation().getOptionId(0) != _augmentOption1) || (itemEnchantment.getAugmentation().getOptionId(1) != _augmentOption2))) + || ((_soulCrystalOptions != null) && itemEnchantment.getSoulCrystalOptions().stream().anyMatch(e -> !CommonUtil.contains(_soulCrystalOptions, e))) + || ((_soulCrystalOptions == null) && !itemEnchantment.getSoulCrystalOptions().isEmpty()) + || ((_soulCrystalSpecialOptions != null) && itemEnchantment.getSoulCrystalOptions().stream().anyMatch(e -> !CommonUtil.contains(_soulCrystalSpecialOptions, e))) + || ((_soulCrystalSpecialOptions == null) && !itemEnchantment.getSoulCrystalSpecialOptions().isEmpty()) + )) + //@formatter:on + { + _log.severe("Character: " + player.getName() + " is trying to upgrade equippable item, but the stats doesn't match. Id: " + _listId + " entry: " + _entryId); + player.setMultiSell(null); + return; + } + + final L2Clan clan = player.getClan(); + final PcInventory inventory = player.getInventory(); + + try + { + int slots = 0; + int weight = 0; + for (ItemChanceHolder product : entry.getProducts()) { - if (!entry.isStackable() && (_amount > 1)) + if (product.getId() < 0) + { + // Check if clan exists for clan reputation products. + if ((clan == null) && (SpecialItemType.CLAN_REPUTATION.getClientId() == product.getId())) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return; + } + + continue; + } + + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + if (template == null) { - _log.severe("Character: " + player.getName() + " is trying to set amount > 1 on non-stackable multisell, id:" + _listId + ":" + _entryId); player.setMultiSell(null); return; } - final PcInventory inv = player.getInventory(); + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); - int slots = 0; - int weight = 0; - for (Ingredient e : entry.getProducts()) + if (!(totalCount >= 0) && (totalCount <= Integer.MAX_VALUE)) { - if (e.getItemId() < 0) - { - continue; - } - - if (!e.isStackable()) - { - slots += e.getItemCount() * _amount; - } - else if (player.getInventory().getItemByItemId(e.getItemId()) == null) - { - slots++; - } - weight += e.getItemCount() * _amount * e.getWeight(); + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; } - if (!inv.validateWeight(weight)) + if (!template.isStackable() || (player.getInventory().getItemByItemId(product.getId()) == null)) + { + slots++; + } + + weight += totalCount * template.getWeight(); + + if (!inventory.validateWeight(weight)) { player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_WEIGHT_LIMIT); return; } - if (!inv.validateCapacity(slots)) + if ((slots > 0) && !inventory.validateCapacity(slots)) { player.sendPacket(SystemMessageId.YOUR_INVENTORY_IS_FULL); return; } - final ArrayList ingredientsList = new ArrayList<>(entry.getIngredients().size()); - // Generate a list of distinct ingredients and counts in order to check if the correct item-counts are possessed by the player - boolean newIng; - for (Ingredient e : entry.getIngredients()) + // If this is a chance multisell, reset slots and weight because only one item should be seleted. We just need to check if conditions for every item is met. + if (list.isChanceMultisell()) { - newIng = true; - // at this point, the template has already been modified so that enchantments are properly included - // whenever they need to be applied. Uniqueness of items is thus judged by item id AND enchantment level - for (int i = ingredientsList.size(); --i >= 0;) + slots = 0; + weight = 0; + } + } + + // Check for enchanted item if its present in the inventory. + if ((itemEnchantment != null) && (inventory.getItemByObjectId(itemEnchantment.getObjectId()) == null)) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(itemEnchantment.getItem().getId()); + player.sendPacket(sm); + return; + } + + // Summarize all item counts into one map. That would include non-stackable items under 1 id and multiple count. + final Map itemIdCount = entry.getIngredients().stream().collect(Collectors.toMap(i -> i.getId(), i -> list.getIngredientCount(i), (k1, k2) -> Math.addExact(k1, k2))); + + // Now check if the player has sufficient items in the inventory to cover the ingredients' expences. Take care for non-stackable items like 2 swords to dual. + boolean allOk = true; + for (Entry idCount : itemIdCount.entrySet()) + { + allOk &= checkIngredients(player, list, inventory, clan, idCount.getKey(), Math.multiplyExact(idCount.getValue(), _amount)); + } + + // The above operation should not be short-circuited, in order to show all missing ingredients. + if (!allOk) + { + return; + } + + final InventoryUpdate iu = new InventoryUpdate(); + boolean itemEnchantmentProcessed = (itemEnchantment == null); + + // Take all ingredients + for (ItemHolder ingredient : entry.getIngredients()) + { + final long totalCount = Math.multiplyExact(list.getIngredientCount(ingredient), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredient.getId()); + if (specialItem != null) + { + // Take special item. + switch (specialItem) { - final Ingredient ex = ingredientsList.get(i); - // if the item was already added in the list, merely increment the count - // this happens if 1 list entry has the same ingredient twice (example 2 swords = 1 dual) - if ((ex.getItemId() == e.getItemId()) && (ex.getEnchantLevel() == e.getEnchantLevel())) + case CLAN_REPUTATION: { - if ((ex.getItemCount() + e.getItemCount()) > Integer.MAX_VALUE) + if (clan != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); - return; + clan.takeReputationScore((int) totalCount, true); + SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.S1_POINT_S_HAVE_BEEN_DEDUCTED_FROM_THE_CLAN_S_REPUTATION); + smsg.addLong(totalCount); + player.sendPacket(smsg); } - // two same ingredients, merge into one and replace old - final Ingredient ing = ex.getCopy(); - ing.setItemCount(ex.getItemCount() + e.getItemCount()); - ingredientsList.set(i, ing); - newIng = false; break; } - } - if (newIng) - { - // if it's a new ingredient, just store its info directly (item id, count, enchantment) - ingredientsList.add(e); + case FAME: + { + player.setFame(player.getFame() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.setRaidbossPoints(player.getRaidbossPoints() - (int) totalCount); + player.sendPacket(new UserInfo(player)); + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_CONSUMED_S1_RAID_POINTS).addLong(totalCount)); + break; + } + case PC_CAFE_POINTS: + { + player.setPcCafePoints((int) (player.getPcCafePoints() - totalCount)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special ingredient with id: " + ingredient.getId() + "."); + return; + } } } - - // now check if the player has sufficient items in the inventory to cover the ingredient expenses - for (Ingredient e : ingredientsList) + else if (!itemEnchantmentProcessed && (itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) { - if ((e.getItemCount() * _amount) > Integer.MAX_VALUE) + // Take the enchanted item. + final L2ItemInstance destroyedItem = inventory.destroyItem("Multisell", itemEnchantment.getObjectId(), totalCount, player, npc); + if (destroyedItem != null) { - player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + itemEnchantmentProcessed = true; + iu.addItem(destroyedItem); + } + else + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_A_N_S1); + sm.addItemName(ingredient.getId()); + player.sendPacket(sm); return; } - if (e.getItemId() < 0) + } + else + { + // Take a regular item. + final L2ItemInstance destroyedItem = inventory.destroyItemByItemId("Multisell", ingredient.getId(), totalCount, player, npc); + if (destroyedItem != null) { - if (!MultisellData.hasSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) - { - return; - } + iu.addItem(destroyedItem); } else { - // if this is not a list that maintains enchantment, check the count of all items that have the given id. - // otherwise, check only the count of items with exactly the needed enchantment level - final long required = (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) ? (e.getItemCount() * _amount) : e.getItemCount(); - if (inv.getInventoryItemCount(e.getItemId(), (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) ? e.getEnchantLevel() : -1, false) < required) + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredient.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + return; + } + } + } + + // Generate the appropriate items + List products = entry.getProducts(); + if (list.isChanceMultisell()) + { + final ItemChanceHolder randomProduct = ItemChanceHolder.getRandomHolder(entry.getProducts()); + products = randomProduct != null ? Collections.singletonList(randomProduct) : Collections.emptyList(); + } + + for (ItemChanceHolder product : products) + { + final long totalCount = Math.multiplyExact(list.getProductCount(product), _amount); + final SpecialItemType specialItem = SpecialItemType.getByClientId(product.getId()); + if (specialItem != null) + { + // Give special item. + switch (specialItem) + { + case CLAN_REPUTATION: { - if (e.getEnchantLevel() > 0) + if (clan != null) { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addString("+" + e.getEnchantLevel() + " " + e.getTemplate().getName()); - sm.addLong(required); - player.sendPacket(sm); - } - else - { - final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); - sm.addItemName(e.getTemplate()); - sm.addLong(required); - player.sendPacket(sm); + clan.addReputationScore((int) totalCount, true); } + break; + } + case FAME: + { + player.setFame((int) (player.getFame() + totalCount)); + player.sendPacket(new UserInfo(player)); + // player.sendPacket(new ExBrExtraUserInfo(player)); + break; + } + case RAIDBOSS_POINTS: + { + player.increaseRaidbossPoints((int) totalCount); + player.sendPacket(new UserInfo(player)); + break; + } + default: + { + _log.severe("Character: " + player.getName() + " has suffered possible item loss by using multisell " + _listId + " which has non-implemented special product with id: " + product.getId() + "."); return; } } } - - final Map originalInfos = new LinkedHashMap<>(); - /** All ok, remove items and add final product */ - - for (Ingredient e : entry.getIngredients()) + else { - if (e.getItemId() < 0) + // Give item. + final L2ItemInstance addedItem = inventory.addItem("Multisell", product.getId(), totalCount, player, npc); + iu.addItem(addedItem); + + // Check if the newly given item should be enchanted. + if (itemEnchantmentProcessed && list.isMaintainEnchantment() && (itemEnchantment != null) && addedItem.isEquipable() && addedItem.getItem().getClass().equals(itemEnchantment.getItem().getClass())) { - if (!MultisellData.takeSpecialIngredient(e.getItemId(), e.getItemCount() * _amount, player)) + addedItem.setEnchantLevel(itemEnchantment.getEnchantLevel()); + addedItem.setAugmentation(itemEnchantment.getAugmentation(), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.findByClientId(itemEnchantment.getAttackElementType()), itemEnchantment.getAttackElementPower()), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.FIRE, itemEnchantment.getAttributeDefence(AttributeType.FIRE)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WATER, itemEnchantment.getAttributeDefence(AttributeType.WATER)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.WIND, itemEnchantment.getAttributeDefence(AttributeType.WIND)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.EARTH, itemEnchantment.getAttributeDefence(AttributeType.EARTH)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.HOLY, itemEnchantment.getAttributeDefence(AttributeType.HOLY)), false); + addedItem.setAttribute(new AttributeHolder(AttributeType.DARK, itemEnchantment.getAttributeDefence(AttributeType.DARK)), false); + if (_soulCrystalOptions != null) { - return; - } - } - else - { - L2ItemInstance itemToTake = inv.getItemByItemId(e.getItemId()); // initialize and initial guess for the item to take. - if (itemToTake == null) - { // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - _log.severe("Character: " + player.getName() + " is trying to cheat in multisell, id:" + _listId + ":" + _entryId); - player.setMultiSell(null); - return; - } - - // if (itemToTake.isEquipped()) - // { - // this is a cheat, transaction will be aborted and if any items already taken will not be returned back to inventory! - // LOGGER.severe("Character: " + player.getName() + " is trying to cheat in multisell, exchanging equipped item, merchatnt id:" + merchant.getNpcId()); - // player.setMultiSell(null); - // return; - // } - - if (Config.ALT_BLACKSMITH_USE_RECIPES || !e.getMaintainIngredient()) - { - // if it's a stackable item, just reduce the amount from the first (only) instance that is found in the inventory - if (itemToTake.isStackable()) + for (int i = 0; i < _soulCrystalOptions.length; i++) { - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), e.getItemCount() * _amount, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - else - { - // for non-stackable items, one of two scenaria are possible: - // a) list maintains enchantment: get the instances that exactly match the requested enchantment level - // b) list does not maintain enchantment: get the instances with the LOWEST enchantment level - - // a) if enchantment is maintained, then get a list of items that exactly match this enchantment - if (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0)) - { - // loop through this list and remove (one by one) each item until the required amount is taken. - final L2ItemInstance[] inventoryContents = inv.getAllItemsByItemId(e.getItemId(), e.getEnchantLevel(), false).toArray(new L2ItemInstance[0]); - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - originalInfos.put(i, new ItemInfo(inventoryContents[i])); - if (!player.destroyItem("Multisell", inventoryContents[i].getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } - else - // b) enchantment is not maintained. Get the instances with the LOWEST enchantment level - { - // NOTE: There are 2 ways to achieve the above goal. - // 1) Get all items that have the correct itemId, loop through them until the lowest enchantment - // level is found. Repeat all this for the next item until proper count of items is reached. - // 2) Get all items that have the correct itemId, sort them once based on enchantment level, - // and get the range of items that is necessary. - // Method 1 is faster for a small number of items to be exchanged. - // Method 2 is faster for large amounts. - // - // EXPLANATION: - // Worst case scenario for algorithm 1 will make it run in a number of cycles given by: - // m*(2n-m+1)/2 where m is the number of items to be exchanged and n is the total - // number of inventory items that have a matching id. - // With algorithm 2 (sort), sorting takes n*log(n) time and the choice is done in a single cycle - // for case b (just grab the m first items) or in linear time for case a (find the beginning of items - // with correct enchantment, index x, and take all items from x to x+m). - // Basically, whenever m > log(n) we have: m*(2n-m+1)/2 = (2nm-m*m+m)/2 > - // (2nlogn-logn*logn+logn)/2 = nlog(n) - log(n*n) + log(n) = nlog(n) + log(n/n*n) = - // nlog(n) + log(1/n) = nlog(n) - log(n) = (n-1)log(n) - // So for m < log(n) then m*(2n-m+1)/2 > (n-1)log(n) and m*(2n-m+1)/2 > nlog(n) - // - // IDEALLY: - // In order to best optimize the performance, choose which algorithm to run, based on whether 2^m > n - // if ( (2<<(e.getItemCount()// _amount)) < inventoryContents.length ) - // // do Algorithm 1, no sorting - // else - // // do Algorithm 2, sorting - // - // CURRENT IMPLEMENTATION: - // In general, it is going to be very rare for a person to do a massive exchange of non-stackable items - // For this reason, we assume that algorithm 1 will always suffice and we keep things simple. - // If, in the future, it becomes necessary that we optimize, the above discussion should make it clear - // what optimization exactly is necessary (based on the comments under "IDEALLY"). - // - - // choice 1. Small number of items exchanged. No sorting. - for (int i = 1; i <= (e.getItemCount() * _amount); i++) - { - final Collection inventoryContents = inv.getAllItemsByItemId(e.getItemId(), false); - - itemToTake = inventoryContents.iterator().next(); - // get item with the LOWEST enchantment level from the inventory... - // +0 is lowest by default... - if (itemToTake.getEnchantLevel() > 0) - { - for (L2ItemInstance item : inventoryContents) - { - if ((item.getEnchantLevel() < itemToTake.getEnchantLevel()) && (item.getEnchantLevel() >= e.getEnchantLevel())) - { - itemToTake = item; - // nothing will have enchantment less than 0. If a zero-enchanted - // item is found, just take it - if (itemToTake.getEnchantLevel() == 0) - { - break; - } - } - } - } - if (!player.destroyItem("Multisell", itemToTake.getObjectId(), 1, player.getTarget(), true)) - { - player.setMultiSell(null); - return; - } - } - } + addedItem.addSpecialAbility(_soulCrystalOptions[i], i + 1, 1, false); } } - } - } - - final double itemRandom = 100 * Rnd.nextDouble(); - float cumulativeChance = 0; - - boolean matched = false; - // Generate the appropriate items - for (Ingredient e : entry.getProducts()) - { - if (list.isChanceMultisell()) - { - // Skip first entry. - if (e.getChance() < 1) + if (_soulCrystalSpecialOptions != null) { - continue; + for (int i = 0; i < _soulCrystalSpecialOptions.length; i++) + { + addedItem.addSpecialAbility(_soulCrystalSpecialOptions[i], i + 1, 2, false); + } } - // Calculate chance - matched = itemRandom < (cumulativeChance += e.getChance()); - if (!matched) - { - continue; - } + addedItem.updateDatabase(); + + // Mark that we have already upgraded the item. + itemEnchantmentProcessed = false; } - if (e.getItemId() < 0) + if (addedItem.getCount() > 1) { - MultisellData.giveSpecialProduct(e.getItemId(), e.getItemCount() * _amount, player); + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); + sm.addItemName(addedItem.getId()); + sm.addLong(totalCount); + player.sendPacket(sm); + } + else if (addedItem.getEnchantLevel() > 0) + { + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); + sm.addLong(addedItem.getEnchantLevel()); + sm.addItemName(addedItem.getId()); + player.sendPacket(sm); } else { - if (e.isStackable()) - { - inv.addItem("Multisell", e.getItemId(), e.getItemCount() * _amount, player, player.getTarget()); - } - else - { - L2ItemInstance product = null; - for (int i = 0; i < (e.getItemCount() * _amount); i++) - { - product = inv.addItem("Multisell", e.getItemId(), 1, player, player.getTarget()); - if ((product != null) && (list.getMaintainEnchantment() || (e.getEnchantLevel() > 0))) - { - final ItemInfo info = originalInfos.get(i); - if (info != null) - { - if (info.getAugmentId() > 0) - { - product.setAugmentation(new L2Augmentation(info.getAugmentId())); - } - if (info.getElementals().length > 0) - { - Arrays.stream(info.getElementals()).filter(Objects::nonNull).forEach(product::setAttribute); - } - if (info.getVisualId() > 0) - { - product.setVisualId(info.getVisualId()); - if (info.getVisualStoneId() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_STONE_ID, info.getVisualStoneId()); - } - if (info.getVisualIdLifeTime() > 0) - { - product.getVariables().set(ItemVariables.VISUAL_APPEARANCE_LIFE_TIME, info.getVisualIdLifeTime()); - product.scheduleVisualLifeTime(); - } - } - if (!info.getSpecialAbilities().isEmpty()) - { - int position = 0; - for (EnsoulOption option : info.getSpecialAbilities()) - { - product.addSpecialAbility(option, position++, 1, true); - } - } - if (!info.getAdditionalSpecialAbilities().isEmpty()) - { - int position = 0; - for (EnsoulOption option : info.getAdditionalSpecialAbilities()) - { - product.addSpecialAbility(option, position++, 2, true); - } - } - } - product.setEnchantLevel(e.getEnchantLevel()); - product.updateDatabase(); - } - } - } - - final SystemMessage sm; - if ((e.getItemCount() * _amount) > 1) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S2_S1_S); - sm.addItemName(e.getItemId()); - sm.addLong(e.getItemCount() * _amount); - player.sendPacket(sm); - } - else - { - if (list.getMaintainEnchantment() && (e.getEnchantLevel() > 0)) - { - sm = SystemMessage.getSystemMessage(SystemMessageId.ACQUIRED_S1_S2); - sm.addLong(e.getEnchantLevel()); - sm.addItemName(e.getItemId()); - } - else - { - sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); - sm.addItemName(e.getItemId()); - } - player.sendPacket(sm); - } - } - - if (matched) - { - break; + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_EARNED_S1); + sm.addItemName(addedItem); + player.sendPacket(sm); } } - player.sendItemList(false); - - // finally, give the tax to the castle... - if ((npc != null) && (entry.getTaxAmount() > 0)) + } + + // Update inventory and weight. + player.sendInventoryUpdate(iu); + + // finally, give the tax to the castle... + if ((npc != null) && list.isApplyTaxes()) + { + final OptionalLong taxPaid = entry.getIngredients().stream().filter(i -> i.getId() == Inventory.ADENA_ID).mapToLong(i -> Math.round(i.getCount() * list.getIngredientMultiplier() * list.getTaxRate()) * _amount).reduce(Math::multiplyExact); + if (taxPaid.isPresent()) { - npc.getCastle().addToTreasury(entry.getTaxAmount() * _amount); + npc.handleTaxPayment(taxPaid.getAsLong()); } - - break; } } + catch (ArithmeticException ae) + { + player.sendPacket(SystemMessageId.YOU_HAVE_EXCEEDED_THE_QUANTITY_THAT_CAN_BE_INPUTTED); + return; + } + + // Re-send multisell after successful exchange of inventory-only shown items. + if (list.isInventoryOnly()) + { + MultisellData.getInstance().separateAndSend(list.getId(), player, npc, list.isInventoryOnly(), list.getProductMultiplier(), list.getIngredientMultiplier()); + } + } + + /** + * @param player + * @param list + * @param inventory + * @param clan + * @param ingredientId + * @param totalCount + * @return {@code false} if ingredient amount is not enough, {@code true} otherwise. + */ + private boolean checkIngredients(final L2PcInstance player, PreparedMultisellListHolder list, final PcInventory inventory, final L2Clan clan, final int ingredientId, final long totalCount) + { + final SpecialItemType specialItem = SpecialItemType.getByClientId(ingredientId); + if (specialItem != null) + { + // Check special item. + switch (specialItem) + { + case CLAN_REPUTATION: + { + if (clan == null) + { + player.sendPacket(SystemMessageId.YOU_ARE_NOT_A_CLAN_MEMBER_AND_CANNOT_PERFORM_THIS_ACTION); + return false; + } + else if (!player.isClanLeader()) + { + player.sendPacket(SystemMessageId.ONLY_THE_CLAN_LEADER_IS_ENABLED); + return false; + } + else if (clan.getReputationScore() < totalCount) + { + player.sendPacket(SystemMessageId.THE_CLAN_REPUTATION_IS_TOO_LOW); + return false; + } + return true; + } + case FAME: + { + if (player.getFame() < totalCount) + { + player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_FAME_TO_DO_THAT); + return false; + } + return true; + } + case RAIDBOSS_POINTS: + { + if (player.getRaidbossPoints() < totalCount) + { + player.sendPacket(SystemMessageId.NOT_ENOUGH_RAID_POINTS); + return false; + } + return true; + } + case PC_CAFE_POINTS: + { + if (player.getPcCafePoints() < totalCount) + { + player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_ARE_SHORT_OF_PC_POINTS)); + return false; + } + return true; + } + default: + { + _log.severe("Multisell: " + _listId + " is using a non-implemented special ingredient with id: " + ingredientId + "."); + return false; + } + } + } + // Check if the necessary items are there. If list maintains enchantment, allow all enchanted items, otherwise only unenchanted. TODO: Check how retail does it. + else if (inventory.getInventoryItemCount(ingredientId, list.isMaintainEnchantment() ? -1 : 0, false) < totalCount) + { + SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_NEED_S2_S1_S); + sm.addItemName(ingredientId); + sm.addLong(totalCount); + player.sendPacket(sm); + return false; + } + + return true; } /** @@ -499,7 +592,7 @@ public class MultiSellChoose implements IClientIncomingPacket * @param list * @return {@code true} if player can buy stuff from the multisell, {@code false} otherwise. */ - private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedListContainer list) + private boolean isAllowedToUse(L2PcInstance player, L2Npc npc, PreparedMultisellListHolder list) { if (npc != null) { @@ -507,7 +600,7 @@ public class MultiSellChoose implements IClientIncomingPacket { return false; } - else if (list.isNpcOnly() && ((npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) + else if (list.isNpcOnly() && (!list.checkNpcObjectId(npc.getObjectId()) || (npc.getInstanceWorld() != player.getInstanceWorld()) || !player.isInsideRadius(npc, L2Npc.INTERACTION_DISTANCE, true, false))) { return false; } @@ -518,4 +611,4 @@ public class MultiSellChoose implements IClientIncomingPacket } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java index 80f66487bd..df1cc723fd 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestBuyItem.java @@ -29,8 +29,8 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.ItemHolder; import com.l2jmobius.gameserver.network.L2GameClient; import com.l2jmobius.gameserver.network.SystemMessageId; @@ -110,7 +110,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - merchant = (L2MerchantInstance) target; + merchant = (L2MerchantInstance) target; // FIXME: Doesn't work for GMs. } if ((merchant == null) && !player.isGM() && (_listId != CUSTOM_CB_SELL_LIST)) @@ -119,7 +119,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -134,7 +134,7 @@ public final class RequestBuyItem implements IClientIncomingPacket client.sendPacket(ActionFailed.STATIC_PACKET); return; } - castleTaxRate = merchant.getTotalTaxRate(TaxType.BUY); + castleTaxRate = merchant.getCastleTaxRate(TaxType.BUY); } long subTotal = 0; @@ -159,11 +159,6 @@ public final class RequestBuyItem implements IClientIncomingPacket } long price = product.getPrice(); - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - price *= Config.RATE_SIEGE_GUARDS_PRICE; - } - if (price < 0) { _log.warning("ERROR, no price found .. wrong buylist ??"); @@ -194,7 +189,7 @@ public final class RequestBuyItem implements IClientIncomingPacket return; } // first calculate price per item with tax, then multiply by count - price = (long) (price * (1 + castleTaxRate)); + price = (long) (price * (1 + castleTaxRate + product.getBaseTaxRate())); subTotal += i.getCount() * price; if (subTotal > MAX_ADENA) { @@ -257,7 +252,7 @@ public final class RequestBuyItem implements IClientIncomingPacket // add to castle treasury if (merchant != null) { - merchant.getCastle().addToTreasury((long) (subTotal * castleTaxRate)); + merchant.handleTaxPayment((long) (subTotal * castleTaxRate)); } client.sendPacket(new ExUserInfoInvenWeight(player)); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java index b1ae7171e1..4be21afceb 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestExEnchantItemAttribute.java @@ -202,6 +202,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket } } + item.updateItemElementals(); player.destroyItem("AttrEnchant", stone, usedStones, player, true); final AttributeHolder newElement = item.getAttribute(elementToAdd); final int newValue = newElement != null ? newElement.getValue() : 0; @@ -345,7 +346,7 @@ public class RequestExEnchantItemAttribute implements IClientIncomingPacket if (success) { - item.setAttribute(new AttributeHolder(elementToAdd, newPower)); + item.setAttribute(new AttributeHolder(elementToAdd, newPower), false); } return success ? 1 : 0; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java index c1db83f07e..7fb3de5cb4 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestPreviewItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.L2Npc; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.buylist.Product; import com.l2jmobius.gameserver.model.itemcontainer.Inventory; import com.l2jmobius.gameserver.model.items.L2Armor; @@ -157,7 +157,7 @@ public final class RequestPreviewItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(activeChar, "Warning!! Character " + activeChar.getName() + " of account " + activeChar.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java index a30ac40863..0007b7ffb0 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefine.java @@ -18,7 +18,7 @@ package com.l2jmobius.gameserver.network.clientpackets; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.datatables.AugmentationData; -import com.l2jmobius.gameserver.model.L2Augmentation; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -118,12 +118,10 @@ public final class RequestRefine extends AbstractRefinePacket return; } - final L2Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); - targetItem.setAugmentation(aug); + final Augmentation aug = AugmentationData.getInstance().generateRandomAugmentation(lifeStoneLevel, lifeStoneGrade, targetItem.getItem().getBodyPart(), refinerItem.getId(), targetItem); + targetItem.setAugmentation(aug, true); - final int stat12 = 0x0000FFFF & aug.getId(); - final int stat34 = aug.getId() >> 16; - activeChar.sendPacket(new ExVariationResult(stat12, stat34, 1)); + activeChar.sendPacket(new ExVariationResult(aug.getOptionId(0), aug.getOptionId(1), 1)); final InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(targetItem); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java index 3cc8f4c564..9ab82245e8 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestRefundItem.java @@ -21,11 +21,10 @@ import static com.l2jmobius.gameserver.model.actor.L2Npc.INTERACTION_DISTANCE; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketReader; import com.l2jmobius.gameserver.data.xml.impl.BuyListData; -import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -79,13 +78,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - if (_items == null) - { - client.sendPacket(ActionFailed.STATIC_PACKET); - return; - } - - if (!player.hasRefund()) + if ((_items == null) || !player.hasRefund()) { client.sendPacket(ActionFailed.STATIC_PACKET); return; @@ -109,7 +102,7 @@ public final class RequestRefundItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -164,12 +157,7 @@ public final class RequestRefundItem implements IClientIncomingPacket final long count = item.getCount(); weight += count * template.getWeight(); - long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } - adena += price * count; + adena += (count * template.getReferencePrice()) / 2; if (!template.isStackable()) { slots += count; @@ -213,6 +201,6 @@ public final class RequestRefundItem implements IClientIncomingPacket // Update current load status on player client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java index e6538867b5..92704fff45 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/RequestSellItem.java @@ -29,7 +29,7 @@ import com.l2jmobius.gameserver.enums.TaxType; import com.l2jmobius.gameserver.model.L2Object; import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.holders.UniqueItemHolder; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.L2GameClient; @@ -129,7 +129,7 @@ public final class RequestSellItem implements IClientIncomingPacket return; } - final L2BuyList buyList = BuyListData.getInstance().getBuyList(_listId); + final ProductList buyList = BuyListData.getInstance().getBuyList(_listId); if (buyList == null) { Util.handleIllegalPlayerAction(player, "Warning!! Character " + player.getName() + " of account " + player.getAccountName() + " sent a false BuyList list_id " + _listId, Config.DEFAULT_PUNISH); @@ -153,10 +153,6 @@ public final class RequestSellItem implements IClientIncomingPacket } long price = item.getReferencePrice() / 2; - if (merchant != null) - { - price -= (price * merchant.getTotalTaxRate(TaxType.SELL)); - } totalPrice += price * i.getCount(); if (((MAX_ADENA / i.getCount()) < price) || (totalPrice > MAX_ADENA)) { @@ -166,25 +162,27 @@ public final class RequestSellItem implements IClientIncomingPacket if (Config.ALLOW_REFUND) { - item = player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); + player.getInventory().transferItem("Sell", i.getObjectId(), i.getCount(), player.getRefund(), player, merchant); } else { - item = player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); + player.getInventory().destroyItem("Sell", i.getObjectId(), i.getCount(), player, merchant); } } + // add to castle treasury + if (merchant != null) + { + // Keep here same formula as in {@link ExBuySellList} to produce same result. + final long profit = (long) (totalPrice * (1.0 - merchant.getCastleTaxRate(TaxType.SELL))); + merchant.handleTaxPayment(totalPrice - profit); + totalPrice = profit; + } + player.addAdena("Sell", totalPrice, merchant, false); - // add to castle treasury? - if (merchant != null) - { - final long taxCollection = (long) (totalPrice * (1.0 - merchant.getTotalTaxRate(TaxType.SELL))); - merchant.getCastle().addToTreasury(taxCollection); - } - // Update current load as well client.sendPacket(new ExUserInfoInvenWeight(player)); - client.sendPacket(new ExBuySellList(player, true, merchant != null ? merchant.getTotalTaxRate(TaxType.SELL) : 0)); + client.sendPacket(new ExBuySellList(player, true)); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java index a27dbe1558..eb4e92cdf9 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/clientpackets/attributechange/RequestChangeAttributeItem.java @@ -75,7 +75,7 @@ public class RequestChangeAttributeItem implements IClientIncomingPacket final int oldElementId = item.getAttackAttributeType().getClientId(); final int elementValue = item.getAttackAttribute().getValue(); item.clearAllAttributes(); - item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue)); + item.setAttribute(new AttributeHolder(AttributeType.findByClientId(_newElementId), elementValue), true); // send packets final SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.S1_S_S2_ATTRIBUTE_HAS_SUCCESSFULLY_CHANGED_TO_S3_ATTRIBUTE); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java index b53abd0918..d03199cbbb 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/AbstractItemPacket.java @@ -17,6 +17,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.enums.AttributeType; import com.l2jmobius.gameserver.enums.ItemListType; import com.l2jmobius.gameserver.model.ItemInfo; import com.l2jmobius.gameserver.model.TradeItem; @@ -75,15 +76,14 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket 0) + if (item.getAugmentation() != null) { mask |= ItemListType.AUGMENT_BONUS.getMask(); } - if (item.getAttackElementType() >= 0) + if ((item.getAttackElementType() >= 0) || (item.getAttributeDefence(AttributeType.FIRE) > 0) || (item.getAttributeDefence(AttributeType.WATER) > 0) || (item.getAttributeDefence(AttributeType.WIND) > 0) || (item.getAttributeDefence(AttributeType.EARTH) > 0) || (item.getAttributeDefence(AttributeType.HOLY) > 0) || (item.getAttributeDefence(AttributeType.DARK) > 0)) { mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); } - else - { - for (byte i = 0; i < 6; i++) - { - if (item.getElementDefAttr(i) > 0) - { - mask |= ItemListType.ELEMENTAL_ATTRIBUTE.getMask(); - break; - } - } - } if (item.getEnchantOptions() != null) { @@ -162,6 +141,20 @@ public abstract class AbstractItemPacket extends AbstractMaskPacket _list; private final long _money; - private double _taxRate = 0; + private final int _inventorySlots; + private final double _castleTaxRate; - public BuyList(L2BuyList list, long currentMoney, double taxRate) + public BuyList(ProductList list, L2PcInstance player, double castleTaxRate) { _listId = list.getListId(); _list = list.getProducts(); - _money = currentMoney; - _taxRate = taxRate; + _money = player.getAdena(); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); + _castleTaxRate = castleTaxRate; } @Override @@ -47,23 +49,14 @@ public final class BuyList extends AbstractItemPacket packet.writeD(0x00); // Type BUY packet.writeQ(_money); // current money packet.writeD(_listId); - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); packet.writeH(_list.size()); - for (Product product : _list) { if ((product.getCount() > 0) || !product.hasLimitedStock()) { writeItem(packet, product); - - if ((product.getItemId() >= 3960) && (product.getItemId() <= 4026)) - { - packet.writeQ((long) (product.getPrice() * Config.RATE_SIEGE_GUARDS_PRICE * (1 + _taxRate))); - } - else - { - packet.writeQ((long) (product.getPrice() * (1 + _taxRate))); - } + packet.writeQ((long) (product.getPrice() * (1.0 + _castleTaxRate + product.getBaseTaxRate()))); } } return true; diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java index 293338cdb6..19b51c80ed 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/CharInfo.java @@ -21,6 +21,7 @@ import java.util.Set; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2DecoyInstance; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.ceremonyofchaos.CeremonyOfChaosEvent; @@ -133,7 +134,9 @@ public class CharInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrderAugument()) { - packet.writeQ(_activeChar.getInventory().getPaperdollAugmentationId(slot)); // Confirmed + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_armorEnchant); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java index ecd9dde18c..3b46eb9e3a 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/CharSelectionInfo.java @@ -29,6 +29,7 @@ import com.l2jmobius.commons.database.DatabaseFactory; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.sql.impl.ClanTable; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; +import com.l2jmobius.gameserver.datatables.AugmentationData; import com.l2jmobius.gameserver.model.CharSelectInfoPackage; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.entity.Hero; @@ -191,7 +192,8 @@ public class CharSelectionInfo implements IClientOutgoingPacket packet.writeD(i == _activeId ? 1 : 0); packet.writeC(charInfoPackage.getEnchantEffect() > 127 ? 127 : charInfoPackage.getEnchantEffect()); - packet.writeQ(charInfoPackage.getAugmentationId()); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(0) : 0); + packet.writeD(charInfoPackage.getAugmentation() != null ? charInfoPackage.getAugmentation().getOptionId(1) : 0); // packet.writeD(charInfoPackage.getTransformId()); // Used to display Transformations packet.writeD(0x00); // Currently on retail when you are on character select you don't see your transformation. @@ -365,7 +367,10 @@ public class CharSelectionInfo implements IClientOutgoingPacket if (result.next()) { final int augment = result.getInt("augAttributes"); - charInfopackage.setAugmentationId(augment == -1 ? 0 : augment); + if (augment > 0) + { + charInfopackage.setAugmentation(AugmentationData.getInstance().getAugmentation(augment)); + } } } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java index f793112067..547f24c351 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExBuySellList.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import java.util.Collection; import com.l2jmobius.commons.network.PacketWriter; +import com.l2jmobius.gameserver.model.actor.L2Summon; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -28,14 +29,17 @@ import com.l2jmobius.gameserver.network.OutgoingPackets; */ public class ExBuySellList extends AbstractItemPacket { - private Collection _sellList = null; + private Collection _sellList; private Collection _refundList = null; private final boolean _done; - private double _taxRate = 1; + private final int _inventorySlots; + private double _castleTaxRate = 1; public ExBuySellList(L2PcInstance player, boolean done) { - _sellList = player.getInventory().getAvailableItems(false, false, false); + final L2Summon pet = player.getPet(); + _sellList = player.getInventory().getItems(item -> !item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))); + _inventorySlots = player.getInventory().getItems((item) -> !item.isQuestItem()).size(); if (player.hasRefund()) { _refundList = player.getRefund().getItems(); @@ -43,10 +47,10 @@ public class ExBuySellList extends AbstractItemPacket _done = done; } - public ExBuySellList(L2PcInstance player, boolean done, double taxRate) + public ExBuySellList(L2PcInstance player, boolean done, double castleTaxRate) { this(player, done); - _taxRate = 1 - taxRate; + _castleTaxRate = 1 - castleTaxRate; } @Override @@ -55,7 +59,7 @@ public class ExBuySellList extends AbstractItemPacket OutgoingPackets.EX_BUY_SELL_LIST.writeId(packet); packet.writeD(0x01); // Type SELL - packet.writeD(0x00); // TODO: inventory count + packet.writeD(_inventorySlots); if ((_sellList != null)) { @@ -63,15 +67,15 @@ public class ExBuySellList extends AbstractItemPacket for (L2ItemInstance item : _sellList) { writeItem(packet, item); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _castleTaxRate)); } - } + } else { packet.writeH(0x00); } - if ((_refundList != null) && !_refundList.isEmpty()) + if ((_refundList != null) && !_refundList.isEmpty()) { packet.writeH(_refundList.size()); int i = 0; @@ -79,7 +83,7 @@ public class ExBuySellList extends AbstractItemPacket { writeItem(packet, item); packet.writeD(i++); - packet.writeQ((long) ((item.getItem().getReferencePrice() / 2) * _taxRate)); + packet.writeQ((item.getItem().getReferencePrice() / 2) * item.getCount()); } } else diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java index 362df12b76..791da494e7 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExPutItemResultForVariationCancel.java @@ -26,15 +26,15 @@ public class ExPutItemResultForVariationCancel implements IClientOutgoingPacket private final int _itemId; private final int _itemAug1; private final int _itemAug2; - private final int _price; + private final long _price; - public ExPutItemResultForVariationCancel(L2ItemInstance item, int price) + public ExPutItemResultForVariationCancel(L2ItemInstance item, long price) { _itemObjId = item.getObjectId(); _itemId = item.getDisplayId(); _price = price; - _itemAug1 = ((short) item.getAugmentation().getId()); - _itemAug2 = item.getAugmentation().getId() >> 16; + _itemAug1 = item.getAugmentation().getOptionId(0); + _itemAug2 = item.getAugmentation().getOptionId(1); } @Override diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java index 45193eda4d..9e6d8f9a35 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ExUserInfoEquipSlot.java @@ -18,6 +18,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.enums.InventorySlot; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.itemcontainer.PcInventory; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -73,10 +74,12 @@ public class ExUserInfoEquipSlot extends AbstractMaskPacket { if (containsMask(slot)) { + final Augmentation augment = inventory.getPaperdollAugmentation(slot.getSlot()); packet.writeH(22); // 10 + 4 * 3 packet.writeD(inventory.getPaperdollObjectId(slot.getSlot())); packet.writeD(inventory.getPaperdollItemId(slot.getSlot())); - packet.writeQ(inventory.getPaperdollAugmentationId(slot.getSlot())); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); + packet.writeD(augment != null ? augment.getOptionId(1) : 0); packet.writeD(inventory.getPaperdollItemVisualId(slot.getSlot())); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java index d1b7900f12..2f040f5e21 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/FakePlayerInfo.java @@ -101,7 +101,8 @@ public class FakePlayerInfo implements IClientOutgoingPacket for (@SuppressWarnings("unused") int slot : getPaperdollOrderAugument()) { - packet.writeQ(0x00); + packet.writeD(0x00); + packet.writeD(0x00); } packet.writeC(_fpcHolder.getArmorEnchantLevel()); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java index fa4191961a..80fa0856d8 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/GMViewCharacterInfo.java @@ -19,6 +19,7 @@ package com.l2jmobius.gameserver.network.serverpackets; import com.l2jmobius.commons.network.PacketWriter; import com.l2jmobius.gameserver.data.xml.impl.ExperienceData; import com.l2jmobius.gameserver.enums.AttributeType; +import com.l2jmobius.gameserver.model.Augmentation; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -88,7 +89,9 @@ public class GMViewCharacterInfo implements IClientOutgoingPacket for (int slot : getPaperdollOrder()) { - packet.writeQ(_activeChar.getInventory().getPaperdollAugmentationId(slot)); + final Augmentation augment = _activeChar.getInventory().getPaperdollAugmentation(slot); + packet.writeD(augment != null ? augment.getOptionId(0) : 0); // Confirmed + packet.writeD(augment != null ? augment.getOptionId(1) : 0); // Confirmed } packet.writeC(_activeChar.getInventory().getTalismanSlots()); // CT2.3 diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java index 56b85ff361..5b66dbf2bb 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/GMViewSkillInfo.java @@ -48,7 +48,7 @@ public class GMViewSkillInfo implements IClientOutgoingPacket { packet.writeD(skill.isPassive() ? 1 : 0); packet.writeH(skill.getDisplayLevel()); - packet.writeH(0x00); // Sub level + packet.writeH(skill.getSubLevel()); packet.writeD(skill.getDisplayId()); packet.writeD(0x00); packet.writeC(isDisabled && skill.isClanSkill() ? 1 : 0); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java index be6ce0114b..84aa9d3629 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/MultiSellList.java @@ -19,21 +19,22 @@ package com.l2jmobius.gameserver.network.serverpackets; import static com.l2jmobius.gameserver.data.xml.impl.MultisellData.PAGE_SIZE; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.ensoul.EnsoulOption; -import com.l2jmobius.gameserver.model.items.enchant.attribute.AttributeHolder; -import com.l2jmobius.gameserver.model.multisell.Entry; -import com.l2jmobius.gameserver.model.multisell.Ingredient; -import com.l2jmobius.gameserver.model.multisell.ItemInfo; -import com.l2jmobius.gameserver.model.multisell.ListContainer; +import com.l2jmobius.gameserver.datatables.ItemTable; +import com.l2jmobius.gameserver.model.ItemInfo; +import com.l2jmobius.gameserver.model.holders.ItemChanceHolder; +import com.l2jmobius.gameserver.model.holders.ItemHolder; +import com.l2jmobius.gameserver.model.holders.MultisellEntryHolder; +import com.l2jmobius.gameserver.model.holders.PreparedMultisellListHolder; +import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; -public final class MultiSellList implements IClientOutgoingPacket +public final class MultiSellList extends AbstractItemPacket { private int _size, _index; - private final ListContainer _list; + private final PreparedMultisellListHolder _list; private final boolean _finished; - public MultiSellList(ListContainer list, int index) + public MultiSellList(PreparedMultisellListHolder list, int index) { _list = list; _index = index; @@ -54,175 +55,71 @@ public final class MultiSellList implements IClientOutgoingPacket { OutgoingPackets.MULTI_SELL_LIST.writeId(packet); - packet.writeC(0x00); - packet.writeD(_list.getListId()); // list id + packet.writeC(0x00); // Helios + packet.writeD(_list.getId()); // list id packet.writeC(0x00); // GOD Unknown packet.writeD(1 + (_index / PAGE_SIZE)); // page started from 1 packet.writeD(_finished ? 0x01 : 0x00); // finished packet.writeD(PAGE_SIZE); // size of pages packet.writeD(_size); // list length packet.writeC(_list.isChanceMultisell() ? 0x01 : 0x00); // new multisell window - packet.writeD(0x20); // Always 32 oO + packet.writeD(0x20); // Helios - Always 32 - Entry ent; while (_size-- > 0) { - ent = _list.getEntries().get(_index++); - packet.writeD(ent.getEntryId()); - packet.writeC(ent.isStackable() ? 1 : 0); - packet.writeH(0x00); - packet.writeD(0x00); - packet.writeD(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeH(0x00); - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } + final ItemInfo itemEnchantment = _list.getItemEnchantment(_index); + final MultisellEntryHolder entry = _list.getEntries().get(_index++); - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } + packet.writeD(_index); // Entry ID. Start from 1. + packet.writeC(entry.isStackable() ? 1 : 0); - packet.writeH(ent.getProducts().size()); - packet.writeH(ent.getIngredients().size()); + // Those values will be passed down to MultiSellChoose packet. + packet.writeH(itemEnchantment != null ? itemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, itemEnchantment); + writeItemElemental(packet, itemEnchantment); + writeItemEnsoulOptions(packet, itemEnchantment); - for (Ingredient ing : ent.getProducts()) + packet.writeH(entry.getProducts().size()); + packet.writeH(entry.getIngredients().size()); + + for (ItemChanceHolder product : entry.getProducts()) { - packet.writeD(ing.getItemId()); - if (ing.getTemplate() != null) + final L2Item template = ItemTable.getInstance().getTemplate(product.getId()); + final ItemInfo displayItemEnchantment = (_list.isMaintainEnchantment() && (itemEnchantment != null) && (template != null) && template.getClass().equals(itemEnchantment.getItem().getClass())) ? itemEnchantment : null; + + packet.writeD(product.getId()); + if (template != null) { - packet.writeQ(ing.getTemplate().getBodyPart()); - packet.writeH(ing.getTemplate().getType2()); + packet.writeQ(template.getBodyPart()); + packet.writeH(template.getType2()); } else { packet.writeQ(0); packet.writeH(65535); } - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - - packet.writeC(item.getSpecialAbilities().size()); // Size of regular soul crystal options. - for (EnsoulOption option : item.getSpecialAbilities()) - { - packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - } - - packet.writeC(item.getAdditionalSpecialAbilities().size()); // Size of special soul crystal options. - for (EnsoulOption option : item.getAdditionalSpecialAbilities()) - { - packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeD(0x00); // time ? - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } - - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } - } + packet.writeQ(_list.getProductCount(product)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + packet.writeD((int) Math.ceil(product.getChance())); // chance + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); + writeItemEnsoulOptions(packet, displayItemEnchantment); } - for (Ingredient ing : ent.getIngredients()) + for (ItemHolder ingredient : entry.getIngredients()) { - packet.writeD(ing.getItemId()); - packet.writeH(ing.getTemplate() != null ? ing.getTemplate().getType2() : 65535); - packet.writeQ(ing.getItemCount()); - if (ing.getItemInfo() != null) - { - final ItemInfo item = ing.getItemInfo(); - packet.writeH(item.getEnchantLevel()); // enchant level - packet.writeD((int) (_list.isChanceMultisell() ? ing.getChance() : item.getAugmentId())); // augment id - packet.writeD(0x00); // mana - packet.writeH(item.getElementId()); // attack element - packet.writeH(item.getElementPower()); // element power - for (int i = 0; i < 6; i++) - { - final AttributeHolder holder = item.getElementals()[i]; - packet.writeH(holder != null ? holder.getValue() : 0); - } - packet.writeC(item.getSpecialAbilities().size()); // Size of regular soul crystal options. - for (EnsoulOption option : item.getSpecialAbilities()) - { - packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - } - - packet.writeC(item.getAdditionalSpecialAbilities().size()); // Size of special soul crystal options. - for (EnsoulOption option : item.getAdditionalSpecialAbilities()) - { - packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - } - } - else - { - packet.writeH(ing.getEnchantLevel()); // enchant level - packet.writeD((int) ing.getChance()); // augment id - packet.writeD(0x00); // mana - packet.writeH(0x00); // attack element - packet.writeH(0x00); // element power - packet.writeH(0x00); // fire - packet.writeH(0x00); // water - packet.writeH(0x00); // wind - packet.writeH(0x00); // earth - packet.writeH(0x00); // holy - packet.writeH(0x00); // dark - packet.writeC(0); // Size of regular soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalOptions()) - // { - // packet.writeD(option.getId()); // Regular Soul Crystal Ability ID. - // } - - packet.writeC(0); // Size of special soul crystal options. - // for (EnsoulOption option : item.getSoulCrystalSpecialOptions()) - // { - // packet.writeD(option.getId()); // Special Soul Crystal Ability ID. - // } - } + final L2Item template = ItemTable.getInstance().getTemplate(ingredient.getId()); + final ItemInfo displayItemEnchantment = ((itemEnchantment != null) && (itemEnchantment.getItem().getId() == ingredient.getId())) ? itemEnchantment : null; + + packet.writeD(ingredient.getId()); + packet.writeH(template != null ? template.getType2() : 65535); + packet.writeQ(_list.getIngredientCount(ingredient)); + packet.writeH(displayItemEnchantment != null ? displayItemEnchantment.getEnchantLevel() : 0); // enchant level + writeItemAugment(packet, displayItemEnchantment); + writeItemElemental(packet, displayItemEnchantment); + writeItemEnsoulOptions(packet, displayItemEnchantment); } } return true; } -} +} \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java deleted file mode 100644 index 433eae9095..0000000000 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/SellList.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * This file is part of the L2J Mobius project. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.l2jmobius.gameserver.network.serverpackets; - -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; - -import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.enums.AttributeType; -import com.l2jmobius.gameserver.enums.TaxType; -import com.l2jmobius.gameserver.model.actor.L2Summon; -import com.l2jmobius.gameserver.model.actor.instance.L2MerchantInstance; -import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; -import com.l2jmobius.gameserver.model.items.instance.L2ItemInstance; -import com.l2jmobius.gameserver.network.OutgoingPackets; - -public class SellList implements IClientOutgoingPacket -{ - private final L2PcInstance _activeChar; - private final L2MerchantInstance _merchant; - private final long _money; - private final List _sellList; - - public SellList(L2PcInstance player) - { - this(player, null); - } - - public SellList(L2PcInstance player, L2MerchantInstance lease) - { - _activeChar = player; - _merchant = lease; - _money = _activeChar.getAdena(); - - if (_merchant == null) - { - _sellList = new LinkedList<>(); - final L2Summon pet = _activeChar.getPet(); - for (L2ItemInstance item : _activeChar.getInventory().getItems()) - { - if (!item.isEquipped() && item.isSellable() && ((pet == null) || (item.getObjectId() != pet.getControlObjectId()))) // Pet is summoned and not the item that summoned the pet - { - _sellList.add(item); - } - } - } - else - { - _sellList = Collections.emptyList(); - } - } - - @Override - public boolean write(PacketWriter packet) - { - OutgoingPackets.SELL_LIST.writeId(packet); - - packet.writeQ(_money); - packet.writeD(_merchant == null ? 0x00 : 1000000 + _merchant.getTemplate().getId()); - packet.writeH(_sellList.size()); - - for (L2ItemInstance item : _sellList) - { - int price = item.getItem().getReferencePrice() / 2; - if (_merchant != null) - { - price -= (price * _merchant.getTotalTaxRate(TaxType.SELL)); - } - - packet.writeH(item.getItem().getType1()); - packet.writeD(item.getObjectId()); - packet.writeD(item.getDisplayId()); - packet.writeQ(item.getCount()); - packet.writeH(item.getItem().getType2()); - packet.writeH(item.isEquipped() ? 0x01 : 0x00); - packet.writeD(item.getItem().getBodyPart()); - packet.writeH(item.getEnchantLevel()); - packet.writeH(0x00); // TODO: Verify me - packet.writeH(item.getCustomType2()); - packet.writeQ(price); - // T1 - packet.writeH(item.getAttackAttributeType().getClientId()); - packet.writeH(item.getAttackAttributePower()); - for (AttributeType type : AttributeType.ATTRIBUTE_TYPES) - { - packet.writeH(item.getDefenceAttribute(type)); - } - // Enchant Effects - for (int op : item.getEnchantOptions()) - { - packet.writeH(op); - } - } - return true; - } -} diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java index 438e259df2..cea58a11ac 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/ShopPreviewList.java @@ -20,8 +20,8 @@ import java.util.Collection; import com.l2jmobius.Config; import com.l2jmobius.commons.network.PacketWriter; -import com.l2jmobius.gameserver.model.buylist.L2BuyList; import com.l2jmobius.gameserver.model.buylist.Product; +import com.l2jmobius.gameserver.model.buylist.ProductList; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.network.OutgoingPackets; @@ -32,7 +32,7 @@ public class ShopPreviewList implements IClientOutgoingPacket private final long _money; private int _expertise; - public ShopPreviewList(L2BuyList list, long currentMoney, int expertiseIndex) + public ShopPreviewList(ProductList list, long currentMoney, int expertiseIndex) { _listId = list.getListId(); _list = list.getProducts(); diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java index 24d153ef95..8d5ef1a54c 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/network/serverpackets/commission/ExResponseCommissionBuyItem.java @@ -45,7 +45,7 @@ public class ExResponseCommissionBuyItem implements IClientOutgoingPacket if (_commissionItem != null) { final ItemInfo itemInfo = _commissionItem.getItemInfo(); - packet.writeD(itemInfo.getEnchant()); + packet.writeD(itemInfo.getEnchantLevel()); packet.writeD(itemInfo.getItem().getId()); packet.writeQ(itemInfo.getCount()); }