Replaced Henna CSV data with aCis free version XML data.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
183
L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml
vendored
Normal file
183
L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml
vendored
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/Hennas.xsd">
|
||||||
|
<henna symbolId="1" dyeId="4445" price="37000" INT="0" STR="1" CON="-3" MEN="0" DEX="0" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="2" dyeId="4446" price="37000" INT="0" STR="1" CON="0" MEN="0" DEX="-3" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="3" dyeId="4447" price="37000" INT="0" STR="-3" CON="1" MEN="0" DEX="0" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="4" dyeId="4448" price="37000" INT="0" STR="0" CON="1" MEN="0" DEX="-3" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="5" dyeId="4449" price="37000" INT="0" STR="-3" CON="0" MEN="0" DEX="1" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="6" dyeId="4450" price="37000" INT="0" STR="0" CON="-3" MEN="0" DEX="1" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="7" dyeId="4451" price="37000" INT="1" STR="0" CON="0" MEN="-3" DEX="0" WIT="0" classes="11;26;39"/>
|
||||||
|
<henna symbolId="8" dyeId="4452" price="37000" INT="1" STR="0" CON="0" MEN="0" DEX="0" WIT="-3" classes="1;4;7;11;19;22;26;32;35;39;45;47;54;56"/>
|
||||||
|
<henna symbolId="9" dyeId="4453" price="37000" INT="-3" STR="0" CON="0" MEN="1" DEX="0" WIT="0" classes="11;26;39"/>
|
||||||
|
<henna symbolId="10" dyeId="4454" price="37000" INT="0" STR="0" CON="0" MEN="1" DEX="0" WIT="-3" classes="11;15;26;29;39;42;50"/>
|
||||||
|
<henna symbolId="11" dyeId="4455" price="37000" INT="-3" STR="0" CON="0" MEN="0" DEX="0" WIT="1" classes="1;4;7;11;19;22;26;32;35;39;45;47;54;56"/>
|
||||||
|
<henna symbolId="12" dyeId="4456" price="37000" INT="0" STR="0" CON="0" MEN="-3" DEX="0" WIT="1" classes="11;15;26;29;39;42;50"/>
|
||||||
|
<henna symbolId="13" dyeId="4457" price="87000" INT="0" STR="1" CON="-2" MEN="0" DEX="0" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="14" dyeId="4458" price="87000" INT="0" STR="1" CON="0" MEN="0" DEX="-2" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="15" dyeId="4459" price="87000" INT="0" STR="-2" CON="1" MEN="0" DEX="0" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="16" dyeId="4460" price="87000" INT="0" STR="0" CON="1" MEN="0" DEX="-2" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="17" dyeId="4461" price="87000" INT="0" STR="-2" CON="0" MEN="0" DEX="1" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="18" dyeId="4462" price="87000" INT="0" STR="0" CON="-2" MEN="0" DEX="1" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="19" dyeId="4463" price="87000" INT="1" STR="0" CON="0" MEN="-2" DEX="0" WIT="0" classes="11;26;39"/>
|
||||||
|
<henna symbolId="20" dyeId="4464" price="87000" INT="1" STR="0" CON="0" MEN="0" DEX="0" WIT="-2" classes="1;4;7;11;19;22;26;32;35;39;45;47;54;56"/>
|
||||||
|
<henna symbolId="21" dyeId="4465" price="87000" INT="-2" STR="0" CON="0" MEN="1" DEX="0" WIT="0" classes="11;26;39"/>
|
||||||
|
<henna symbolId="22" dyeId="4466" price="87000" INT="0" STR="0" CON="0" MEN="1" DEX="0" WIT="-2" classes="11;15;26;29;39;42;50"/>
|
||||||
|
<henna symbolId="23" dyeId="4467" price="87000" INT="-2" STR="0" CON="0" MEN="0" DEX="0" WIT="1" classes="1;4;7;11;19;22;26;32;35;39;45;47;54;56"/>
|
||||||
|
<henna symbolId="24" dyeId="4468" price="87000" INT="0" STR="0" CON="0" MEN="-2" DEX="0" WIT="1" classes="11;15;26;29;39;42;50"/>
|
||||||
|
<henna symbolId="25" dyeId="4469" price="149000" INT="0" STR="1" CON="-1" MEN="0" DEX="0" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="26" dyeId="4470" price="149000" INT="0" STR="1" CON="0" MEN="0" DEX="-1" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="27" dyeId="4471" price="149000" INT="0" STR="-1" CON="1" MEN="0" DEX="0" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="28" dyeId="4472" price="149000" INT="0" STR="0" CON="1" MEN="0" DEX="-1" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="29" dyeId="4473" price="149000" INT="0" STR="-1" CON="0" MEN="0" DEX="1" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="30" dyeId="4474" price="149000" INT="0" STR="0" CON="-1" MEN="0" DEX="1" WIT="0" classes="1;4;7;11;15;19;22;26;29;32;35;39;42;45;47;50;54;56"/>
|
||||||
|
<henna symbolId="31" dyeId="4475" price="149000" INT="1" STR="0" CON="0" MEN="-1" DEX="0" WIT="0" classes="11;26;39"/>
|
||||||
|
<henna symbolId="32" dyeId="4476" price="149000" INT="1" STR="0" CON="0" MEN="0" DEX="0" WIT="-1" classes="1;4;7;11;19;22;26;32;35;39;45;47;54;56"/>
|
||||||
|
<henna symbolId="33" dyeId="4477" price="149000" INT="-1" STR="0" CON="0" MEN="1" DEX="0" WIT="0" classes="11;26;39"/>
|
||||||
|
<henna symbolId="34" dyeId="4478" price="149000" INT="0" STR="0" CON="0" MEN="1" DEX="0" WIT="-1" classes="11;15;26;29;39;42;50"/>
|
||||||
|
<henna symbolId="35" dyeId="4479" price="149000" INT="-1" STR="0" CON="0" MEN="0" DEX="0" WIT="1" classes="1;4;7;11;19;22;26;32;35;39;45;47;54;56"/>
|
||||||
|
<henna symbolId="36" dyeId="4480" price="149000" INT="0" STR="0" CON="0" MEN="-1" DEX="0" WIT="1" classes="11;15;26;29;39;42;50"/>
|
||||||
|
<henna symbolId="37" dyeId="4481" price="87000" INT="0" STR="1" CON="-3" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="38" dyeId="4482" price="87000" INT="0" STR="1" CON="0" MEN="0" DEX="-3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="39" dyeId="4483" price="87000" INT="0" STR="-3" CON="1" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="40" dyeId="4484" price="87000" INT="0" STR="0" CON="1" MEN="0" DEX="-3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="41" dyeId="4485" price="87000" INT="0" STR="-3" CON="0" MEN="0" DEX="1" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="42" dyeId="4486" price="87000" INT="0" STR="0" CON="-3" MEN="0" DEX="1" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="43" dyeId="4487" price="87000" INT="1" STR="0" CON="0" MEN="-3" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="44" dyeId="4488" price="87000" INT="1" STR="0" CON="0" MEN="0" DEX="0" WIT="-3" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="45" dyeId="4489" price="87000" INT="-3" STR="0" CON="0" MEN="1" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="46" dyeId="4490" price="87000" INT="0" STR="0" CON="0" MEN="1" DEX="0" WIT="-3" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="47" dyeId="4491" price="87000" INT="-3" STR="0" CON="0" MEN="0" DEX="0" WIT="1" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="48" dyeId="4492" price="87000" INT="0" STR="0" CON="0" MEN="-3" DEX="0" WIT="1" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="49" dyeId="4493" price="149000" INT="0" STR="1" CON="-2" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="50" dyeId="4494" price="149000" INT="0" STR="1" CON="0" MEN="0" DEX="-2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="51" dyeId="4495" price="149000" INT="0" STR="-2" CON="1" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="52" dyeId="4496" price="149000" INT="0" STR="0" CON="1" MEN="0" DEX="-2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="53" dyeId="4497" price="149000" INT="0" STR="-2" CON="0" MEN="0" DEX="1" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="54" dyeId="4498" price="149000" INT="0" STR="0" CON="-2" MEN="0" DEX="1" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="55" dyeId="4499" price="149000" INT="1" STR="0" CON="0" MEN="-2" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="56" dyeId="4500" price="149000" INT="1" STR="0" CON="0" MEN="0" DEX="0" WIT="-2" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="57" dyeId="4501" price="149000" INT="-2" STR="0" CON="0" MEN="1" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="58" dyeId="4502" price="149000" INT="0" STR="0" CON="0" MEN="1" DEX="0" WIT="-2" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="59" dyeId="4503" price="149000" INT="-2" STR="0" CON="0" MEN="0" DEX="0" WIT="1" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="60" dyeId="4504" price="149000" INT="0" STR="0" CON="0" MEN="-2" DEX="0" WIT="1" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="61" dyeId="4505" price="176000" INT="0" STR="2" CON="-4" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="62" dyeId="4506" price="176000" INT="0" STR="2" CON="0" MEN="0" DEX="-4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="63" dyeId="4507" price="176000" INT="0" STR="-4" CON="2" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="64" dyeId="4508" price="176000" INT="0" STR="0" CON="2" MEN="0" DEX="-4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="65" dyeId="4509" price="176000" INT="0" STR="-4" CON="0" MEN="0" DEX="2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="66" dyeId="4510" price="176000" INT="0" STR="0" CON="-4" MEN="0" DEX="2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="67" dyeId="4511" price="176000" INT="2" STR="0" CON="0" MEN="-4" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="68" dyeId="4512" price="176000" INT="2" STR="0" CON="0" MEN="0" DEX="0" WIT="-4" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="69" dyeId="4513" price="176000" INT="-4" STR="0" CON="0" MEN="2" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="70" dyeId="4514" price="176000" INT="0" STR="0" CON="0" MEN="2" DEX="0" WIT="-4" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="71" dyeId="4515" price="176000" INT="-4" STR="0" CON="0" MEN="0" DEX="0" WIT="2" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="72" dyeId="4516" price="176000" INT="0" STR="0" CON="0" MEN="-4" DEX="0" WIT="2" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="73" dyeId="4517" price="190000" INT="0" STR="2" CON="-3" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="74" dyeId="4518" price="190000" INT="0" STR="2" CON="0" MEN="0" DEX="-3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="75" dyeId="4519" price="190000" INT="0" STR="-3" CON="2" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="76" dyeId="4520" price="190000" INT="0" STR="0" CON="2" MEN="0" DEX="-3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="77" dyeId="4521" price="190000" INT="0" STR="-3" CON="0" MEN="0" DEX="2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="78" dyeId="4522" price="190000" INT="0" STR="0" CON="-3" MEN="0" DEX="2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="79" dyeId="4523" price="190000" INT="2" STR="0" CON="0" MEN="-3" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="80" dyeId="4524" price="190000" INT="2" STR="0" CON="0" MEN="0" DEX="0" WIT="-3" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="81" dyeId="4525" price="190000" INT="-3" STR="0" CON="0" MEN="2" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="82" dyeId="4526" price="190000" INT="0" STR="0" CON="0" MEN="2" DEX="0" WIT="-3" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="83" dyeId="4527" price="190000" INT="-3" STR="0" CON="0" MEN="0" DEX="0" WIT="2" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="84" dyeId="4528" price="190000" INT="0" STR="0" CON="0" MEN="-3" DEX="0" WIT="2" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="85" dyeId="4529" price="206000" INT="0" STR="3" CON="-5" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="86" dyeId="4530" price="206000" INT="0" STR="3" CON="0" MEN="0" DEX="-5" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="87" dyeId="4531" price="206000" INT="0" STR="-5" CON="3" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="88" dyeId="4532" price="206000" INT="0" STR="0" CON="3" MEN="0" DEX="-5" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="89" dyeId="4533" price="206000" INT="0" STR="-5" CON="0" MEN="0" DEX="3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="90" dyeId="4534" price="206000" INT="0" STR="0" CON="-5" MEN="0" DEX="3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="91" dyeId="4535" price="206000" INT="3" STR="0" CON="0" MEN="-5" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="92" dyeId="4536" price="206000" INT="3" STR="0" CON="0" MEN="0" DEX="0" WIT="-5" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="93" dyeId="4537" price="206000" INT="-5" STR="0" CON="0" MEN="3" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="94" dyeId="4538" price="206000" INT="0" STR="0" CON="0" MEN="3" DEX="0" WIT="-5" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="95" dyeId="4539" price="206000" INT="-5" STR="0" CON="0" MEN="0" DEX="0" WIT="3" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="96" dyeId="4540" price="206000" INT="0" STR="0" CON="0" MEN="-5" DEX="0" WIT="3" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="97" dyeId="4541" price="206000" INT="0" STR="3" CON="-4" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="98" dyeId="4542" price="206000" INT="0" STR="3" CON="0" MEN="0" DEX="-4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="99" dyeId="4543" price="206000" INT="0" STR="-4" CON="3" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="100" dyeId="4544" price="206000" INT="0" STR="0" CON="3" MEN="0" DEX="-4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="101" dyeId="4545" price="206000" INT="0" STR="-4" CON="0" MEN="0" DEX="3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="102" dyeId="4546" price="206000" INT="0" STR="0" CON="-4" MEN="0" DEX="3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="103" dyeId="4547" price="206000" INT="3" STR="0" CON="0" MEN="-4" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="104" dyeId="4548" price="206000" INT="3" STR="0" CON="0" MEN="0" DEX="0" WIT="-4" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="105" dyeId="4549" price="206000" INT="-4" STR="0" CON="0" MEN="3" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="106" dyeId="4550" price="206000" INT="0" STR="0" CON="0" MEN="3" DEX="0" WIT="-4" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="107" dyeId="4551" price="206000" INT="-4" STR="0" CON="0" MEN="0" DEX="0" WIT="3" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="108" dyeId="4552" price="206000" INT="0" STR="0" CON="0" MEN="-4" DEX="0" WIT="3" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="109" dyeId="4553" price="206000" INT="0" STR="1" CON="-1" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="110" dyeId="4554" price="206000" INT="0" STR="1" CON="0" MEN="0" DEX="-1" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="111" dyeId="4555" price="206000" INT="0" STR="-1" CON="1" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="112" dyeId="4556" price="206000" INT="0" STR="0" CON="1" MEN="0" DEX="-1" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="113" dyeId="4557" price="206000" INT="0" STR="-1" CON="0" MEN="0" DEX="1" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="114" dyeId="4558" price="206000" INT="0" STR="0" CON="-1" MEN="0" DEX="1" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="115" dyeId="4559" price="206000" INT="1" STR="0" CON="0" MEN="-1" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="116" dyeId="4560" price="206000" INT="1" STR="0" CON="0" MEN="0" DEX="0" WIT="-1" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="117" dyeId="4561" price="206000" INT="-1" STR="0" CON="0" MEN="1" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="118" dyeId="4562" price="206000" INT="0" STR="0" CON="0" MEN="1" DEX="0" WIT="-1" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="119" dyeId="4563" price="206000" INT="-1" STR="0" CON="0" MEN="0" DEX="0" WIT="1" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="120" dyeId="4564" price="206000" INT="0" STR="0" CON="0" MEN="-1" DEX="0" WIT="1" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="121" dyeId="4565" price="258000" INT="0" STR="4" CON="-6" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="122" dyeId="4566" price="258000" INT="0" STR="4" CON="0" MEN="0" DEX="-6" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="123" dyeId="4567" price="258000" INT="0" STR="-6" CON="4" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="124" dyeId="4568" price="258000" INT="0" STR="0" CON="4" MEN="0" DEX="-6" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="125" dyeId="4569" price="258000" INT="0" STR="-6" CON="0" MEN="0" DEX="4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="126" dyeId="4570" price="258000" INT="0" STR="0" CON="-6" MEN="0" DEX="4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="127" dyeId="4571" price="258000" INT="4" STR="0" CON="0" MEN="-6" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="128" dyeId="4572" price="258000" INT="4" STR="0" CON="0" MEN="0" DEX="0" WIT="-6" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="129" dyeId="4573" price="258000" INT="-6" STR="0" CON="0" MEN="4" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="130" dyeId="4574" price="258000" INT="0" STR="0" CON="0" MEN="4" DEX="0" WIT="-6" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="131" dyeId="4575" price="258000" INT="-6" STR="0" CON="0" MEN="0" DEX="0" WIT="4" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="132" dyeId="4576" price="258000" INT="0" STR="0" CON="0" MEN="-6" DEX="0" WIT="4" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="133" dyeId="4577" price="258000" INT="0" STR="4" CON="-5" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="134" dyeId="4578" price="258000" INT="0" STR="4" CON="0" MEN="0" DEX="-5" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="135" dyeId="4579" price="258000" INT="0" STR="-5" CON="4" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="136" dyeId="4580" price="258000" INT="0" STR="0" CON="4" MEN="0" DEX="-5" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="137" dyeId="4581" price="258000" INT="0" STR="-5" CON="0" MEN="0" DEX="4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="138" dyeId="4582" price="258000" INT="0" STR="0" CON="-5" MEN="0" DEX="4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="139" dyeId="4583" price="258000" INT="4" STR="0" CON="0" MEN="-5" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="140" dyeId="4584" price="258000" INT="4" STR="0" CON="0" MEN="0" DEX="0" WIT="-5" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="141" dyeId="4585" price="258000" INT="-5" STR="0" CON="0" MEN="4" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="142" dyeId="4586" price="258000" INT="0" STR="0" CON="0" MEN="4" DEX="0" WIT="-5" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="143" dyeId="4587" price="258000" INT="-5" STR="0" CON="0" MEN="0" DEX="0" WIT="4" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="144" dyeId="4588" price="258000" INT="0" STR="0" CON="0" MEN="-5" DEX="0" WIT="4" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="145" dyeId="4589" price="258000" INT="0" STR="2" CON="-2" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="146" dyeId="4590" price="258000" INT="0" STR="2" CON="0" MEN="0" DEX="-2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="147" dyeId="4591" price="258000" INT="0" STR="-2" CON="2" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="148" dyeId="4592" price="258000" INT="0" STR="0" CON="2" MEN="0" DEX="-2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="149" dyeId="4593" price="258000" INT="0" STR="-2" CON="0" MEN="0" DEX="2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="150" dyeId="4594" price="258000" INT="0" STR="0" CON="-2" MEN="0" DEX="2" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="151" dyeId="4595" price="258000" INT="2" STR="0" CON="0" MEN="-2" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="152" dyeId="4596" price="258000" INT="2" STR="0" CON="0" MEN="0" DEX="0" WIT="-2" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="153" dyeId="4597" price="258000" INT="-2" STR="0" CON="0" MEN="2" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="154" dyeId="4598" price="258000" INT="0" STR="0" CON="0" MEN="2" DEX="0" WIT="-2" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="155" dyeId="4599" price="258000" INT="-2" STR="0" CON="0" MEN="0" DEX="0" WIT="2" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="156" dyeId="4600" price="258000" INT="0" STR="0" CON="0" MEN="-2" DEX="0" WIT="2" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="157" dyeId="4601" price="387000" INT="0" STR="3" CON="-3" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="158" dyeId="4602" price="387000" INT="0" STR="3" CON="0" MEN="0" DEX="-3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="159" dyeId="4603" price="387000" INT="0" STR="-3" CON="3" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="160" dyeId="4604" price="387000" INT="0" STR="0" CON="3" MEN="0" DEX="-3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="161" dyeId="4605" price="387000" INT="0" STR="-3" CON="0" MEN="0" DEX="3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="162" dyeId="4606" price="387000" INT="0" STR="0" CON="-3" MEN="0" DEX="3" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="163" dyeId="4607" price="387000" INT="3" STR="0" CON="0" MEN="-3" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="164" dyeId="4608" price="387000" INT="3" STR="0" CON="0" MEN="0" DEX="0" WIT="-3" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="165" dyeId="4609" price="387000" INT="-3" STR="0" CON="0" MEN="3" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="166" dyeId="4610" price="387000" INT="0" STR="0" CON="0" MEN="3" DEX="0" WIT="-3" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="167" dyeId="4611" price="387000" INT="-3" STR="0" CON="0" MEN="0" DEX="0" WIT="3" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="168" dyeId="4612" price="387000" INT="0" STR="0" CON="0" MEN="-3" DEX="0" WIT="3" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="169" dyeId="4613" price="628000" INT="0" STR="4" CON="-4" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="170" dyeId="4614" price="628000" INT="0" STR="4" CON="0" MEN="0" DEX="-4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="171" dyeId="4615" price="628000" INT="0" STR="-4" CON="4" MEN="0" DEX="0" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="172" dyeId="4616" price="628000" INT="0" STR="0" CON="4" MEN="0" DEX="-4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="173" dyeId="4617" price="628000" INT="0" STR="-4" CON="0" MEN="0" DEX="4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="174" dyeId="4618" price="628000" INT="0" STR="0" CON="-4" MEN="0" DEX="4" WIT="0" classes="2;3;5;6;8;9;12;13;14;16;17;20;21;23;24;27;28;30;33;34;36;37;40;41;43;46;48;51;52;55;57;88;89;90;91;92;93;94;95;96;97;98;99;100;101;102;103;104;105;106;107;108;109;110;111;112;113;114;115;116;117;118"/>
|
||||||
|
<henna symbolId="175" dyeId="4619" price="628000" INT="4" STR="0" CON="0" MEN="-4" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="176" dyeId="4620" price="628000" INT="4" STR="0" CON="0" MEN="0" DEX="0" WIT="-4" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="177" dyeId="4621" price="628000" INT="-4" STR="0" CON="0" MEN="4" DEX="0" WIT="0" classes="12;13;14;27;28;40;41;94;95;96;103;104;110;111"/>
|
||||||
|
<henna symbolId="178" dyeId="4622" price="628000" INT="0" STR="0" CON="0" MEN="4" DEX="0" WIT="-4" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
<henna symbolId="179" dyeId="4623" price="628000" INT="-4" STR="0" CON="0" MEN="0" DEX="0" WIT="4" classes="2;3;5;6;8;9;12;13;14;20;21;23;24;27;28;33;34;36;37;40;41;46;48;55;57;88;89;90;91;92;93;94;95;96;99;100;101;102;103;104;106;107;108;109;110;111;113;114;117;118"/>
|
||||||
|
<henna symbolId="180" dyeId="4624" price="628000" INT="0" STR="0" CON="0" MEN="-4" DEX="0" WIT="4" classes="12;13;14;16;17;27;28;30;40;41;43;51;52;94;95;96;97;98;103;104;105;110;111;112;115;116"/>
|
||||||
|
</list>
|
182
L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv
vendored
182
L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv
vendored
@@ -1,182 +0,0 @@
|
|||||||
# symbol_id;symbol_name;dye_id;dye_amount;price;stat_INT;stat_STR;stat_CON;stat_MEM;stat_DEX;stat_WIT;
|
|
||||||
|
|
||||||
1;symbol_s+1c-3_d;4445;10;5100;0;1;-3;0;0;0
|
|
||||||
2;symbol_s+1d-3_d;4446;10;5100;0;1;0;0;-3;0
|
|
||||||
3;symbol_c+1s-3_d;4447;10;5100;0;-3;1;0;0;0
|
|
||||||
4;symbol_c+1d-3_d;4448;10;5100;0;0;1;0;-3;0
|
|
||||||
5;symbol_d+1s-3_d;4449;10;5100;0;-3;0;0;1;0
|
|
||||||
6;symbol_d+1c-3_d;4450;10;5100;0;0;-3;0;1;0
|
|
||||||
7;symbol_i+1m-3_d;4451;10;5100;1;0;0;-3;0;0
|
|
||||||
8;symbol_i+1w-3_d;4452;10;5100;1;0;0;0;0;-3
|
|
||||||
9;symbol_m+1i-3_d;4453;10;5100;-3;0;0;1;0;0
|
|
||||||
10;symbol_m+1w-3_d;4454;10;5100;0;0;0;1;0;-3
|
|
||||||
11;symbol_w+1i-3_d;4455;10;5100;-3;0;0;0;0;1
|
|
||||||
12;symbol_w+1m-3_d;4456;10;5100;0;0;0;-3;0;1
|
|
||||||
13;symbol_s+1c-2_d;4457;10;12000;0;1;-2;0;0;0
|
|
||||||
14;symbol_s+1d-2_d;4458;10;12000;0;1;0;0;-2;0
|
|
||||||
15;symbol_c+1s-2_d;4459;10;12000;0;-2;1;0;0;0
|
|
||||||
16;symbol_c+1d-2_d;4460;10;12000;0;0;1;0;-2;0
|
|
||||||
17;symbol_d+1s-2_d;4461;10;12000;0;-2;0;0;1;0
|
|
||||||
18;symbol_d+1c-2_d;4462;10;12000;0;0;-2;0;1;0
|
|
||||||
19;symbol_i+1m-2_d;4463;10;12000;1;0;0;-2;0;0
|
|
||||||
20;symbol_i+1w-2_d;4464;10;12000;1;0;0;0;0;-2
|
|
||||||
21;symbol_m+1i-2_d;4465;10;12000;-2;0;0;1;0;0
|
|
||||||
22;symbol_m+1w-2_d;4466;10;12000;0;0;0;1;0;-2
|
|
||||||
23;symbol_w+1i-2_d;4467;10;12000;-2;0;0;0;0;1
|
|
||||||
24;symbol_w+1m-2_d;4468;10;12000;0;0;0;-2;0;1
|
|
||||||
25;symbol_s+1c-1_d;4469;10;35000;0;1;-1;0;0;0
|
|
||||||
26;symbol_s+1d-1_d;4470;10;35000;0;1;0;0;-1;0
|
|
||||||
27;symbol_c+1s-1_d;4471;10;35000;0;-1;1;0;0;0
|
|
||||||
28;symbol_c+1d-1_d;4472;10;35000;0;0;1;0;-1;0
|
|
||||||
29;symbol_d+1s-1_d;4473;10;35000;0;-1;0;0;1;0
|
|
||||||
30;symbol_d+1c-1_d;4474;10;35000;0;0;-1;0;1;0
|
|
||||||
31;symbol_i+1m-1_d;4475;10;35000;1;0;0;-1;0;0
|
|
||||||
32;symbol_i+1w-1_d;4476;10;35000;1;0;0;0;0;-1
|
|
||||||
33;symbol_m+1i-1_d;4477;10;35000;-1;0;0;1;0;0
|
|
||||||
34;symbol_m+1w-1_d;4478;10;35000;0;0;0;1;0;-1
|
|
||||||
35;symbol_w+1i-1_d;4479;10;35000;-1;0;0;0;0;1
|
|
||||||
36;symbol_w+1m-1_d;4480;10;35000;0;0;0;-1;0;1
|
|
||||||
37;symbol_s+1c-3_c;4481;10;12000;0;1;-3;0;0;0
|
|
||||||
38;symbol_s+1d-3_c;4482;10;24600;0;1;0;0;-3;0
|
|
||||||
39;symbol_c+1s-3_c;4483;10;24600;0;-3;1;0;0;0
|
|
||||||
40;symbol_c+1d-3_c;4484;10;24600;0;0;1;0;-3;0
|
|
||||||
41;symbol_d+1s-3_c;4485;10;30000;0;-3;0;0;1;0
|
|
||||||
42;symbol_d+1c-3_c;4486;10;30000;0;0;-3;0;1;0
|
|
||||||
43;symbol_i+1m-3_c;4487;10;30000;1;0;0;-3;0;0
|
|
||||||
44;symbol_i+1w-3_c;4488;10;30000;1;0;0;0;0;-3
|
|
||||||
45;symbol_m+1i-3_c;4489;10;30000;-3;0;0;1;0;0
|
|
||||||
46;symbol_m+1w-3_c;4490;10;12000;0;0;0;1;0;-3
|
|
||||||
47;symbol_w+1i-3_c;4491;10;30000;-3;0;0;0;0;1
|
|
||||||
48;symbol_w+1m-3_c;4492;10;12000;0;0;0;-3;0;1
|
|
||||||
49;symbol_s+1c-2_c;4493;10;24600;0;1;-2;0;0;0
|
|
||||||
50;symbol_s+1d-2_c;4494;10;30000;0;1;0;0;-2;0
|
|
||||||
51;symbol_c+1s-2_c;4495;10;35000;0;-2;1;0;0;0
|
|
||||||
52;symbol_c+1d-2_c;4496;10;35000;0;0;1;0;-2;0
|
|
||||||
53;symbol_d+1s-2_c;4497;10;36000;0;-2;0;0;1;0
|
|
||||||
54;symbol_d+1c-2_c;4498;10;36000;0;0;-2;0;1;0
|
|
||||||
55;symbol_i+1m-2_c;4499;10;50000;1;0;0;-2;0;0
|
|
||||||
56;symbol_i+1w-2_c;4500;10;36000;1;0;0;0;0;-2
|
|
||||||
57;symbol_m+1i-2_c;4501;10;36000;-2;0;0;1;0;0
|
|
||||||
58;symbol_m+1w-2_c;4502;10;21000;0;0;0;1;0;-2
|
|
||||||
59;symbol_w+1i-2_c;4503;10;30000;-2;0;0;0;0;1
|
|
||||||
60;symbol_w+1m-2_c;4504;10;36000;0;0;0;-2;0;1
|
|
||||||
61;symbol_s+2c-4_c;4505;10;24600;0;2;-4;0;0;0
|
|
||||||
62;symbol_s+2d-4_c;4506;10;24600;0;2;0;0;-4;0
|
|
||||||
63;symbol_c+2s-4_c;4507;10;24600;0;-4;2;0;0;0
|
|
||||||
64;symbol_c+2d-4_c;4508;10;24600;0;0;2;0;-4;0
|
|
||||||
65;symbol_d+2s-4_c;4509;10;24600;0;-4;0;0;2;0
|
|
||||||
66;symbol_d+2c-4_c;4510;10;24600;0;0;-4;0;2;0
|
|
||||||
67;symbol_i+2m-4_c;4511;10;24600;2;0;0;-4;0;0
|
|
||||||
68;symbol_i+2w-4_c;4512;10;24600;2;0;0;0;0;-4
|
|
||||||
69;symbol_m+2i-4_c;4513;10;24600;-4;0;0;2;0;0
|
|
||||||
70;symbol_m+2w-4_c;4514;10;30000;0;0;0;2;0;-4
|
|
||||||
71;symbol_w+2i-4_c;4515;10;30000;-4;0;0;0;0;2
|
|
||||||
72;symbol_w+2m-4_c;4516;10;30000;0;0;0;-4;0;2
|
|
||||||
73;symbol_s+2c-3_c;4517;10;30000;0;2;-3;0;0;0
|
|
||||||
74;symbol_s+2d-3_c;4518;10;35000;0;2;0;0;-3;0
|
|
||||||
75;symbol_c+2s-3_c;4519;10;35000;0;-3;2;0;0;0
|
|
||||||
76;symbol_c+2d-3_c;4520;10;35000;0;0;2;0;-3;0
|
|
||||||
77;symbol_d+2s-3_c;4521;10;27000;0;-3;0;0;2;0
|
|
||||||
78;symbol_d+2c-3_c;4522;10;27000;0;0;-3;0;2;0
|
|
||||||
79;symbol_i+2m-3_c;4523;10;27000;2;0;0;-3;0;0
|
|
||||||
80;symbol_i+2w-3_c;4524;10;30000;2;0;0;0;0;-3
|
|
||||||
81;symbol_m+2i-3_c;4525;10;30000;-3;0;0;2;0;0
|
|
||||||
82;symbol_m+2w-3_c;4526;10;30000;0;0;0;2;0;-3
|
|
||||||
83;symbol_w+2i-3_c;4527;10;30000;-3;0;0;0;0;2
|
|
||||||
84;symbol_w+2m-3_c;4528;10;30000;0;0;0;-3;0;2
|
|
||||||
85;symbol_s+3c-5_c;4529;10;30000;0;3;-5;0;0;0
|
|
||||||
86;symbol_s+3d-5_c;4530;10;30000;0;3;0;0;-5;0
|
|
||||||
87;symbol_c+3s-5_c;4531;10;30000;0;-5;3;0;0;0
|
|
||||||
88;symbol_c+3d-5_c;4532;10;30000;0;0;3;0;-5;0
|
|
||||||
89;symbol_d+3s-5_c;4533;10;30000;0;-5;0;0;3;0
|
|
||||||
90;symbol_d+3c-5_c;4534;10;30000;0;0;-5;0;3;0
|
|
||||||
91;symbol_i+3m-5_c;4535;10;30000;3;0;0;-5;0;0
|
|
||||||
92;symbol_i+3w-5_c;4536;10;30000;3;0;0;0;0;-5
|
|
||||||
93;symbol_m+3i-5_c;4537;10;30000;-5;0;0;3;0;0
|
|
||||||
94;symbol_m+3w-5_c;4538;10;30000;0;0;0;3;0;-5
|
|
||||||
95;symbol_w+3i-5_c;4539;10;30000;-5;0;0;0;0;3
|
|
||||||
96;symbol_w+3m-5_c;4540;10;30000;0;0;0;-5;0;3
|
|
||||||
97;symbol_s+3c-4_c;4541;10;30000;0;3;-4;0;0;0
|
|
||||||
98;symbol_s+3d-4_c;4542;10;30000;0;3;0;0;-4;0
|
|
||||||
99;symbol_c+3s-4_c;4543;10;50000;0;-4;3;0;0;0
|
|
||||||
100;symbol_c+3d-4_c;4544;10;50000;0;0;3;0;-4;0
|
|
||||||
101;symbol_d+3s-4_c;4545;10;50000;0;-4;0;0;3;0
|
|
||||||
102;symbol_d+3c-4_c;4546;10;50000;0;0;-4;0;3;0
|
|
||||||
103;symbol_i+3m-4_c;4547;10;50000;3;0;0;-4;0;0
|
|
||||||
104;symbol_i+3w-4_c;4548;10;50000;3;0;0;0;0;-4
|
|
||||||
105;symbol_m+3i-4_c;4549;10;50000;-4;0;0;3;0;0
|
|
||||||
106;symbol_m+3w-4_c;4550;10;50000;0;0;0;3;0;-4
|
|
||||||
107;symbol_w+3i-4_c;4551;10;50000;-4;0;0;0;0;3
|
|
||||||
108;symbol_w+3m-4_c;4552;10;50000;0;0;0;-4;0;3
|
|
||||||
109;symbol_s+4c-6_c;4565;10;36000;0;4;-6;0;0;0
|
|
||||||
110;symbol_s+4d-6_c;4566;10;36000;0;4;0;0;-6;0
|
|
||||||
111;symbol_c+4s-6_c;4567;10;50000;0;-6;4;0;0;0
|
|
||||||
112;symbol_c+4d-6_c;4568;10;50000;0;0;4;0;-6;0
|
|
||||||
113;symbol_d+4s-6_c;4569;10;30000;0;-6;0;0;4;0
|
|
||||||
114;symbol_d+4c-6_c;4570;10;36000;0;0;-6;0;4;0
|
|
||||||
115;symbol_i+4m-6_c;4571;10;36000;4;0;0;-6;0;0
|
|
||||||
116;symbol_i+4w-6_c;4572;10;30000;4;0;0;0;0;-6
|
|
||||||
117;symbol_m+4i-6_c;4573;10;36000;-6;0;0;4;0;0
|
|
||||||
118;symbol_m+4w-6_c;4574;10;36000;0;0;0;4;0;-6
|
|
||||||
119;symbol_w+4i-6_c;4575;10;36000;-6;0;0;0;0;4
|
|
||||||
120;symbol_w+4m-6_c;4576;10;30000;0;0;0;-6;0;4
|
|
||||||
121;symbol_s+4c-5_c;4577;10;36000;0;4;-5;0;0;0
|
|
||||||
122;symbol_s+4d-5_c;4578;10;90000;0;4;0;0;-5;0
|
|
||||||
123;symbol_c+4s-5_c;4579;10;90000;0;-5;4;0;0;0
|
|
||||||
124;symbol_c+4d-5_c;4580;10;90000;0;0;4;0;-5;0
|
|
||||||
125;symbol_d+4s-5_c;4581;10;36000;0;-5;0;0;4;0
|
|
||||||
126;symbol_d+4c-5_c;4582;10;36000;0;0;-5;0;4;0
|
|
||||||
127;symbol_i+4m-5_c;4583;10;90000;4;0;0;-5;0;0
|
|
||||||
128;symbol_i+4w-5_c;4584;10;36000;4;0;0;0;0;-5
|
|
||||||
129;symbol_m+4i-5_c;4585;10;90000;-5;0;0;4;0;0
|
|
||||||
130;symbol_m+4w-5_c;4586;10;90000;0;0;0;4;0;-5
|
|
||||||
131;symbol_w+4i-5_c;4587;10;36000;-5;0;0;0;0;4
|
|
||||||
132;symbol_w+4m-5_c;4588;10;36000;0;0;0;-5;0;4
|
|
||||||
133;symbol_s+1c-1_c;4553;10;50000;0;1;-1;0;0;0
|
|
||||||
134;symbol_s+1d-1_c;4554;10;50000;0;1;0;0;-1;0
|
|
||||||
135;symbol_c+1s-1_c;4555;10;50000;0;-1;1;0;0;0
|
|
||||||
136;symbol_c+1d-1_c;4556;10;50000;0;0;1;0;-1;0
|
|
||||||
137;symbol_d+1s-1_c;4557;10;50000;0;-1;0;0;1;0
|
|
||||||
138;symbol_d+1c-1_c;4558;10;50000;0;0;-1;0;1;0
|
|
||||||
139;symbol_i+1m-1_c;4559;10;90000;1;0;0;-1;0;0
|
|
||||||
140;symbol_i+1w-1_c;4560;10;50000;1;0;0;0;0;-1
|
|
||||||
141;symbol_m+1i-1_c;4561;10;50000;-1;0;0;1;0;0
|
|
||||||
142;symbol_m+1w-1_c;4562;10;50000;0;0;0;1;0;-1
|
|
||||||
143;symbol_w+1i-1_c;4563;10;50000;-1;0;0;0;0;1
|
|
||||||
144;symbol_w+1m-1_c;4564;10;50000;0;0;0;-1;0;1
|
|
||||||
145;symbol_s+2c-2_c;4589;10;60000;0;2;-2;0;0;0
|
|
||||||
146;symbol_s+2d-2_c;4590;10;60000;0;2;0;0;-2;0
|
|
||||||
147;symbol_c+2s-2_c;4591;10;60000;0;-2;2;0;0;0
|
|
||||||
148;symbol_c+2d-2_c;4592;10;60000;0;0;2;0;-2;0
|
|
||||||
149;symbol_d+2s-2_c;4593;10;60000;0;-2;0;0;2;0
|
|
||||||
150;symbol_d+2c-2_c;4594;10;60000;0;0;-2;0;2;0
|
|
||||||
151;symbol_i+2m-2_c;4595;10;60000;2;0;0;-2;0;0
|
|
||||||
152;symbol_i+2w-2_c;4596;10;90000;2;0;0;0;0;-2
|
|
||||||
153;symbol_m+2i-2_c;4597;10;60000;-2;0;0;2;0;0
|
|
||||||
154;symbol_m+2w-2_c;4598;10;60000;0;0;0;2;0;-2
|
|
||||||
155;symbol_w+2i-2_c;4599;10;60000;-2;0;0;0;0;2
|
|
||||||
156;symbol_w+2m-2_c;4600;10;60000;0;0;0;-2;0;2
|
|
||||||
157;symbol_s+3c-3_c;4601;10;90000;0;3;-3;0;0;0
|
|
||||||
158;symbol_s+3d-3_c;4602;10;90000;0;3;0;0;-3;0
|
|
||||||
159;symbol_c+3s-3_c;4603;10;90000;0;-3;3;0;0;0
|
|
||||||
160;symbol_c+3d-3_c;4604;10;90000;0;0;3;0;-3;0
|
|
||||||
161;symbol_d+3s-3_c;4605;10;90000;0;-3;0;0;3;0
|
|
||||||
162;symbol_d+3c-3_c;4606;10;90000;0;0;-3;0;3;0
|
|
||||||
163;symbol_i+3m-3_c;4607;10;90000;3;0;0;-3;0;0
|
|
||||||
164;symbol_i+3w-3_c;4608;10;90000;3;0;0;0;0;-3
|
|
||||||
165;symbol_m+3i-3_c;4609;10;90000;-3;0;0;3;0;0
|
|
||||||
166;symbol_m+3w-3_c;4610;10;90000;0;0;0;3;0;-3
|
|
||||||
167;symbol_w+3i-3_c;4611;10;90000;-3;0;0;0;0;3
|
|
||||||
168;symbol_w+3m-3_c;4612;10;90000;0;0;0;-3;0;3
|
|
||||||
169;symbol_s+4c-4_c;4613;10;145000;0;4;-4;0;0;0
|
|
||||||
170;symbol_s+4d-4_c;4614;10;145000;0;4;0;0;-4;0
|
|
||||||
171;symbol_c+4s-4_c;4615;10;145000;0;-4;4;0;0;0
|
|
||||||
172;symbol_c+4d-4_c;4616;10;145000;0;0;4;0;-4;0
|
|
||||||
173;symbol_d+4s-4_c;4617;10;145000;0;-4;0;0;4;0
|
|
||||||
174;symbol_d+4c-4_c;4618;10;145000;0;0;-4;0;4;0
|
|
||||||
175;symbol_i+4m-4_c;4619;10;145000;4;0;0;-4;0;0
|
|
||||||
176;symbol_i+4w-4_c;4620;10;145000;4;0;0;0;0;-4
|
|
||||||
177;symbol_m+4i-4_c;4621;10;145000;-4;0;0;4;0;0
|
|
||||||
178;symbol_m+4w-4_c;4622;10;145000;0;0;0;4;0;-4
|
|
||||||
179;symbol_w+4i-4_c;4623;10;145000;-4;0;0;0;0;4
|
|
||||||
180;symbol_w+4m-4_c;4624;10;145000;0;0;0;-4;0;4
|
|
|
26
L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd
vendored
Normal file
26
L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd
vendored
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<xs:element name="list">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="henna" maxOccurs="unbounded" minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute type="xs:short" name="symbolId" use="required"/>
|
||||||
|
<xs:attribute type="xs:short" name="dyeId" use="required"/>
|
||||||
|
<xs:attribute type="xs:int" name="price" use="required"/>
|
||||||
|
<xs:attribute type="xs:byte" name="INT" use="required"/>
|
||||||
|
<xs:attribute type="xs:byte" name="STR" use="required"/>
|
||||||
|
<xs:attribute type="xs:byte" name="CON" use="required"/>
|
||||||
|
<xs:attribute type="xs:byte" name="MEN" use="required"/>
|
||||||
|
<xs:attribute type="xs:byte" name="DEX" use="required"/>
|
||||||
|
<xs:attribute type="xs:byte" name="WIT" use="required"/>
|
||||||
|
<xs:attribute type="xs:string" name="classes" use="required"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
@@ -172,4 +172,57 @@ public class Util
|
|||||||
}
|
}
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param <T>
|
||||||
|
* @param array - the array to look into
|
||||||
|
* @param obj - the object to search for
|
||||||
|
* @return {@code true} if the {@code array} contains the {@code obj}, {@code false} otherwise.
|
||||||
|
*/
|
||||||
|
public static <T> boolean contains(T[] array, T obj)
|
||||||
|
{
|
||||||
|
for (T element : array)
|
||||||
|
{
|
||||||
|
if (element.equals(obj))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array - the array to look into
|
||||||
|
* @param obj - the integer to search for
|
||||||
|
* @return {@code true} if the {@code array} contains the {@code obj}, {@code false} otherwise
|
||||||
|
*/
|
||||||
|
public static boolean contains(int[] array, int obj)
|
||||||
|
{
|
||||||
|
for (int element : array)
|
||||||
|
{
|
||||||
|
if (element == obj)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array - the array to look into
|
||||||
|
* @param obj - the object to search for
|
||||||
|
* @param ignoreCase
|
||||||
|
* @return {@code true} if the {@code array} contains the {@code obj}, {@code false} otherwise.
|
||||||
|
*/
|
||||||
|
public static boolean contains(String[] array, String obj, boolean ignoreCase)
|
||||||
|
{
|
||||||
|
for (String element : array)
|
||||||
|
{
|
||||||
|
if (element.equals(obj) || (ignoreCase && element.equalsIgnoreCase(obj)))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -48,7 +48,6 @@ import org.l2jmobius.gameserver.datatables.OfflineTradeTable;
|
|||||||
import org.l2jmobius.gameserver.datatables.SchemeBufferTable;
|
import org.l2jmobius.gameserver.datatables.SchemeBufferTable;
|
||||||
import org.l2jmobius.gameserver.datatables.SkillTable;
|
import org.l2jmobius.gameserver.datatables.SkillTable;
|
||||||
import org.l2jmobius.gameserver.datatables.csv.ExtractableItemsData;
|
import org.l2jmobius.gameserver.datatables.csv.ExtractableItemsData;
|
||||||
import org.l2jmobius.gameserver.datatables.csv.HennaTable;
|
|
||||||
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
|
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
|
||||||
import org.l2jmobius.gameserver.datatables.csv.NpcWalkerRoutesTable;
|
import org.l2jmobius.gameserver.datatables.csv.NpcWalkerRoutesTable;
|
||||||
import org.l2jmobius.gameserver.datatables.csv.RecipeTable;
|
import org.l2jmobius.gameserver.datatables.csv.RecipeTable;
|
||||||
@@ -60,7 +59,6 @@ import org.l2jmobius.gameserver.datatables.sql.CharTemplateTable;
|
|||||||
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
|
import org.l2jmobius.gameserver.datatables.sql.ClanTable;
|
||||||
import org.l2jmobius.gameserver.datatables.sql.CustomArmorSetsTable;
|
import org.l2jmobius.gameserver.datatables.sql.CustomArmorSetsTable;
|
||||||
import org.l2jmobius.gameserver.datatables.sql.HelperBuffTable;
|
import org.l2jmobius.gameserver.datatables.sql.HelperBuffTable;
|
||||||
import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
|
|
||||||
import org.l2jmobius.gameserver.datatables.sql.LevelUpData;
|
import org.l2jmobius.gameserver.datatables.sql.LevelUpData;
|
||||||
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
|
import org.l2jmobius.gameserver.datatables.sql.NpcTable;
|
||||||
import org.l2jmobius.gameserver.datatables.sql.PetDataTable;
|
import org.l2jmobius.gameserver.datatables.sql.PetDataTable;
|
||||||
@@ -74,6 +72,7 @@ import org.l2jmobius.gameserver.datatables.xml.DoorData;
|
|||||||
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
|
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
|
||||||
import org.l2jmobius.gameserver.datatables.xml.FenceData;
|
import org.l2jmobius.gameserver.datatables.xml.FenceData;
|
||||||
import org.l2jmobius.gameserver.datatables.xml.FishData;
|
import org.l2jmobius.gameserver.datatables.xml.FishData;
|
||||||
|
import org.l2jmobius.gameserver.datatables.xml.HennaData;
|
||||||
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
import org.l2jmobius.gameserver.datatables.xml.ZoneData;
|
||||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||||
import org.l2jmobius.gameserver.handler.AdminCommandHandler;
|
import org.l2jmobius.gameserver.handler.AdminCommandHandler;
|
||||||
@@ -274,15 +273,7 @@ public class GameServer
|
|||||||
ClanTable.getInstance();
|
ClanTable.getInstance();
|
||||||
CharTemplateTable.getInstance();
|
CharTemplateTable.getInstance();
|
||||||
LevelUpData.getInstance();
|
LevelUpData.getInstance();
|
||||||
if (!HennaTable.getInstance().isInitialized())
|
HennaData.getInstance();
|
||||||
{
|
|
||||||
throw new Exception("Could not initialize the Henna Table");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!HennaTreeTable.getInstance().isInitialized())
|
|
||||||
{
|
|
||||||
throw new Exception("Could not initialize the Henna Tree Table");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!HelperBuffTable.getInstance().isInitialized())
|
if (!HelperBuffTable.getInstance().isInitialized())
|
||||||
{
|
{
|
||||||
|
@@ -1,160 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.l2jmobius.gameserver.datatables.csv;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.LineNumberReader;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.StringTokenizer;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
|
||||||
import org.l2jmobius.gameserver.model.StatsSet;
|
|
||||||
import org.l2jmobius.gameserver.model.items.Henna;
|
|
||||||
|
|
||||||
public class HennaTable
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(HennaTable.class.getName());
|
|
||||||
|
|
||||||
private final Map<Integer, Henna> _henna;
|
|
||||||
private final boolean _initialized = true;
|
|
||||||
|
|
||||||
private HennaTable()
|
|
||||||
{
|
|
||||||
_henna = new HashMap<>();
|
|
||||||
restoreHennaData();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void restoreHennaData()
|
|
||||||
{
|
|
||||||
FileReader reader = null;
|
|
||||||
BufferedReader buff = null;
|
|
||||||
LineNumberReader lnr = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final File fileData = new File(Config.DATAPACK_ROOT + "/data/csv/henna.csv");
|
|
||||||
|
|
||||||
reader = new FileReader(fileData);
|
|
||||||
buff = new BufferedReader(reader);
|
|
||||||
lnr = new LineNumberReader(buff);
|
|
||||||
|
|
||||||
String line = null;
|
|
||||||
|
|
||||||
while ((line = lnr.readLine()) != null)
|
|
||||||
{
|
|
||||||
// ignore comments
|
|
||||||
if ((line.trim().length() == 0) || line.startsWith("#"))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final StringTokenizer st = new StringTokenizer(line, ";");
|
|
||||||
|
|
||||||
final StatsSet hennaDat = new StatsSet();
|
|
||||||
final int id = Integer.parseInt(st.nextToken());
|
|
||||||
hennaDat.set("symbol_id", id);
|
|
||||||
st.nextToken(); // next token...ignore name
|
|
||||||
hennaDat.set("dye", Integer.parseInt(st.nextToken()));
|
|
||||||
hennaDat.set("amount", Integer.parseInt(st.nextToken()));
|
|
||||||
hennaDat.set("price", Integer.parseInt(st.nextToken()));
|
|
||||||
hennaDat.set("stat_INT", Integer.parseInt(st.nextToken()));
|
|
||||||
hennaDat.set("stat_STR", Integer.parseInt(st.nextToken()));
|
|
||||||
hennaDat.set("stat_CON", Integer.parseInt(st.nextToken()));
|
|
||||||
hennaDat.set("stat_MEM", Integer.parseInt(st.nextToken()));
|
|
||||||
hennaDat.set("stat_DEX", Integer.parseInt(st.nextToken()));
|
|
||||||
hennaDat.set("stat_WIT", Integer.parseInt(st.nextToken()));
|
|
||||||
|
|
||||||
final Henna template = new Henna(hennaDat);
|
|
||||||
_henna.put(id, template);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOGGER.info("HennaTable: Loaded " + _henna.size() + " Templates.");
|
|
||||||
}
|
|
||||||
catch (FileNotFoundException e)
|
|
||||||
{
|
|
||||||
LOGGER.warning(Config.DATAPACK_ROOT + "/data/csv/henna.csv is missing in data folder");
|
|
||||||
}
|
|
||||||
catch (IOException e0)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Error while creating table: " + e0.getMessage() + "\n" + e0);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (lnr != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
lnr.close();
|
|
||||||
}
|
|
||||||
catch (Exception e1)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Problem with HennaTable: " + e1.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (buff != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
buff.close();
|
|
||||||
}
|
|
||||||
catch (Exception e1)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Problem with HennaTable: " + e1.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (reader != null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
reader.close();
|
|
||||||
}
|
|
||||||
catch (Exception e1)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Problem with HennaTable: " + e1.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isInitialized()
|
|
||||||
{
|
|
||||||
return _initialized;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Henna getTemplate(int id)
|
|
||||||
{
|
|
||||||
return _henna.get(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HennaTable getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final HennaTable INSTANCE = new HennaTable();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,136 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.l2jmobius.gameserver.datatables.sql;
|
|
||||||
|
|
||||||
import java.sql.Connection;
|
|
||||||
import java.sql.PreparedStatement;
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
import org.l2jmobius.commons.database.DatabaseFactory;
|
|
||||||
import org.l2jmobius.gameserver.datatables.csv.HennaTable;
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
|
|
||||||
import org.l2jmobius.gameserver.model.base.ClassId;
|
|
||||||
import org.l2jmobius.gameserver.model.items.Henna;
|
|
||||||
|
|
||||||
public class HennaTreeTable
|
|
||||||
{
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(HennaTreeTable.class.getName());
|
|
||||||
|
|
||||||
private final Map<ClassId, List<HennaInstance>> _hennaTrees;
|
|
||||||
private final boolean _initialized = true;
|
|
||||||
|
|
||||||
private HennaTreeTable()
|
|
||||||
{
|
|
||||||
_hennaTrees = new EnumMap<>(ClassId.class);
|
|
||||||
int classId = 0;
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
try (Connection con = DatabaseFactory.getConnection())
|
|
||||||
{
|
|
||||||
final PreparedStatement statement = con.prepareStatement("SELECT class_name, id, parent_id FROM class_list ORDER BY id");
|
|
||||||
final ResultSet classlist = statement.executeQuery();
|
|
||||||
List<HennaInstance> list;
|
|
||||||
|
|
||||||
CLASSLIST: while (classlist.next())
|
|
||||||
{
|
|
||||||
list = new ArrayList<>();
|
|
||||||
classId = classlist.getInt("id");
|
|
||||||
final PreparedStatement statement2 = con.prepareStatement("SELECT class_id, symbol_id FROM henna_trees where class_id=? ORDER BY symbol_id");
|
|
||||||
statement2.setInt(1, classId);
|
|
||||||
final ResultSet hennatree = statement2.executeQuery();
|
|
||||||
|
|
||||||
while (hennatree.next())
|
|
||||||
{
|
|
||||||
final int id = hennatree.getInt("symbol_id");
|
|
||||||
// String name = hennatree.getString("name");
|
|
||||||
final Henna template = HennaTable.getInstance().getTemplate(id);
|
|
||||||
|
|
||||||
if (template == null)
|
|
||||||
{
|
|
||||||
hennatree.close();
|
|
||||||
statement2.close();
|
|
||||||
classlist.close();
|
|
||||||
statement.close();
|
|
||||||
continue CLASSLIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
final HennaInstance temp = new HennaInstance(template);
|
|
||||||
temp.setSymbolId(id);
|
|
||||||
temp.setItemIdDye(template.getDyeId());
|
|
||||||
temp.setAmountDyeRequire(template.getAmountDyeRequire());
|
|
||||||
temp.setPrice(template.getPrice());
|
|
||||||
temp.setStatINT(template.getStatINT());
|
|
||||||
temp.setStatSTR(template.getStatSTR());
|
|
||||||
temp.setStatCON(template.getStatCON());
|
|
||||||
temp.setStatMEM(template.getStatMEM());
|
|
||||||
temp.setStatDEX(template.getStatDEX());
|
|
||||||
temp.setStatWIT(template.getStatWIT());
|
|
||||||
|
|
||||||
list.add(temp);
|
|
||||||
}
|
|
||||||
_hennaTrees.put(ClassId.getClassId(classId), list);
|
|
||||||
|
|
||||||
hennatree.close();
|
|
||||||
statement2.close();
|
|
||||||
|
|
||||||
count += list.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
classlist.close();
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.warning("Error while creating henna tree for classId " + classId + " " + e);
|
|
||||||
}
|
|
||||||
|
|
||||||
LOGGER.info("HennaTreeTable: Loaded " + count + " Henna Tree Templates.");
|
|
||||||
}
|
|
||||||
|
|
||||||
public HennaInstance[] getAvailableHenna(ClassId classId)
|
|
||||||
{
|
|
||||||
final List<HennaInstance> henna = _hennaTrees.get(classId);
|
|
||||||
if (henna == null)
|
|
||||||
{
|
|
||||||
// the hennatree for this class is undefined, so we give an empty list
|
|
||||||
LOGGER.warning("Hennatree for class " + classId + " is not defined!");
|
|
||||||
return new HennaInstance[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
return henna.toArray(new HennaInstance[henna.size()]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isInitialized()
|
|
||||||
{
|
|
||||||
return _initialized;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HennaTreeTable getInstance()
|
|
||||||
{
|
|
||||||
return SingletonHolder.INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SingletonHolder
|
|
||||||
{
|
|
||||||
protected static final HennaTreeTable INSTANCE = new HennaTreeTable();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -52,7 +52,7 @@ public class FishData implements IXmlReader
|
|||||||
@Override
|
@Override
|
||||||
public void parseDocument(Document doc, File f)
|
public void parseDocument(Document doc, File f)
|
||||||
{
|
{
|
||||||
// StatsSet used to feed informations.
|
// StatsSet used to feed informations. Cleaned on every entry.
|
||||||
final StatsSet set = new StatsSet();
|
final StatsSet set = new StatsSet();
|
||||||
|
|
||||||
// First element is never read.
|
// First element is never read.
|
||||||
|
@@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.l2jmobius.gameserver.datatables.xml;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.NamedNodeMap;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
|
import org.l2jmobius.commons.util.IXmlReader;
|
||||||
|
import org.l2jmobius.gameserver.model.StatsSet;
|
||||||
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class loads and stores {@link Henna}s infos. Hennas are called "dye" ingame.
|
||||||
|
*/
|
||||||
|
public class HennaData implements IXmlReader
|
||||||
|
{
|
||||||
|
private final Map<Integer, Henna> _hennas = new HashMap<>();
|
||||||
|
|
||||||
|
protected HennaData()
|
||||||
|
{
|
||||||
|
load();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void load()
|
||||||
|
{
|
||||||
|
_hennas.clear();
|
||||||
|
parseDatapackFile("data/Hennas.xml");
|
||||||
|
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _hennas.size() + " hennas.");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void parseDocument(Document doc, File f)
|
||||||
|
{
|
||||||
|
// StatsSet used to feed informations. Cleaned on every entry.
|
||||||
|
final StatsSet set = new StatsSet();
|
||||||
|
|
||||||
|
// First element is never read.
|
||||||
|
final Node n = doc.getFirstChild();
|
||||||
|
|
||||||
|
for (Node node = n.getFirstChild(); node != null; node = node.getNextSibling())
|
||||||
|
{
|
||||||
|
if (!"henna".equalsIgnoreCase(node.getNodeName()))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse and feed content.
|
||||||
|
final NamedNodeMap attrs = node.getAttributes();
|
||||||
|
for (int i = 0; i < attrs.getLength(); i++)
|
||||||
|
{
|
||||||
|
final Node attr = attrs.item(i);
|
||||||
|
set.set(attr.getNodeName(), attr.getNodeValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Feed the map with new data.
|
||||||
|
_hennas.put(set.getInt("symbolId"), new Henna(set));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Henna getHenna(int id)
|
||||||
|
{
|
||||||
|
return _hennas.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve all {@link Henna}s available for a {@link PlayerInstance} class.
|
||||||
|
* @param player : The Player used as class parameter.
|
||||||
|
* @return a List of all available Hennas for this Player.
|
||||||
|
*/
|
||||||
|
public List<Henna> getAvailableHennasFor(PlayerInstance player)
|
||||||
|
{
|
||||||
|
return _hennas.values().stream().filter(h -> h.canBeUsedBy(player)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HennaData getInstance()
|
||||||
|
{
|
||||||
|
return SingletonHolder.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class SingletonHolder
|
||||||
|
{
|
||||||
|
protected static final HennaData INSTANCE = new HennaData();
|
||||||
|
}
|
||||||
|
}
|
@@ -1,214 +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 <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package org.l2jmobius.gameserver.model.actor.instance;
|
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.model.items.Henna;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This class represents a Non-Player-Creature in the world. it can be a monster or a friendly creature. it also uses a template to fetch some static values. the templates are hardcoded in the client, so we can rely on them.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class HennaInstance
|
|
||||||
{
|
|
||||||
private final Henna _template;
|
|
||||||
private int _symbolId;
|
|
||||||
private int _itemIdDye;
|
|
||||||
private int _price;
|
|
||||||
private int _statINT;
|
|
||||||
private int _statSTR;
|
|
||||||
private int _statCON;
|
|
||||||
private int _statMEM;
|
|
||||||
private int _statDEX;
|
|
||||||
private int _statWIT;
|
|
||||||
private int _amountDyeRequire;
|
|
||||||
|
|
||||||
public HennaInstance(Henna template)
|
|
||||||
{
|
|
||||||
_template = template;
|
|
||||||
_symbolId = _template.symbolId;
|
|
||||||
_itemIdDye = _template.dye;
|
|
||||||
_amountDyeRequire = _template.amount;
|
|
||||||
_price = _template.price;
|
|
||||||
_statINT = _template.statINT;
|
|
||||||
_statSTR = _template.statSTR;
|
|
||||||
_statCON = _template.statCON;
|
|
||||||
_statMEM = _template.statMEM;
|
|
||||||
_statDEX = _template.statDEX;
|
|
||||||
_statWIT = _template.statWIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName()
|
|
||||||
{
|
|
||||||
String res = "";
|
|
||||||
if (_statINT > 0)
|
|
||||||
{
|
|
||||||
res = res + "INT +" + _statINT;
|
|
||||||
}
|
|
||||||
else if (_statSTR > 0)
|
|
||||||
{
|
|
||||||
res = res + "STR +" + _statSTR;
|
|
||||||
}
|
|
||||||
else if (_statCON > 0)
|
|
||||||
{
|
|
||||||
res = res + "CON +" + _statCON;
|
|
||||||
}
|
|
||||||
else if (_statMEM > 0)
|
|
||||||
{
|
|
||||||
res = res + "MEN +" + _statMEM;
|
|
||||||
}
|
|
||||||
else if (_statDEX > 0)
|
|
||||||
{
|
|
||||||
res = res + "DEX +" + _statDEX;
|
|
||||||
}
|
|
||||||
else if (_statWIT > 0)
|
|
||||||
{
|
|
||||||
res = res + "WIT +" + _statWIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_statINT < 0)
|
|
||||||
{
|
|
||||||
res = res + ", INT " + _statINT;
|
|
||||||
}
|
|
||||||
else if (_statSTR < 0)
|
|
||||||
{
|
|
||||||
res = res + ", STR " + _statSTR;
|
|
||||||
}
|
|
||||||
else if (_statCON < 0)
|
|
||||||
{
|
|
||||||
res = res + ", CON " + _statCON;
|
|
||||||
}
|
|
||||||
else if (_statMEM < 0)
|
|
||||||
{
|
|
||||||
res = res + ", MEN " + _statMEM;
|
|
||||||
}
|
|
||||||
else if (_statDEX < 0)
|
|
||||||
{
|
|
||||||
res = res + ", DEX " + _statDEX;
|
|
||||||
}
|
|
||||||
else if (_statWIT < 0)
|
|
||||||
{
|
|
||||||
res = res + ", WIT " + _statWIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Henna getTemplate()
|
|
||||||
{
|
|
||||||
return _template;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSymbolId()
|
|
||||||
{
|
|
||||||
return _symbolId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSymbolId(int symbolId)
|
|
||||||
{
|
|
||||||
_symbolId = symbolId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getItemIdDye()
|
|
||||||
{
|
|
||||||
return _itemIdDye;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setItemIdDye(int itemIdDye)
|
|
||||||
{
|
|
||||||
_itemIdDye = itemIdDye;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getAmountDyeRequire()
|
|
||||||
{
|
|
||||||
return _amountDyeRequire;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setAmountDyeRequire(int amountDyeRequire)
|
|
||||||
{
|
|
||||||
_amountDyeRequire = amountDyeRequire;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getPrice()
|
|
||||||
{
|
|
||||||
return _price;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPrice(int price)
|
|
||||||
{
|
|
||||||
_price = price;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getStatINT()
|
|
||||||
{
|
|
||||||
return _statINT;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatINT(int statINT)
|
|
||||||
{
|
|
||||||
_statINT = statINT;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getStatSTR()
|
|
||||||
{
|
|
||||||
return _statSTR;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatSTR(int statSTR)
|
|
||||||
{
|
|
||||||
_statSTR = statSTR;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getStatCON()
|
|
||||||
{
|
|
||||||
return _statCON;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatCON(int statCON)
|
|
||||||
{
|
|
||||||
_statCON = statCON;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getStatMEM()
|
|
||||||
{
|
|
||||||
return _statMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatMEM(int statMEM)
|
|
||||||
{
|
|
||||||
_statMEM = statMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getStatDEX()
|
|
||||||
{
|
|
||||||
return _statDEX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatDEX(int statDEX)
|
|
||||||
{
|
|
||||||
_statDEX = statDEX;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getStatWIT()
|
|
||||||
{
|
|
||||||
return _statWIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatWIT(int statWIT)
|
|
||||||
{
|
|
||||||
_statWIT = statWIT;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -35,7 +35,6 @@ import java.util.concurrent.Future;
|
|||||||
import java.util.concurrent.ScheduledFuture;
|
import java.util.concurrent.ScheduledFuture;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
import org.l2jmobius.Config;
|
||||||
import org.l2jmobius.commons.concurrent.ThreadPool;
|
import org.l2jmobius.commons.concurrent.ThreadPool;
|
||||||
@@ -57,7 +56,6 @@ import org.l2jmobius.gameserver.datatables.HeroSkillTable;
|
|||||||
import org.l2jmobius.gameserver.datatables.ItemTable;
|
import org.l2jmobius.gameserver.datatables.ItemTable;
|
||||||
import org.l2jmobius.gameserver.datatables.NobleSkillTable;
|
import org.l2jmobius.gameserver.datatables.NobleSkillTable;
|
||||||
import org.l2jmobius.gameserver.datatables.SkillTable;
|
import org.l2jmobius.gameserver.datatables.SkillTable;
|
||||||
import org.l2jmobius.gameserver.datatables.csv.HennaTable;
|
|
||||||
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
|
import org.l2jmobius.gameserver.datatables.csv.MapRegionTable;
|
||||||
import org.l2jmobius.gameserver.datatables.csv.RecipeTable;
|
import org.l2jmobius.gameserver.datatables.csv.RecipeTable;
|
||||||
import org.l2jmobius.gameserver.datatables.sql.CharTemplateTable;
|
import org.l2jmobius.gameserver.datatables.sql.CharTemplateTable;
|
||||||
@@ -67,6 +65,7 @@ import org.l2jmobius.gameserver.datatables.sql.SkillTreeTable;
|
|||||||
import org.l2jmobius.gameserver.datatables.xml.AdminData;
|
import org.l2jmobius.gameserver.datatables.xml.AdminData;
|
||||||
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
|
import org.l2jmobius.gameserver.datatables.xml.ExperienceData;
|
||||||
import org.l2jmobius.gameserver.datatables.xml.FishData;
|
import org.l2jmobius.gameserver.datatables.xml.FishData;
|
||||||
|
import org.l2jmobius.gameserver.datatables.xml.HennaData;
|
||||||
import org.l2jmobius.gameserver.enums.Race;
|
import org.l2jmobius.gameserver.enums.Race;
|
||||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||||
import org.l2jmobius.gameserver.handler.IItemHandler;
|
import org.l2jmobius.gameserver.handler.IItemHandler;
|
||||||
@@ -413,13 +412,15 @@ public class PlayerInstance extends Playable
|
|||||||
private final List<PlayerInstance> _snoopListener = new ArrayList<>();
|
private final List<PlayerInstance> _snoopListener = new ArrayList<>();
|
||||||
private final List<PlayerInstance> _snoopedPlayer = new ArrayList<>();
|
private final List<PlayerInstance> _snoopedPlayer = new ArrayList<>();
|
||||||
private ClassId _skillLearningClassId;
|
private ClassId _skillLearningClassId;
|
||||||
private final HennaInstance[] _henna = new HennaInstance[3];
|
|
||||||
|
private final Henna[] _henna = new Henna[3];
|
||||||
private int _hennaSTR;
|
private int _hennaSTR;
|
||||||
private int _hennaINT;
|
private int _hennaINT;
|
||||||
private int _hennaDEX;
|
private int _hennaDEX;
|
||||||
private int _hennaMEN;
|
private int _hennaMEN;
|
||||||
private int _hennaWIT;
|
private int _hennaWIT;
|
||||||
private int _hennaCON;
|
private int _hennaCON;
|
||||||
|
|
||||||
private Summon _summon = null;
|
private Summon _summon = null;
|
||||||
private TamedBeastInstance _tamedBeast = null;
|
private TamedBeastInstance _tamedBeast = null;
|
||||||
private Radar _radar;
|
private Radar _radar;
|
||||||
@@ -9962,61 +9963,6 @@ public class PlayerInstance extends Playable
|
|||||||
updateEffectIcons();
|
updateEffectIcons();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieve from the database all Henna of this PlayerInstance, add them to _henna and calculate stats of the PlayerInstance.<BR>
|
|
||||||
* <BR>
|
|
||||||
*/
|
|
||||||
private void restoreHenna()
|
|
||||||
{
|
|
||||||
try (Connection con = DatabaseFactory.getConnection())
|
|
||||||
{
|
|
||||||
final PreparedStatement statement = con.prepareStatement(RESTORE_CHAR_HENNAS);
|
|
||||||
statement.setInt(1, getObjectId());
|
|
||||||
statement.setInt(2, getClassIndex());
|
|
||||||
final ResultSet rset = statement.executeQuery();
|
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
_henna[i] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (rset.next())
|
|
||||||
{
|
|
||||||
final int slot = rset.getInt("slot");
|
|
||||||
|
|
||||||
if ((slot < 1) || (slot > 3))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final int symbol_id = rset.getInt("symbol_id");
|
|
||||||
|
|
||||||
HennaInstance sym = null;
|
|
||||||
|
|
||||||
if (symbol_id != 0)
|
|
||||||
{
|
|
||||||
final Henna tpl = HennaTable.getInstance().getTemplate(symbol_id);
|
|
||||||
|
|
||||||
if (tpl != null)
|
|
||||||
{
|
|
||||||
sym = new HennaInstance(tpl);
|
|
||||||
_henna[slot - 1] = sym;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rset.close();
|
|
||||||
statement.close();
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
LOGGER.warning("could not restore henna: " + e);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate Henna modifiers of this PlayerInstance
|
|
||||||
recalcHennaStats();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve from the database all Recommendation data of this PlayerInstance, add to _recomChars and calculate stats of the PlayerInstance.<BR>
|
* Retrieve from the database all Recommendation data of this PlayerInstance, add to _recomChars and calculate stats of the PlayerInstance.<BR>
|
||||||
* <BR>
|
* <BR>
|
||||||
@@ -10043,13 +9989,68 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the number of Henna empty slot of the PlayerInstance.<BR>
|
* Retrieve from the database all Henna of this Player, add them to _henna and calculate stats of the Player.
|
||||||
* <BR>
|
*/
|
||||||
* @return the henna empty slots
|
private void restoreHenna()
|
||||||
|
{
|
||||||
|
try (Connection con = DatabaseFactory.getConnection())
|
||||||
|
{
|
||||||
|
PreparedStatement statement = con.prepareStatement(RESTORE_CHAR_HENNAS);
|
||||||
|
statement.setInt(1, getObjectId());
|
||||||
|
statement.setInt(2, getClassIndex());
|
||||||
|
ResultSet rset = statement.executeQuery();
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
_henna[i] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (rset.next())
|
||||||
|
{
|
||||||
|
int slot = rset.getInt("slot");
|
||||||
|
|
||||||
|
if ((slot < 1) || (slot > 3))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int symbolId = rset.getInt("symbol_id");
|
||||||
|
if (symbolId != 0)
|
||||||
|
{
|
||||||
|
Henna tpl = HennaData.getInstance().getHenna(symbolId);
|
||||||
|
if (tpl != null)
|
||||||
|
{
|
||||||
|
_henna[slot - 1] = tpl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rset.close();
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
LOGGER.warning("Could not restore henna: " + e);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate Henna modifiers of this Player
|
||||||
|
recalcHennaStats();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the number of Henna empty slot of the Player.
|
||||||
*/
|
*/
|
||||||
public int getHennaEmptySlots()
|
public int getHennaEmptySlots()
|
||||||
{
|
{
|
||||||
int totalSlots = 1 + getClassId().level();
|
int totalSlots = 0;
|
||||||
|
if (getClassId().level() == 1)
|
||||||
|
{
|
||||||
|
totalSlots = 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
totalSlots = 3;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
@@ -10068,10 +10069,9 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a Henna of the PlayerInstance, save update in the character_hennas table of the database and send Server->Client HennaInfo/UserInfo packet to this PlayerInstance.<BR>
|
* Remove a Henna of the Player, save update in the character_hennas table of the database and send HennaInfo/UserInfo packet to this Player.
|
||||||
* <BR>
|
* @param slot The slot number to make checks on.
|
||||||
* @param slot the slot
|
* @return true if successful.
|
||||||
* @return true, if successful
|
|
||||||
*/
|
*/
|
||||||
public boolean removeHenna(int slot)
|
public boolean removeHenna(int slot)
|
||||||
{
|
{
|
||||||
@@ -10082,106 +10082,89 @@ public class PlayerInstance extends Playable
|
|||||||
|
|
||||||
slot--;
|
slot--;
|
||||||
|
|
||||||
final HennaInstance henna = _henna[slot];
|
if (_henna[slot] == null)
|
||||||
if (henna == null)
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Henna henna = _henna[slot];
|
||||||
_henna[slot] = null;
|
_henna[slot] = null;
|
||||||
|
|
||||||
try (Connection con = DatabaseFactory.getConnection();
|
try (Connection con = DatabaseFactory.getConnection())
|
||||||
PreparedStatement ps = con.prepareStatement(DELETE_CHAR_HENNA))
|
|
||||||
{
|
{
|
||||||
ps.setInt(1, getObjectId());
|
PreparedStatement statement = con.prepareStatement(DELETE_CHAR_HENNA);
|
||||||
ps.setInt(2, slot + 1);
|
|
||||||
ps.setInt(3, _classIndex);
|
statement.setInt(1, getObjectId());
|
||||||
ps.execute();
|
statement.setInt(2, slot + 1);
|
||||||
|
statement.setInt(3, getClassIndex());
|
||||||
|
|
||||||
|
statement.execute();
|
||||||
|
statement.close();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LOGGER.log(Level.SEVERE, "Failed removing character henna.", e);
|
LOGGER.warning("Could not remove char henna: " + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate Henna modifiers of this PlayerInstance
|
// Calculate Henna modifiers of this Player
|
||||||
recalcHennaStats();
|
recalcHennaStats();
|
||||||
|
|
||||||
// Send Server->Client HennaInfo packet to this PlayerInstance
|
// Send HennaInfo packet to this Player
|
||||||
sendPacket(new HennaInfo(this));
|
sendPacket(new HennaInfo(this));
|
||||||
|
|
||||||
// Send Server->Client UserInfo packet to this PlayerInstance
|
// Send UserInfo packet to this Player
|
||||||
sendPacket(new UserInfo(this));
|
sendPacket(new UserInfo(this));
|
||||||
|
|
||||||
|
reduceAdena("Henna", henna.getPrice() / 5, this, false);
|
||||||
|
|
||||||
// Add the recovered dyes to the player's inventory and notify them.
|
// Add the recovered dyes to the player's inventory and notify them.
|
||||||
_inventory.addItem("Henna", henna.getItemIdDye(), henna.getAmountDyeRequire() / 2, this, null);
|
addItem("Henna", henna.getDyeId(), Henna.getRequiredDyeAmount() / 2, this, true);
|
||||||
|
sendPacket(SystemMessageId.SYMBOL_DELETED);
|
||||||
final SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
|
|
||||||
sm.addItemName(henna.getItemIdDye());
|
|
||||||
sm.addNumber(henna.getAmountDyeRequire() / 2);
|
|
||||||
sendPacket(sm);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a Henna to the PlayerInstance, save update in the character_hennas table of the database and send Server->Client HennaInfo/UserInfo packet to this PlayerInstance.<BR>
|
* Add a Henna to the Player, save update in the character_hennas table of the database and send Server->Client HennaInfo/UserInfo packet to this Player.
|
||||||
* <BR>
|
* @param henna The Henna template to add.
|
||||||
* @param henna the henna
|
|
||||||
* @return true, if successful
|
|
||||||
*/
|
*/
|
||||||
public boolean addHenna(HennaInstance henna)
|
public void addHenna(Henna henna)
|
||||||
{
|
{
|
||||||
if (getHennaEmptySlots() == 0)
|
|
||||||
{
|
|
||||||
sendMessage("You may not have more than three equipped symbols at a time.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// int slot = 0;
|
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
if (_henna[i] == null)
|
if (_henna[i] == null)
|
||||||
{
|
{
|
||||||
_henna[i] = henna;
|
_henna[i] = henna;
|
||||||
|
|
||||||
// Calculate Henna modifiers of this PlayerInstance
|
// Calculate Henna modifiers of this Player
|
||||||
recalcHennaStats();
|
recalcHennaStats();
|
||||||
|
|
||||||
try (Connection con = DatabaseFactory.getConnection())
|
try (Connection con = DatabaseFactory.getConnection())
|
||||||
{
|
{
|
||||||
final PreparedStatement statement = con.prepareStatement(ADD_CHAR_HENNA);
|
PreparedStatement statement = con.prepareStatement(ADD_CHAR_HENNA);
|
||||||
|
|
||||||
statement.setInt(1, getObjectId());
|
statement.setInt(1, getObjectId());
|
||||||
statement.setInt(2, henna.getSymbolId());
|
statement.setInt(2, henna.getSymbolId());
|
||||||
statement.setInt(3, i + 1);
|
statement.setInt(3, i + 1);
|
||||||
statement.setInt(4, getClassIndex());
|
statement.setInt(4, getClassIndex());
|
||||||
|
|
||||||
statement.execute();
|
statement.execute();
|
||||||
statement.close();
|
statement.close();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LOGGER.warning("could not save char henna: " + e);
|
LOGGER.warning("Could not save char henna: " + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send Server->Client HennaInfo packet to this PlayerInstance
|
sendPacket(new HennaInfo(this));
|
||||||
final HennaInfo hi = new HennaInfo(this);
|
sendPacket(new UserInfo(this));
|
||||||
sendPacket(hi);
|
sendPacket(SystemMessageId.SYMBOL_ADDED);
|
||||||
|
return;
|
||||||
// Send Server->Client UserInfo packet to this PlayerInstance
|
|
||||||
final UserInfo ui = new UserInfo(this);
|
|
||||||
sendPacket(ui);
|
|
||||||
|
|
||||||
getInventory().refreshWeight();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate Henna modifiers of this PlayerInstance.<BR>
|
* Calculate Henna modifiers of this Player.
|
||||||
* <BR>
|
|
||||||
*/
|
*/
|
||||||
private void recalcHennaStats()
|
private void recalcHennaStats()
|
||||||
{
|
{
|
||||||
@@ -10198,12 +10181,13 @@ public class PlayerInstance extends Playable
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
_hennaINT += _henna[i].getStatINT();
|
|
||||||
_hennaSTR += _henna[i].getStatSTR();
|
_hennaINT += _henna[i].getINT();
|
||||||
_hennaMEN += _henna[i].getStatMEM();
|
_hennaSTR += _henna[i].getSTR();
|
||||||
_hennaCON += _henna[i].getStatCON();
|
_hennaMEN += _henna[i].getMEN();
|
||||||
_hennaWIT += _henna[i].getStatWIT();
|
_hennaCON += _henna[i].getCON();
|
||||||
_hennaDEX += _henna[i].getStatDEX();
|
_hennaWIT += _henna[i].getWIT();
|
||||||
|
_hennaDEX += _henna[i].getDEX();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_hennaINT > 5)
|
if (_hennaINT > 5)
|
||||||
@@ -10238,12 +10222,10 @@ public class PlayerInstance extends Playable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the Henna of this PlayerInstance corresponding to the selected slot.<BR>
|
* @param slot A slot to check.
|
||||||
* <BR>
|
* @return the Henna of this Player corresponding to the selected slot.
|
||||||
* @param slot the slot
|
|
||||||
* @return the hennas
|
|
||||||
*/
|
*/
|
||||||
public HennaInstance getHennas(int slot)
|
public Henna getHenna(int slot)
|
||||||
{
|
{
|
||||||
if ((slot < 1) || (slot > 3))
|
if ((slot < 1) || (slot > 3))
|
||||||
{
|
{
|
||||||
@@ -10253,61 +10235,31 @@ public class PlayerInstance extends Playable
|
|||||||
return _henna[slot - 1];
|
return _henna[slot - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the INT Henna modifier of this PlayerInstance.<BR>
|
|
||||||
* <BR>
|
|
||||||
* @return the henna stat int
|
|
||||||
*/
|
|
||||||
public int getHennaStatINT()
|
public int getHennaStatINT()
|
||||||
{
|
{
|
||||||
return _hennaINT;
|
return _hennaINT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the STR Henna modifier of this PlayerInstance.<BR>
|
|
||||||
* <BR>
|
|
||||||
* @return the henna stat str
|
|
||||||
*/
|
|
||||||
public int getHennaStatSTR()
|
public int getHennaStatSTR()
|
||||||
{
|
{
|
||||||
return _hennaSTR;
|
return _hennaSTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the CON Henna modifier of this PlayerInstance.<BR>
|
|
||||||
* <BR>
|
|
||||||
* @return the henna stat con
|
|
||||||
*/
|
|
||||||
public int getHennaStatCON()
|
public int getHennaStatCON()
|
||||||
{
|
{
|
||||||
return _hennaCON;
|
return _hennaCON;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the MEN Henna modifier of this PlayerInstance.<BR>
|
|
||||||
* <BR>
|
|
||||||
* @return the henna stat men
|
|
||||||
*/
|
|
||||||
public int getHennaStatMEN()
|
public int getHennaStatMEN()
|
||||||
{
|
{
|
||||||
return _hennaMEN;
|
return _hennaMEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the WIT Henna modifier of this PlayerInstance.<BR>
|
|
||||||
* <BR>
|
|
||||||
* @return the henna stat wit
|
|
||||||
*/
|
|
||||||
public int getHennaStatWIT()
|
public int getHennaStatWIT()
|
||||||
{
|
{
|
||||||
return _hennaWIT;
|
return _hennaWIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the DEX Henna modifier of this PlayerInstance.<BR>
|
|
||||||
* <BR>
|
|
||||||
* @return the henna stat dex
|
|
||||||
*/
|
|
||||||
public int getHennaStatDEX()
|
public int getHennaStatDEX()
|
||||||
{
|
{
|
||||||
return _hennaDEX;
|
return _hennaDEX;
|
||||||
|
@@ -16,40 +16,46 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.model.actor.instance;
|
package org.l2jmobius.gameserver.model.actor.instance;
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
|
import org.l2jmobius.gameserver.datatables.xml.HennaData;
|
||||||
import org.l2jmobius.gameserver.model.actor.Creature;
|
import org.l2jmobius.gameserver.model.actor.Creature;
|
||||||
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
|
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
|
||||||
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.HennaEquipList;
|
import org.l2jmobius.gameserver.network.serverpackets.HennaEquipList;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.ItemList;
|
import org.l2jmobius.gameserver.network.serverpackets.HennaRemoveList;
|
||||||
|
|
||||||
public class SymbolMakerInstance extends FolkInstance
|
public class SymbolMakerInstance extends FolkInstance
|
||||||
{
|
{
|
||||||
|
public SymbolMakerInstance(int objectID, NpcTemplate template)
|
||||||
|
{
|
||||||
|
super(objectID, template);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBypassFeedback(PlayerInstance player, String command)
|
public void onBypassFeedback(PlayerInstance player, String command)
|
||||||
{
|
{
|
||||||
if (command.equals("Draw"))
|
if (command.equals("Draw"))
|
||||||
{
|
{
|
||||||
final HennaInstance[] henna = HennaTreeTable.getInstance().getAvailableHenna(player.getClassId());
|
player.sendPacket(new HennaEquipList(player, HennaData.getInstance().getAvailableHennasFor(player)));
|
||||||
final HennaEquipList hel = new HennaEquipList(player, henna);
|
|
||||||
player.sendPacket(hel);
|
|
||||||
|
|
||||||
player.sendPacket(new ItemList(player, false));
|
|
||||||
}
|
}
|
||||||
else if (command.equals("RemoveList"))
|
else if (command.equals("RemoveList"))
|
||||||
{
|
{
|
||||||
showRemoveChat(player);
|
boolean hasHennas = false;
|
||||||
}
|
for (int i = 1; i <= 3; i++)
|
||||||
else if (command.startsWith("Remove "))
|
|
||||||
{
|
|
||||||
if (!player.getClient().getFloodProtectors().getTransaction().tryPerformAction("HennaRemove"))
|
|
||||||
{
|
{
|
||||||
return;
|
if (player.getHenna(i) != null)
|
||||||
|
{
|
||||||
|
hasHennas = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final int slot = Integer.parseInt(command.substring(7));
|
if (hasHennas)
|
||||||
player.removeHenna(slot);
|
{
|
||||||
|
player.sendPacket(new HennaRemoveList(player));
|
||||||
player.sendPacket(new ItemList(player, false));
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
player.sendPacket(SystemMessageId.SYMBOL_NOT_FOUND);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -57,36 +63,6 @@ public class SymbolMakerInstance extends FolkInstance
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showRemoveChat(PlayerInstance player)
|
|
||||||
{
|
|
||||||
final StringBuilder html1 = new StringBuilder("<html><body>");
|
|
||||||
html1.append("Select symbol you would like to remove:<br><br>");
|
|
||||||
boolean hasHennas = false;
|
|
||||||
|
|
||||||
for (int i = 1; i <= 3; i++)
|
|
||||||
{
|
|
||||||
final HennaInstance henna = player.getHennas(i);
|
|
||||||
|
|
||||||
if (henna != null)
|
|
||||||
{
|
|
||||||
hasHennas = true;
|
|
||||||
html1.append("<a action=\"bypass -h npc_%objectId%_Remove " + i + "\">" + henna.getName() + "</a><br>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!hasHennas)
|
|
||||||
{
|
|
||||||
html1.append("You don't have any symbol to remove!");
|
|
||||||
}
|
|
||||||
|
|
||||||
html1.append("</body></html>");
|
|
||||||
insertObjectIdAndShowChatWindow(player, html1.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
public SymbolMakerInstance(int objectID, NpcTemplate template)
|
|
||||||
{
|
|
||||||
super(objectID, template);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getHtmlPath(int npcId, int val)
|
public String getHtmlPath(int npcId, int val)
|
||||||
{
|
{
|
||||||
|
@@ -16,84 +16,98 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.model.items;
|
package org.l2jmobius.gameserver.model.items;
|
||||||
|
|
||||||
|
import org.l2jmobius.commons.util.Util;
|
||||||
import org.l2jmobius.gameserver.model.StatsSet;
|
import org.l2jmobius.gameserver.model.StatsSet;
|
||||||
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A datatype used to retain Henna infos. Hennas are called "dye" ingame, and enhance {@link PlayerInstance} stats for a fee.<br>
|
||||||
|
* You can draw up to 3 hennas (depending about your current class rank), but accumulated boni for a stat can't be higher than +5. There is no limit in reduction.
|
||||||
|
*/
|
||||||
public class Henna
|
public class Henna
|
||||||
{
|
{
|
||||||
public int symbolId;
|
private final int _symbolId;
|
||||||
public String symbolName;
|
private final int _dyeId;
|
||||||
public int dye;
|
private final int _price;
|
||||||
public int price;
|
private final int _INT;
|
||||||
public int amount;
|
private final int _STR;
|
||||||
public int statINT;
|
private final int _CON;
|
||||||
public int statSTR;
|
private final int _MEN;
|
||||||
public int statCON;
|
private final int _DEX;
|
||||||
public int statMEM;
|
private final int _WIT;
|
||||||
public int statDEX;
|
private final int[] _classes;
|
||||||
public int statWIT;
|
|
||||||
|
|
||||||
public Henna(StatsSet set)
|
public Henna(StatsSet set)
|
||||||
{
|
{
|
||||||
symbolId = set.getInt("symbol_id");
|
_symbolId = set.getInt("symbolId");
|
||||||
symbolName = ""; // set.getString("symbol_name");
|
_dyeId = set.getInt("dyeId");
|
||||||
dye = set.getInt("dye");
|
_price = set.getInt("price");
|
||||||
price = set.getInt("price");
|
_INT = set.getInt("INT");
|
||||||
amount = set.getInt("amount");
|
_STR = set.getInt("STR");
|
||||||
statINT = set.getInt("stat_INT");
|
_CON = set.getInt("CON");
|
||||||
statSTR = set.getInt("stat_STR");
|
_MEN = set.getInt("MEN");
|
||||||
statCON = set.getInt("stat_CON");
|
_DEX = set.getInt("DEX");
|
||||||
statMEM = set.getInt("stat_MEM");
|
_WIT = set.getInt("WIT");
|
||||||
statDEX = set.getInt("stat_DEX");
|
_classes = set.getIntArray("classes", ";");
|
||||||
statWIT = set.getInt("stat_WIT");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSymbolId()
|
public int getSymbolId()
|
||||||
{
|
{
|
||||||
return symbolId;
|
return _symbolId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDyeId()
|
public int getDyeId()
|
||||||
{
|
{
|
||||||
return dye;
|
return _dyeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPrice()
|
public int getPrice()
|
||||||
{
|
{
|
||||||
return price;
|
return _price;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAmountDyeRequire()
|
public static final int getRequiredDyeAmount()
|
||||||
{
|
{
|
||||||
return amount;
|
return 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getStatINT()
|
public int getINT()
|
||||||
{
|
{
|
||||||
return statINT;
|
return _INT;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getStatSTR()
|
public int getSTR()
|
||||||
{
|
{
|
||||||
return statSTR;
|
return _STR;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getStatCON()
|
public int getCON()
|
||||||
{
|
{
|
||||||
return statCON;
|
return _CON;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getStatMEM()
|
public int getMEN()
|
||||||
{
|
{
|
||||||
return statMEM;
|
return _MEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getStatDEX()
|
public int getDEX()
|
||||||
{
|
{
|
||||||
return statDEX;
|
return _DEX;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getStatWIT()
|
public int getWIT()
|
||||||
{
|
{
|
||||||
return statWIT;
|
return _WIT;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Seek if this {@link Henna} can be used by a {@link PlayerInstance}, based on his classId.
|
||||||
|
* @param player : The Player to check.
|
||||||
|
* @return true if this Henna owns the Player classId.
|
||||||
|
*/
|
||||||
|
public boolean canBeUsedBy(PlayerInstance player)
|
||||||
|
{
|
||||||
|
return Util.contains(_classes, player.getClassId().getId());
|
||||||
|
}
|
||||||
|
}
|
@@ -973,6 +973,21 @@ public class GamePacketHandler implements IPacketHandler<GameClient>, IClientFac
|
|||||||
msg = new RequestHennaEquip();
|
msg = new RequestHennaEquip();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 0xbd:
|
||||||
|
{
|
||||||
|
msg = new RequestHennaRemoveList();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0xbe:
|
||||||
|
{
|
||||||
|
msg = new RequestHennaItemRemoveInfo();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0xbf:
|
||||||
|
{
|
||||||
|
msg = new RequestHennaRemove();
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 0xc0:
|
case 0xc0:
|
||||||
{
|
{
|
||||||
// Clan Privileges
|
// Clan Privileges
|
||||||
|
@@ -2328,6 +2328,12 @@ public enum SystemMessageId
|
|||||||
*/
|
*/
|
||||||
SYMBOL_ADDED(877),
|
SYMBOL_ADDED(877),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID: 878<br>
|
||||||
|
* Message: The symbol has been deleted.
|
||||||
|
*/
|
||||||
|
SYMBOL_DELETED(878),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ID: 879<br>
|
* ID: 879<br>
|
||||||
* Message: The manor system is currently under maintenance.
|
* Message: The manor system is currently under maintenance.
|
||||||
@@ -2436,6 +2442,18 @@ public enum SystemMessageId
|
|||||||
*/
|
*/
|
||||||
CANT_DRAW_SYMBOL(899),
|
CANT_DRAW_SYMBOL(899),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID: 900<br>
|
||||||
|
* Message: No slot exists to draw the symbol
|
||||||
|
*/
|
||||||
|
SYMBOLS_FULL(900),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID: 901<br>
|
||||||
|
* Message: The symbol information cannot be found.
|
||||||
|
*/
|
||||||
|
SYMBOL_NOT_FOUND(901),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ID: 910<br>
|
* ID: 910<br>
|
||||||
* Message: Current location : $s1, $s2, $s3 (Near Talking Island Village)
|
* Message: Current location : $s1, $s2, $s3 (Near Talking Island Village)
|
||||||
|
@@ -21,6 +21,7 @@ import java.util.logging.Logger;
|
|||||||
import org.l2jmobius.gameserver.model.World;
|
import org.l2jmobius.gameserver.model.World;
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.GMViewCharacterInfo;
|
import org.l2jmobius.gameserver.network.serverpackets.GMViewCharacterInfo;
|
||||||
|
import org.l2jmobius.gameserver.network.serverpackets.GMViewHennaInfo;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.GMViewItemList;
|
import org.l2jmobius.gameserver.network.serverpackets.GMViewItemList;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.GMViewPledgeInfo;
|
import org.l2jmobius.gameserver.network.serverpackets.GMViewPledgeInfo;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.GMViewQuestList;
|
import org.l2jmobius.gameserver.network.serverpackets.GMViewQuestList;
|
||||||
@@ -58,6 +59,7 @@ public class RequestGMCommand extends GameClientPacket
|
|||||||
case 1: // player status
|
case 1: // player status
|
||||||
{
|
{
|
||||||
sendPacket(new GMViewCharacterInfo(player));
|
sendPacket(new GMViewCharacterInfo(player));
|
||||||
|
sendPacket(new GMViewHennaInfo(player));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: // player clan
|
case 2: // player clan
|
||||||
@@ -81,6 +83,7 @@ public class RequestGMCommand extends GameClientPacket
|
|||||||
case 5: // player inventory
|
case 5: // player inventory
|
||||||
{
|
{
|
||||||
sendPacket(new GMViewItemList(player));
|
sendPacket(new GMViewItemList(player));
|
||||||
|
sendPacket(new GMViewHennaInfo(player));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 6: // player warehouse
|
case 6: // player warehouse
|
||||||
|
@@ -16,18 +16,11 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.network.clientpackets;
|
package org.l2jmobius.gameserver.network.clientpackets;
|
||||||
|
|
||||||
import org.l2jmobius.Config;
|
import org.l2jmobius.gameserver.datatables.xml.HennaData;
|
||||||
import org.l2jmobius.gameserver.datatables.csv.HennaTable;
|
|
||||||
import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
import org.l2jmobius.gameserver.model.items.Henna;
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||||
import org.l2jmobius.gameserver.network.SystemMessageId;
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.InventoryUpdate;
|
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.ItemList;
|
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.SystemMessage;
|
|
||||||
import org.l2jmobius.gameserver.util.Util;
|
|
||||||
|
|
||||||
public class RequestHennaEquip extends GameClientPacket
|
public class RequestHennaEquip extends GameClientPacket
|
||||||
{
|
{
|
||||||
@@ -43,74 +36,50 @@ public class RequestHennaEquip extends GameClientPacket
|
|||||||
protected void runImpl()
|
protected void runImpl()
|
||||||
{
|
{
|
||||||
final PlayerInstance player = getClient().getPlayer();
|
final PlayerInstance player = getClient().getPlayer();
|
||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!getClient().getFloodProtectors().getTransaction().tryPerformAction("HennaEquip"))
|
final Henna henna = HennaData.getInstance().getHenna(_symbolId);
|
||||||
|
if (henna == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Henna template = HennaTable.getInstance().getTemplate(_symbolId);
|
if (!henna.canBeUsedBy(player))
|
||||||
|
|
||||||
if (template == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final HennaInstance temp = new HennaInstance(template);
|
|
||||||
|
|
||||||
// Prevents henna drawing exploit:
|
|
||||||
// 1) talk to SymbolMakerInstance
|
|
||||||
// 2) RequestHennaList
|
|
||||||
// 3) Don't close the window and go to a GrandMaster and change your subclass
|
|
||||||
// 4) Get SymbolMaker range again and press draw You could draw any kind of henna just having the required subclass...
|
|
||||||
boolean cheater = true;
|
|
||||||
for (HennaInstance h : HennaTreeTable.getInstance().getAvailableHenna(player.getClassId()))
|
|
||||||
{
|
|
||||||
if (h.getSymbolId() == temp.getSymbolId())
|
|
||||||
{
|
|
||||||
cheater = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
if ((player.getInventory() != null) && (player.getInventory().getItemByItemId(temp.getItemIdDye()) != null))
|
|
||||||
{
|
|
||||||
count = player.getInventory().getItemByItemId(temp.getItemIdDye()).getCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!cheater && (count >= temp.getAmountDyeRequire()) && (player.getAdena() >= temp.getPrice()) && player.addHenna(temp))
|
|
||||||
{
|
|
||||||
final SystemMessage sm = new SystemMessage(SystemMessageId.S1_DISAPPEARED);
|
|
||||||
sm.addItemName(temp.getItemIdDye());
|
|
||||||
player.sendPacket(sm);
|
|
||||||
player.sendPacket(SystemMessageId.SYMBOL_ADDED);
|
|
||||||
|
|
||||||
player.getInventory().reduceAdena("Henna", temp.getPrice(), player, player.getLastFolkNPC());
|
|
||||||
final ItemInstance dyeToUpdate = player.getInventory().destroyItemByItemId("Henna", temp.getItemIdDye(), temp.getAmountDyeRequire(), player, player.getLastFolkNPC());
|
|
||||||
|
|
||||||
// update inventory
|
|
||||||
final InventoryUpdate iu = new InventoryUpdate();
|
|
||||||
iu.addModifiedItem(player.getInventory().getAdenaInstance());
|
|
||||||
iu.addModifiedItem(dyeToUpdate);
|
|
||||||
player.sendPacket(iu);
|
|
||||||
|
|
||||||
final ItemList il = new ItemList(getClient().getPlayer(), true);
|
|
||||||
sendPacket(il);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
player.sendPacket(SystemMessageId.CANT_DRAW_SYMBOL);
|
player.sendPacket(SystemMessageId.CANT_DRAW_SYMBOL);
|
||||||
|
return;
|
||||||
if (!player.isGM() && cheater)
|
|
||||||
{
|
|
||||||
Util.handleIllegalPlayerAction(player, "Exploit attempt: Character " + player.getName() + " of account " + player.getAccountName() + " tryed to add a forbidden henna.", Config.DEFAULT_PUNISH);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player.getHennaEmptySlots() == 0)
|
||||||
|
{
|
||||||
|
player.sendPacket(SystemMessageId.SYMBOLS_FULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final ItemInstance ownedDyes = player.getInventory().getItemByItemId(henna.getDyeId());
|
||||||
|
final int count = (ownedDyes == null) ? 0 : ownedDyes.getCount();
|
||||||
|
|
||||||
|
if (count < Henna.getRequiredDyeAmount())
|
||||||
|
{
|
||||||
|
player.sendPacket(SystemMessageId.CANT_DRAW_SYMBOL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// reduceAdena sends a message.
|
||||||
|
if (!player.reduceAdena("Henna", henna.getPrice(), player.getLastFolkNPC(), true))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// destroyItemByItemId sends a message.
|
||||||
|
if (!player.destroyItemByItemId("Henna", henna.getDyeId(), Henna.getRequiredDyeAmount(), player, true))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.addHenna(henna);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,8 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.network.clientpackets;
|
package org.l2jmobius.gameserver.network.clientpackets;
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.datatables.csv.HennaTable;
|
import org.l2jmobius.gameserver.datatables.xml.HennaData;
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
import org.l2jmobius.gameserver.model.items.Henna;
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.HennaItemInfo;
|
import org.l2jmobius.gameserver.network.serverpackets.HennaItemInfo;
|
||||||
@@ -36,22 +35,17 @@ public class RequestHennaItemInfo extends GameClientPacket
|
|||||||
protected void runImpl()
|
protected void runImpl()
|
||||||
{
|
{
|
||||||
final PlayerInstance player = getClient().getPlayer();
|
final PlayerInstance player = getClient().getPlayer();
|
||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Henna template = HennaTable.getInstance().getTemplate(_symbolId);
|
final Henna template = HennaData.getInstance().getHenna(_symbolId);
|
||||||
|
|
||||||
if (template == null)
|
if (template == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final HennaInstance temp = new HennaInstance(template);
|
player.sendPacket(new HennaItemInfo(template, player));
|
||||||
|
|
||||||
final HennaItemInfo hii = new HennaItemInfo(temp, player);
|
|
||||||
player.sendPacket(hii);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.l2jmobius.gameserver.network.clientpackets;
|
||||||
|
|
||||||
|
import org.l2jmobius.gameserver.datatables.xml.HennaData;
|
||||||
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
import org.l2jmobius.gameserver.network.serverpackets.HennaItemRemoveInfo;
|
||||||
|
|
||||||
|
public final class RequestHennaItemRemoveInfo extends GameClientPacket
|
||||||
|
{
|
||||||
|
private int _symbolId;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void readImpl()
|
||||||
|
{
|
||||||
|
_symbolId = readD();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runImpl()
|
||||||
|
{
|
||||||
|
final PlayerInstance player = getClient().getPlayer();
|
||||||
|
if (player == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Henna template = HennaData.getInstance().getHenna(_symbolId);
|
||||||
|
if (template == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.sendPacket(new HennaItemRemoveInfo(template, player));
|
||||||
|
}
|
||||||
|
}
|
@@ -16,18 +16,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.network.clientpackets;
|
package org.l2jmobius.gameserver.network.clientpackets;
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
|
import org.l2jmobius.gameserver.datatables.xml.HennaData;
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
import org.l2jmobius.gameserver.network.serverpackets.HennaEquipList;
|
import org.l2jmobius.gameserver.network.serverpackets.HennaEquipList;
|
||||||
|
|
||||||
/**
|
|
||||||
* RequestHennaList - 0xba
|
|
||||||
* @author Tempy
|
|
||||||
*/
|
|
||||||
public class RequestHennaList extends GameClientPacket
|
public class RequestHennaList extends GameClientPacket
|
||||||
{
|
{
|
||||||
// This is just a trigger packet...
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private int _unknown;
|
private int _unknown;
|
||||||
|
|
||||||
@@ -41,14 +35,11 @@ public class RequestHennaList extends GameClientPacket
|
|||||||
protected void runImpl()
|
protected void runImpl()
|
||||||
{
|
{
|
||||||
final PlayerInstance player = getClient().getPlayer();
|
final PlayerInstance player = getClient().getPlayer();
|
||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final HennaInstance[] henna = HennaTreeTable.getInstance().getAvailableHenna(player.getClassId());
|
player.sendPacket(new HennaEquipList(player, HennaData.getInstance().getAvailableHennasFor(player)));
|
||||||
final HennaEquipList he = new HennaEquipList(player, henna);
|
|
||||||
player.sendPacket(he);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,59 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.l2jmobius.gameserver.network.clientpackets;
|
||||||
|
|
||||||
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
import org.l2jmobius.gameserver.network.SystemMessageId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* format cd
|
||||||
|
*/
|
||||||
|
public final class RequestHennaRemove extends GameClientPacket
|
||||||
|
{
|
||||||
|
private int _symbolId;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void readImpl()
|
||||||
|
{
|
||||||
|
_symbolId = readD();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runImpl()
|
||||||
|
{
|
||||||
|
final PlayerInstance player = getClient().getPlayer();
|
||||||
|
if (player == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i <= 3; i++)
|
||||||
|
{
|
||||||
|
final Henna henna = player.getHenna(i);
|
||||||
|
if ((henna != null) && (henna.getSymbolId() == _symbolId))
|
||||||
|
{
|
||||||
|
if (player.getAdena() >= (henna.getPrice() / 5))
|
||||||
|
{
|
||||||
|
player.removeHenna(i);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
player.sendPacket(SystemMessageId.YOU_NOT_ENOUGH_ADENA);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.l2jmobius.gameserver.network.clientpackets;
|
||||||
|
|
||||||
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.network.serverpackets.HennaRemoveList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Tempy
|
||||||
|
*/
|
||||||
|
public final class RequestHennaRemoveList extends GameClientPacket
|
||||||
|
{
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private int _unknown;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void readImpl()
|
||||||
|
{
|
||||||
|
_unknown = readD(); // ??
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void runImpl()
|
||||||
|
{
|
||||||
|
final PlayerInstance player = getClient().getPlayer();
|
||||||
|
if (player == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.sendPacket(new HennaRemoveList(player));
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
|
||||||
|
public class GMViewHennaInfo extends GameServerPacket
|
||||||
|
{
|
||||||
|
private final PlayerInstance _player;
|
||||||
|
private final Henna[] _hennas = new Henna[3];
|
||||||
|
private int _count;
|
||||||
|
|
||||||
|
public GMViewHennaInfo(PlayerInstance player)
|
||||||
|
{
|
||||||
|
_player = player;
|
||||||
|
_count = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
|
final Henna h = _player.getHenna(i + 1);
|
||||||
|
if (h != null)
|
||||||
|
{
|
||||||
|
_hennas[_count++] = h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0xea);
|
||||||
|
|
||||||
|
writeC(_player.getHennaStatINT());
|
||||||
|
writeC(_player.getHennaStatSTR());
|
||||||
|
writeC(_player.getHennaStatCON());
|
||||||
|
writeC(_player.getHennaStatMEN());
|
||||||
|
writeC(_player.getHennaStatDEX());
|
||||||
|
writeC(_player.getHennaStatWIT());
|
||||||
|
|
||||||
|
writeD(3); // slots?
|
||||||
|
|
||||||
|
writeD(_count); // size
|
||||||
|
for (int i = 0; i < _count; i++)
|
||||||
|
{
|
||||||
|
writeD(_hennas[i].getSymbolId());
|
||||||
|
writeD(_hennas[i].canBeUsedBy(_player) ? _hennas[i].getSymbolId() : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -16,15 +16,17 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.network.serverpackets;
|
package org.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
|
import java.util.List;
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
|
||||||
public class HennaEquipList extends GameServerPacket
|
public class HennaEquipList extends GameServerPacket
|
||||||
{
|
{
|
||||||
private final PlayerInstance _player;
|
private final PlayerInstance _player;
|
||||||
private final HennaInstance[] _hennaEquipList;
|
private final List<Henna> _hennaEquipList;
|
||||||
|
|
||||||
public HennaEquipList(PlayerInstance player, HennaInstance[] hennaEquipList)
|
public HennaEquipList(PlayerInstance player, List<Henna> hennaEquipList)
|
||||||
{
|
{
|
||||||
_player = player;
|
_player = player;
|
||||||
_hennaEquipList = hennaEquipList;
|
_hennaEquipList = hennaEquipList;
|
||||||
@@ -34,32 +36,21 @@ public class HennaEquipList extends GameServerPacket
|
|||||||
protected final void writeImpl()
|
protected final void writeImpl()
|
||||||
{
|
{
|
||||||
writeC(0xe2);
|
writeC(0xe2);
|
||||||
writeD(_player.getAdena()); // activeChar current amount of aden
|
writeD(_player.getAdena());
|
||||||
writeD(3); // available equip slot
|
writeD(3);
|
||||||
// writeD(10); // total amount of symbol available which depends on difference classes
|
writeD(_hennaEquipList.size());
|
||||||
writeD(_hennaEquipList.length);
|
|
||||||
|
|
||||||
for (HennaInstance element : _hennaEquipList)
|
for (Henna temp : _hennaEquipList)
|
||||||
{
|
{
|
||||||
/*
|
// Player must have at least one dye in inventory to be able to see the henna that can be applied with it.
|
||||||
* Player must have at least one dye in inventory to be able to see the henna that can be applied with it.
|
if ((_player.getInventory().getItemByItemId(temp.getDyeId())) != null)
|
||||||
*/
|
|
||||||
if (_player.getInventory().getItemByItemId(element.getItemIdDye()) != null)
|
|
||||||
{
|
{
|
||||||
writeD(element.getSymbolId()); // symbolid
|
writeD(temp.getSymbolId()); // symbolid
|
||||||
writeD(element.getItemIdDye()); // itemid of dye
|
writeD(temp.getDyeId()); // itemid of dye
|
||||||
writeD(element.getAmountDyeRequire()); // amount of dye require
|
writeD(Henna.getRequiredDyeAmount()); // amount of dyes required
|
||||||
writeD(element.getPrice()); // amount of aden require
|
writeD(temp.getPrice()); // amount of adenas required
|
||||||
writeD(1); // meet the requirement or not
|
writeD(1); // meet the requirement or not
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
writeD(0x00);
|
|
||||||
writeD(0x00);
|
|
||||||
writeD(0x00);
|
|
||||||
writeD(0x00);
|
|
||||||
writeD(0x00);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,29 +16,28 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.network.serverpackets;
|
package org.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
|
||||||
public class HennaInfo extends GameServerPacket
|
public class HennaInfo extends GameServerPacket
|
||||||
{
|
{
|
||||||
private final PlayerInstance _player;
|
private final PlayerInstance _player;
|
||||||
private final HennaInstance[] _hennas = new HennaInstance[3];
|
private final Henna[] _hennas = new Henna[3];
|
||||||
private final int _count;
|
private int _count;
|
||||||
|
|
||||||
public HennaInfo(PlayerInstance player)
|
public HennaInfo(PlayerInstance player)
|
||||||
{
|
{
|
||||||
_player = player;
|
_player = player;
|
||||||
|
_count = 0;
|
||||||
|
|
||||||
int j = 0;
|
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
final HennaInstance h = _player.getHennas(i + 1);
|
Henna henna = _player.getHenna(i + 1);
|
||||||
if (h != null)
|
if (henna != null)
|
||||||
{
|
{
|
||||||
_hennas[j++] = h;
|
_hennas[_count++] = henna;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_count = j;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -53,13 +52,26 @@ public class HennaInfo extends GameServerPacket
|
|||||||
writeC(_player.getHennaStatDEX()); // equip DEX
|
writeC(_player.getHennaStatDEX()); // equip DEX
|
||||||
writeC(_player.getHennaStatWIT()); // equip WIT
|
writeC(_player.getHennaStatWIT()); // equip WIT
|
||||||
|
|
||||||
writeD(3); // slots?
|
// Henna slots
|
||||||
|
int classId = _player.getClassId().level();
|
||||||
|
if (classId == 1)
|
||||||
|
{
|
||||||
|
writeD(2);
|
||||||
|
}
|
||||||
|
else if (classId > 1)
|
||||||
|
{
|
||||||
|
writeD(3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
writeD(0);
|
||||||
|
}
|
||||||
|
|
||||||
writeD(_count); // size
|
writeD(_count); // size
|
||||||
for (int i = 0; i < _count; i++)
|
for (int i = 0; i < _count; i++)
|
||||||
{
|
{
|
||||||
writeD(_hennas[i].getSymbolId());
|
writeD(_hennas[i].getSymbolId());
|
||||||
writeD(0x01);
|
writeD(_hennas[i].canBeUsedBy(_player) ? _hennas[i].getSymbolId() : 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,15 +16,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.l2jmobius.gameserver.network.serverpackets;
|
package org.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
|
|
||||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
|
||||||
public class HennaItemInfo extends GameServerPacket
|
public class HennaItemInfo extends GameServerPacket
|
||||||
{
|
{
|
||||||
private final PlayerInstance _player;
|
private final PlayerInstance _player;
|
||||||
private final HennaInstance _henna;
|
private final Henna _henna;
|
||||||
|
|
||||||
public HennaItemInfo(HennaInstance henna, PlayerInstance player)
|
public HennaItemInfo(Henna henna, PlayerInstance player)
|
||||||
{
|
{
|
||||||
_henna = henna;
|
_henna = henna;
|
||||||
_player = player;
|
_player = player;
|
||||||
@@ -35,23 +35,23 @@ public class HennaItemInfo extends GameServerPacket
|
|||||||
{
|
{
|
||||||
writeC(0xe3);
|
writeC(0xe3);
|
||||||
writeD(_henna.getSymbolId()); // symbol Id
|
writeD(_henna.getSymbolId()); // symbol Id
|
||||||
writeD(_henna.getItemIdDye()); // item id of dye
|
writeD(_henna.getDyeId()); // item id of dye
|
||||||
writeD(_henna.getAmountDyeRequire()); // total amount of dye require
|
writeD(Henna.getRequiredDyeAmount()); // total amount of dye required
|
||||||
writeD(_henna.getPrice()); // total amount of aden require to draw symbol
|
writeD(_henna.getPrice()); // total amount of adenas required to draw symbol
|
||||||
writeD(1); // able to draw or not 0 is false and 1 is true
|
writeD(1); // able to draw or not 0 is false and 1 is true
|
||||||
writeD(_player.getAdena());
|
writeD(_player.getAdena());
|
||||||
|
|
||||||
writeD(_player.getINT()); // current INT
|
writeD(_player.getINT()); // current INT
|
||||||
writeC(_player.getINT() + _henna.getStatINT()); // equip INT
|
writeC(_player.getINT() + _henna.getINT()); // equip INT
|
||||||
writeD(_player.getSTR()); // current STR
|
writeD(_player.getSTR()); // current STR
|
||||||
writeC(_player.getSTR() + _henna.getStatSTR()); // equip STR
|
writeC(_player.getSTR() + _henna.getSTR()); // equip STR
|
||||||
writeD(_player.getCON()); // current CON
|
writeD(_player.getCON()); // current CON
|
||||||
writeC(_player.getCON() + _henna.getStatCON()); // equip CON
|
writeC(_player.getCON() + _henna.getCON()); // equip CON
|
||||||
writeD(_player.getMEN()); // current MEM
|
writeD(_player.getMEN()); // current MEM
|
||||||
writeC(_player.getMEN() + _henna.getStatMEM()); // equip MEM
|
writeC(_player.getMEN() + _henna.getMEN()); // equip MEM
|
||||||
writeD(_player.getDEX()); // current DEX
|
writeD(_player.getDEX()); // current DEX
|
||||||
writeC(_player.getDEX() + _henna.getStatDEX()); // equip DEX
|
writeC(_player.getDEX() + _henna.getDEX()); // equip DEX
|
||||||
writeD(_player.getWIT()); // current WIT
|
writeD(_player.getWIT()); // current WIT
|
||||||
writeC(_player.getWIT() + _henna.getStatWIT()); // equip WIT
|
writeC(_player.getWIT() + _henna.getWIT()); // equip WIT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
|
||||||
|
public class HennaItemRemoveInfo extends GameServerPacket
|
||||||
|
{
|
||||||
|
private final PlayerInstance _player;
|
||||||
|
private final Henna _henna;
|
||||||
|
|
||||||
|
public HennaItemRemoveInfo(Henna henna, PlayerInstance player)
|
||||||
|
{
|
||||||
|
_henna = henna;
|
||||||
|
_player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0xe6);
|
||||||
|
writeD(_henna.getSymbolId()); // symbol Id
|
||||||
|
writeD(_henna.getDyeId()); // item id of dye
|
||||||
|
writeD(Henna.getRequiredDyeAmount() / 2); // amount of given dyes
|
||||||
|
writeD(_henna.getPrice() / 5); // amount of required adenas
|
||||||
|
writeD(1); // able to remove or not 0 is false and 1 is true
|
||||||
|
writeD(_player.getAdena());
|
||||||
|
|
||||||
|
writeD(_player.getINT()); // current INT
|
||||||
|
writeC(_player.getINT() - _henna.getINT()); // equip INT
|
||||||
|
writeD(_player.getSTR()); // current STR
|
||||||
|
writeC(_player.getSTR() - _henna.getSTR()); // equip STR
|
||||||
|
writeD(_player.getCON()); // current CON
|
||||||
|
writeC(_player.getCON() - _henna.getCON()); // equip CON
|
||||||
|
writeD(_player.getMEN()); // current MEM
|
||||||
|
writeC(_player.getMEN() - _henna.getMEN()); // equip MEM
|
||||||
|
writeD(_player.getDEX()); // current DEX
|
||||||
|
writeC(_player.getDEX() - _henna.getDEX()); // equip DEX
|
||||||
|
writeD(_player.getWIT()); // current WIT
|
||||||
|
writeC(_player.getWIT() - _henna.getWIT()); // equip WIT
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.l2jmobius.gameserver.network.serverpackets;
|
||||||
|
|
||||||
|
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||||
|
import org.l2jmobius.gameserver.model.items.Henna;
|
||||||
|
|
||||||
|
public class HennaRemoveList extends GameServerPacket
|
||||||
|
{
|
||||||
|
private final PlayerInstance _player;
|
||||||
|
|
||||||
|
public HennaRemoveList(PlayerInstance player)
|
||||||
|
{
|
||||||
|
_player = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected final void writeImpl()
|
||||||
|
{
|
||||||
|
writeC(0xe5);
|
||||||
|
writeD(_player.getAdena());
|
||||||
|
writeD(_player.getHennaEmptySlots());
|
||||||
|
writeD(Math.abs(_player.getHennaEmptySlots() - 3));
|
||||||
|
|
||||||
|
for (int i = 1; i <= 3; i++)
|
||||||
|
{
|
||||||
|
final Henna henna = _player.getHenna(i);
|
||||||
|
if (henna != null)
|
||||||
|
{
|
||||||
|
writeD(henna.getSymbolId());
|
||||||
|
writeD(henna.getDyeId());
|
||||||
|
writeD(Henna.getRequiredDyeAmount() / 2);
|
||||||
|
writeD(henna.getPrice() / 5);
|
||||||
|
writeD(0x01);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user