Replaced Henna CSV data with aCis free version XML data.

This commit is contained in:
MobiusDevelopment
2020-01-25 13:24:58 +00:00
parent 42e7b2382c
commit 56bc0a2d2b
29 changed files with 1011 additions and 8227 deletions

File diff suppressed because it is too large Load Diff

View 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>

View File

@@ -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
1 # symbol_id;symbol_name;dye_id;dye_amount;price;stat_INT;stat_STR;stat_CON;stat_MEM;stat_DEX;stat_WIT;
2 1;symbol_s+1c-3_d;4445;10;5100;0;1;-3;0;0;0
3 2;symbol_s+1d-3_d;4446;10;5100;0;1;0;0;-3;0
4 3;symbol_c+1s-3_d;4447;10;5100;0;-3;1;0;0;0
5 4;symbol_c+1d-3_d;4448;10;5100;0;0;1;0;-3;0
6 5;symbol_d+1s-3_d;4449;10;5100;0;-3;0;0;1;0
7 6;symbol_d+1c-3_d;4450;10;5100;0;0;-3;0;1;0
8 7;symbol_i+1m-3_d;4451;10;5100;1;0;0;-3;0;0
9 8;symbol_i+1w-3_d;4452;10;5100;1;0;0;0;0;-3
10 9;symbol_m+1i-3_d;4453;10;5100;-3;0;0;1;0;0
11 10;symbol_m+1w-3_d;4454;10;5100;0;0;0;1;0;-3
12 11;symbol_w+1i-3_d;4455;10;5100;-3;0;0;0;0;1
13 12;symbol_w+1m-3_d;4456;10;5100;0;0;0;-3;0;1
14 13;symbol_s+1c-2_d;4457;10;12000;0;1;-2;0;0;0
15 14;symbol_s+1d-2_d;4458;10;12000;0;1;0;0;-2;0
16 15;symbol_c+1s-2_d;4459;10;12000;0;-2;1;0;0;0
17 16;symbol_c+1d-2_d;4460;10;12000;0;0;1;0;-2;0
18 17;symbol_d+1s-2_d;4461;10;12000;0;-2;0;0;1;0
19 18;symbol_d+1c-2_d;4462;10;12000;0;0;-2;0;1;0
20 19;symbol_i+1m-2_d;4463;10;12000;1;0;0;-2;0;0
21 20;symbol_i+1w-2_d;4464;10;12000;1;0;0;0;0;-2
22 21;symbol_m+1i-2_d;4465;10;12000;-2;0;0;1;0;0
23 22;symbol_m+1w-2_d;4466;10;12000;0;0;0;1;0;-2
24 23;symbol_w+1i-2_d;4467;10;12000;-2;0;0;0;0;1
25 24;symbol_w+1m-2_d;4468;10;12000;0;0;0;-2;0;1
26 25;symbol_s+1c-1_d;4469;10;35000;0;1;-1;0;0;0
27 26;symbol_s+1d-1_d;4470;10;35000;0;1;0;0;-1;0
28 27;symbol_c+1s-1_d;4471;10;35000;0;-1;1;0;0;0
29 28;symbol_c+1d-1_d;4472;10;35000;0;0;1;0;-1;0
30 29;symbol_d+1s-1_d;4473;10;35000;0;-1;0;0;1;0
31 30;symbol_d+1c-1_d;4474;10;35000;0;0;-1;0;1;0
32 31;symbol_i+1m-1_d;4475;10;35000;1;0;0;-1;0;0
33 32;symbol_i+1w-1_d;4476;10;35000;1;0;0;0;0;-1
34 33;symbol_m+1i-1_d;4477;10;35000;-1;0;0;1;0;0
35 34;symbol_m+1w-1_d;4478;10;35000;0;0;0;1;0;-1
36 35;symbol_w+1i-1_d;4479;10;35000;-1;0;0;0;0;1
37 36;symbol_w+1m-1_d;4480;10;35000;0;0;0;-1;0;1
38 37;symbol_s+1c-3_c;4481;10;12000;0;1;-3;0;0;0
39 38;symbol_s+1d-3_c;4482;10;24600;0;1;0;0;-3;0
40 39;symbol_c+1s-3_c;4483;10;24600;0;-3;1;0;0;0
41 40;symbol_c+1d-3_c;4484;10;24600;0;0;1;0;-3;0
42 41;symbol_d+1s-3_c;4485;10;30000;0;-3;0;0;1;0
43 42;symbol_d+1c-3_c;4486;10;30000;0;0;-3;0;1;0
44 43;symbol_i+1m-3_c;4487;10;30000;1;0;0;-3;0;0
45 44;symbol_i+1w-3_c;4488;10;30000;1;0;0;0;0;-3
46 45;symbol_m+1i-3_c;4489;10;30000;-3;0;0;1;0;0
47 46;symbol_m+1w-3_c;4490;10;12000;0;0;0;1;0;-3
48 47;symbol_w+1i-3_c;4491;10;30000;-3;0;0;0;0;1
49 48;symbol_w+1m-3_c;4492;10;12000;0;0;0;-3;0;1
50 49;symbol_s+1c-2_c;4493;10;24600;0;1;-2;0;0;0
51 50;symbol_s+1d-2_c;4494;10;30000;0;1;0;0;-2;0
52 51;symbol_c+1s-2_c;4495;10;35000;0;-2;1;0;0;0
53 52;symbol_c+1d-2_c;4496;10;35000;0;0;1;0;-2;0
54 53;symbol_d+1s-2_c;4497;10;36000;0;-2;0;0;1;0
55 54;symbol_d+1c-2_c;4498;10;36000;0;0;-2;0;1;0
56 55;symbol_i+1m-2_c;4499;10;50000;1;0;0;-2;0;0
57 56;symbol_i+1w-2_c;4500;10;36000;1;0;0;0;0;-2
58 57;symbol_m+1i-2_c;4501;10;36000;-2;0;0;1;0;0
59 58;symbol_m+1w-2_c;4502;10;21000;0;0;0;1;0;-2
60 59;symbol_w+1i-2_c;4503;10;30000;-2;0;0;0;0;1
61 60;symbol_w+1m-2_c;4504;10;36000;0;0;0;-2;0;1
62 61;symbol_s+2c-4_c;4505;10;24600;0;2;-4;0;0;0
63 62;symbol_s+2d-4_c;4506;10;24600;0;2;0;0;-4;0
64 63;symbol_c+2s-4_c;4507;10;24600;0;-4;2;0;0;0
65 64;symbol_c+2d-4_c;4508;10;24600;0;0;2;0;-4;0
66 65;symbol_d+2s-4_c;4509;10;24600;0;-4;0;0;2;0
67 66;symbol_d+2c-4_c;4510;10;24600;0;0;-4;0;2;0
68 67;symbol_i+2m-4_c;4511;10;24600;2;0;0;-4;0;0
69 68;symbol_i+2w-4_c;4512;10;24600;2;0;0;0;0;-4
70 69;symbol_m+2i-4_c;4513;10;24600;-4;0;0;2;0;0
71 70;symbol_m+2w-4_c;4514;10;30000;0;0;0;2;0;-4
72 71;symbol_w+2i-4_c;4515;10;30000;-4;0;0;0;0;2
73 72;symbol_w+2m-4_c;4516;10;30000;0;0;0;-4;0;2
74 73;symbol_s+2c-3_c;4517;10;30000;0;2;-3;0;0;0
75 74;symbol_s+2d-3_c;4518;10;35000;0;2;0;0;-3;0
76 75;symbol_c+2s-3_c;4519;10;35000;0;-3;2;0;0;0
77 76;symbol_c+2d-3_c;4520;10;35000;0;0;2;0;-3;0
78 77;symbol_d+2s-3_c;4521;10;27000;0;-3;0;0;2;0
79 78;symbol_d+2c-3_c;4522;10;27000;0;0;-3;0;2;0
80 79;symbol_i+2m-3_c;4523;10;27000;2;0;0;-3;0;0
81 80;symbol_i+2w-3_c;4524;10;30000;2;0;0;0;0;-3
82 81;symbol_m+2i-3_c;4525;10;30000;-3;0;0;2;0;0
83 82;symbol_m+2w-3_c;4526;10;30000;0;0;0;2;0;-3
84 83;symbol_w+2i-3_c;4527;10;30000;-3;0;0;0;0;2
85 84;symbol_w+2m-3_c;4528;10;30000;0;0;0;-3;0;2
86 85;symbol_s+3c-5_c;4529;10;30000;0;3;-5;0;0;0
87 86;symbol_s+3d-5_c;4530;10;30000;0;3;0;0;-5;0
88 87;symbol_c+3s-5_c;4531;10;30000;0;-5;3;0;0;0
89 88;symbol_c+3d-5_c;4532;10;30000;0;0;3;0;-5;0
90 89;symbol_d+3s-5_c;4533;10;30000;0;-5;0;0;3;0
91 90;symbol_d+3c-5_c;4534;10;30000;0;0;-5;0;3;0
92 91;symbol_i+3m-5_c;4535;10;30000;3;0;0;-5;0;0
93 92;symbol_i+3w-5_c;4536;10;30000;3;0;0;0;0;-5
94 93;symbol_m+3i-5_c;4537;10;30000;-5;0;0;3;0;0
95 94;symbol_m+3w-5_c;4538;10;30000;0;0;0;3;0;-5
96 95;symbol_w+3i-5_c;4539;10;30000;-5;0;0;0;0;3
97 96;symbol_w+3m-5_c;4540;10;30000;0;0;0;-5;0;3
98 97;symbol_s+3c-4_c;4541;10;30000;0;3;-4;0;0;0
99 98;symbol_s+3d-4_c;4542;10;30000;0;3;0;0;-4;0
100 99;symbol_c+3s-4_c;4543;10;50000;0;-4;3;0;0;0
101 100;symbol_c+3d-4_c;4544;10;50000;0;0;3;0;-4;0
102 101;symbol_d+3s-4_c;4545;10;50000;0;-4;0;0;3;0
103 102;symbol_d+3c-4_c;4546;10;50000;0;0;-4;0;3;0
104 103;symbol_i+3m-4_c;4547;10;50000;3;0;0;-4;0;0
105 104;symbol_i+3w-4_c;4548;10;50000;3;0;0;0;0;-4
106 105;symbol_m+3i-4_c;4549;10;50000;-4;0;0;3;0;0
107 106;symbol_m+3w-4_c;4550;10;50000;0;0;0;3;0;-4
108 107;symbol_w+3i-4_c;4551;10;50000;-4;0;0;0;0;3
109 108;symbol_w+3m-4_c;4552;10;50000;0;0;0;-4;0;3
110 109;symbol_s+4c-6_c;4565;10;36000;0;4;-6;0;0;0
111 110;symbol_s+4d-6_c;4566;10;36000;0;4;0;0;-6;0
112 111;symbol_c+4s-6_c;4567;10;50000;0;-6;4;0;0;0
113 112;symbol_c+4d-6_c;4568;10;50000;0;0;4;0;-6;0
114 113;symbol_d+4s-6_c;4569;10;30000;0;-6;0;0;4;0
115 114;symbol_d+4c-6_c;4570;10;36000;0;0;-6;0;4;0
116 115;symbol_i+4m-6_c;4571;10;36000;4;0;0;-6;0;0
117 116;symbol_i+4w-6_c;4572;10;30000;4;0;0;0;0;-6
118 117;symbol_m+4i-6_c;4573;10;36000;-6;0;0;4;0;0
119 118;symbol_m+4w-6_c;4574;10;36000;0;0;0;4;0;-6
120 119;symbol_w+4i-6_c;4575;10;36000;-6;0;0;0;0;4
121 120;symbol_w+4m-6_c;4576;10;30000;0;0;0;-6;0;4
122 121;symbol_s+4c-5_c;4577;10;36000;0;4;-5;0;0;0
123 122;symbol_s+4d-5_c;4578;10;90000;0;4;0;0;-5;0
124 123;symbol_c+4s-5_c;4579;10;90000;0;-5;4;0;0;0
125 124;symbol_c+4d-5_c;4580;10;90000;0;0;4;0;-5;0
126 125;symbol_d+4s-5_c;4581;10;36000;0;-5;0;0;4;0
127 126;symbol_d+4c-5_c;4582;10;36000;0;0;-5;0;4;0
128 127;symbol_i+4m-5_c;4583;10;90000;4;0;0;-5;0;0
129 128;symbol_i+4w-5_c;4584;10;36000;4;0;0;0;0;-5
130 129;symbol_m+4i-5_c;4585;10;90000;-5;0;0;4;0;0
131 130;symbol_m+4w-5_c;4586;10;90000;0;0;0;4;0;-5
132 131;symbol_w+4i-5_c;4587;10;36000;-5;0;0;0;0;4
133 132;symbol_w+4m-5_c;4588;10;36000;0;0;0;-5;0;4
134 133;symbol_s+1c-1_c;4553;10;50000;0;1;-1;0;0;0
135 134;symbol_s+1d-1_c;4554;10;50000;0;1;0;0;-1;0
136 135;symbol_c+1s-1_c;4555;10;50000;0;-1;1;0;0;0
137 136;symbol_c+1d-1_c;4556;10;50000;0;0;1;0;-1;0
138 137;symbol_d+1s-1_c;4557;10;50000;0;-1;0;0;1;0
139 138;symbol_d+1c-1_c;4558;10;50000;0;0;-1;0;1;0
140 139;symbol_i+1m-1_c;4559;10;90000;1;0;0;-1;0;0
141 140;symbol_i+1w-1_c;4560;10;50000;1;0;0;0;0;-1
142 141;symbol_m+1i-1_c;4561;10;50000;-1;0;0;1;0;0
143 142;symbol_m+1w-1_c;4562;10;50000;0;0;0;1;0;-1
144 143;symbol_w+1i-1_c;4563;10;50000;-1;0;0;0;0;1
145 144;symbol_w+1m-1_c;4564;10;50000;0;0;0;-1;0;1
146 145;symbol_s+2c-2_c;4589;10;60000;0;2;-2;0;0;0
147 146;symbol_s+2d-2_c;4590;10;60000;0;2;0;0;-2;0
148 147;symbol_c+2s-2_c;4591;10;60000;0;-2;2;0;0;0
149 148;symbol_c+2d-2_c;4592;10;60000;0;0;2;0;-2;0
150 149;symbol_d+2s-2_c;4593;10;60000;0;-2;0;0;2;0
151 150;symbol_d+2c-2_c;4594;10;60000;0;0;-2;0;2;0
152 151;symbol_i+2m-2_c;4595;10;60000;2;0;0;-2;0;0
153 152;symbol_i+2w-2_c;4596;10;90000;2;0;0;0;0;-2
154 153;symbol_m+2i-2_c;4597;10;60000;-2;0;0;2;0;0
155 154;symbol_m+2w-2_c;4598;10;60000;0;0;0;2;0;-2
156 155;symbol_w+2i-2_c;4599;10;60000;-2;0;0;0;0;2
157 156;symbol_w+2m-2_c;4600;10;60000;0;0;0;-2;0;2
158 157;symbol_s+3c-3_c;4601;10;90000;0;3;-3;0;0;0
159 158;symbol_s+3d-3_c;4602;10;90000;0;3;0;0;-3;0
160 159;symbol_c+3s-3_c;4603;10;90000;0;-3;3;0;0;0
161 160;symbol_c+3d-3_c;4604;10;90000;0;0;3;0;-3;0
162 161;symbol_d+3s-3_c;4605;10;90000;0;-3;0;0;3;0
163 162;symbol_d+3c-3_c;4606;10;90000;0;0;-3;0;3;0
164 163;symbol_i+3m-3_c;4607;10;90000;3;0;0;-3;0;0
165 164;symbol_i+3w-3_c;4608;10;90000;3;0;0;0;0;-3
166 165;symbol_m+3i-3_c;4609;10;90000;-3;0;0;3;0;0
167 166;symbol_m+3w-3_c;4610;10;90000;0;0;0;3;0;-3
168 167;symbol_w+3i-3_c;4611;10;90000;-3;0;0;0;0;3
169 168;symbol_w+3m-3_c;4612;10;90000;0;0;0;-3;0;3
170 169;symbol_s+4c-4_c;4613;10;145000;0;4;-4;0;0;0
171 170;symbol_s+4d-4_c;4614;10;145000;0;4;0;0;-4;0
172 171;symbol_c+4s-4_c;4615;10;145000;0;-4;4;0;0;0
173 172;symbol_c+4d-4_c;4616;10;145000;0;0;4;0;-4;0
174 173;symbol_d+4s-4_c;4617;10;145000;0;-4;0;0;4;0
175 174;symbol_d+4c-4_c;4618;10;145000;0;0;-4;0;4;0
176 175;symbol_i+4m-4_c;4619;10;145000;4;0;0;-4;0;0
177 176;symbol_i+4w-4_c;4620;10;145000;4;0;0;0;0;-4
178 177;symbol_m+4i-4_c;4621;10;145000;-4;0;0;4;0;0
179 178;symbol_m+4w-4_c;4622;10;145000;0;0;0;4;0;-4
180 179;symbol_w+4i-4_c;4623;10;145000;-4;0;0;0;0;4
181 180;symbol_w+4m-4_c;4624;10;145000;0;0;0;-4;0;4

View 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>

View File

@@ -172,4 +172,57 @@ public class Util
}
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;
}
}

View File

@@ -48,7 +48,6 @@ import org.l2jmobius.gameserver.datatables.OfflineTradeTable;
import org.l2jmobius.gameserver.datatables.SchemeBufferTable;
import org.l2jmobius.gameserver.datatables.SkillTable;
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.NpcWalkerRoutesTable;
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.CustomArmorSetsTable;
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.NpcTable;
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.FenceData;
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.geoengine.GeoEngine;
import org.l2jmobius.gameserver.handler.AdminCommandHandler;
@@ -274,15 +273,7 @@ public class GameServer
ClanTable.getInstance();
CharTemplateTable.getInstance();
LevelUpData.getInstance();
if (!HennaTable.getInstance().isInitialized())
{
throw new Exception("Could not initialize the Henna Table");
}
if (!HennaTreeTable.getInstance().isInitialized())
{
throw new Exception("Could not initialize the Henna Tree Table");
}
HennaData.getInstance();
if (!HelperBuffTable.getInstance().isInitialized())
{

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -52,7 +52,7 @@ public class FishData implements IXmlReader
@Override
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();
// First element is never read.

View File

@@ -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();
}
}

View File

@@ -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;
}
}

View File

@@ -35,7 +35,6 @@ import java.util.concurrent.Future;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import org.l2jmobius.Config;
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.NobleSkillTable;
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.RecipeTable;
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.ExperienceData;
import org.l2jmobius.gameserver.datatables.xml.FishData;
import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.geoengine.GeoEngine;
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> _snoopedPlayer = new ArrayList<>();
private ClassId _skillLearningClassId;
private final HennaInstance[] _henna = new HennaInstance[3];
private final Henna[] _henna = new Henna[3];
private int _hennaSTR;
private int _hennaINT;
private int _hennaDEX;
private int _hennaMEN;
private int _hennaWIT;
private int _hennaCON;
private Summon _summon = null;
private TamedBeastInstance _tamedBeast = null;
private Radar _radar;
@@ -9962,61 +9963,6 @@ public class PlayerInstance extends Playable
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>
* <BR>
@@ -10043,13 +9989,68 @@ public class PlayerInstance extends Playable
}
/**
* Return the number of Henna empty slot of the PlayerInstance.<BR>
* <BR>
* @return the henna empty slots
* Retrieve from the database all Henna of this Player, add them to _henna and calculate stats of the Player.
*/
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()
{
int totalSlots = 1 + getClassId().level();
int totalSlots = 0;
if (getClassId().level() == 1)
{
totalSlots = 2;
}
else
{
totalSlots = 3;
}
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>
* <BR>
* @param slot the slot
* @return true, if successful
* Remove a Henna of the Player, save update in the character_hennas table of the database and send HennaInfo/UserInfo packet to this Player.
* @param slot The slot number to make checks on.
* @return true if successful.
*/
public boolean removeHenna(int slot)
{
@@ -10082,106 +10082,89 @@ public class PlayerInstance extends Playable
slot--;
final HennaInstance henna = _henna[slot];
if (henna == null)
if (_henna[slot] == null)
{
return false;
}
Henna henna = _henna[slot];
_henna[slot] = null;
try (Connection con = DatabaseFactory.getConnection();
PreparedStatement ps = con.prepareStatement(DELETE_CHAR_HENNA))
try (Connection con = DatabaseFactory.getConnection())
{
ps.setInt(1, getObjectId());
ps.setInt(2, slot + 1);
ps.setInt(3, _classIndex);
ps.execute();
PreparedStatement statement = con.prepareStatement(DELETE_CHAR_HENNA);
statement.setInt(1, getObjectId());
statement.setInt(2, slot + 1);
statement.setInt(3, getClassIndex());
statement.execute();
statement.close();
}
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();
// Send Server->Client HennaInfo packet to this PlayerInstance
// Send HennaInfo packet to this Player
sendPacket(new HennaInfo(this));
// Send Server->Client UserInfo packet to this PlayerInstance
// Send UserInfo packet to this Player
sendPacket(new UserInfo(this));
reduceAdena("Henna", henna.getPrice() / 5, this, false);
// Add the recovered dyes to the player's inventory and notify them.
_inventory.addItem("Henna", henna.getItemIdDye(), henna.getAmountDyeRequire() / 2, this, null);
final SystemMessage sm = new SystemMessage(SystemMessageId.EARNED_S2_S1_S);
sm.addItemName(henna.getItemIdDye());
sm.addNumber(henna.getAmountDyeRequire() / 2);
sendPacket(sm);
addItem("Henna", henna.getDyeId(), Henna.getRequiredDyeAmount() / 2, this, true);
sendPacket(SystemMessageId.SYMBOL_DELETED);
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>
* <BR>
* @param henna the henna
* @return true, if successful
* 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.
* @param henna The Henna template to add.
*/
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++)
{
if (_henna[i] == null)
{
_henna[i] = henna;
// Calculate Henna modifiers of this PlayerInstance
// Calculate Henna modifiers of this Player
recalcHennaStats();
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(2, henna.getSymbolId());
statement.setInt(3, i + 1);
statement.setInt(4, getClassIndex());
statement.execute();
statement.close();
}
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
final HennaInfo hi = new HennaInfo(this);
sendPacket(hi);
// Send Server->Client UserInfo packet to this PlayerInstance
final UserInfo ui = new UserInfo(this);
sendPacket(ui);
getInventory().refreshWeight();
return true;
sendPacket(new HennaInfo(this));
sendPacket(new UserInfo(this));
sendPacket(SystemMessageId.SYMBOL_ADDED);
return;
}
}
return false;
}
/**
* Calculate Henna modifiers of this PlayerInstance.<BR>
* <BR>
* Calculate Henna modifiers of this Player.
*/
private void recalcHennaStats()
{
@@ -10198,12 +10181,13 @@ public class PlayerInstance extends Playable
{
continue;
}
_hennaINT += _henna[i].getStatINT();
_hennaSTR += _henna[i].getStatSTR();
_hennaMEN += _henna[i].getStatMEM();
_hennaCON += _henna[i].getStatCON();
_hennaWIT += _henna[i].getStatWIT();
_hennaDEX += _henna[i].getStatDEX();
_hennaINT += _henna[i].getINT();
_hennaSTR += _henna[i].getSTR();
_hennaMEN += _henna[i].getMEN();
_hennaCON += _henna[i].getCON();
_hennaWIT += _henna[i].getWIT();
_hennaDEX += _henna[i].getDEX();
}
if (_hennaINT > 5)
@@ -10238,12 +10222,10 @@ public class PlayerInstance extends Playable
}
/**
* Return the Henna of this PlayerInstance corresponding to the selected slot.<BR>
* <BR>
* @param slot the slot
* @return the hennas
* @param slot A slot to check.
* @return the Henna of this Player corresponding to the selected slot.
*/
public HennaInstance getHennas(int slot)
public Henna getHenna(int slot)
{
if ((slot < 1) || (slot > 3))
{
@@ -10253,61 +10235,31 @@ public class PlayerInstance extends Playable
return _henna[slot - 1];
}
/**
* Return the INT Henna modifier of this PlayerInstance.<BR>
* <BR>
* @return the henna stat int
*/
public int getHennaStatINT()
{
return _hennaINT;
}
/**
* Return the STR Henna modifier of this PlayerInstance.<BR>
* <BR>
* @return the henna stat str
*/
public int getHennaStatSTR()
{
return _hennaSTR;
}
/**
* Return the CON Henna modifier of this PlayerInstance.<BR>
* <BR>
* @return the henna stat con
*/
public int getHennaStatCON()
{
return _hennaCON;
}
/**
* Return the MEN Henna modifier of this PlayerInstance.<BR>
* <BR>
* @return the henna stat men
*/
public int getHennaStatMEN()
{
return _hennaMEN;
}
/**
* Return the WIT Henna modifier of this PlayerInstance.<BR>
* <BR>
* @return the henna stat wit
*/
public int getHennaStatWIT()
{
return _hennaWIT;
}
/**
* Return the DEX Henna modifier of this PlayerInstance.<BR>
* <BR>
* @return the henna stat dex
*/
public int getHennaStatDEX()
{
return _hennaDEX;

View File

@@ -16,40 +16,46 @@
*/
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.templates.NpcTemplate;
import org.l2jmobius.gameserver.network.SystemMessageId;
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 SymbolMakerInstance(int objectID, NpcTemplate template)
{
super(objectID, template);
}
@Override
public void onBypassFeedback(PlayerInstance player, String command)
{
if (command.equals("Draw"))
{
final HennaInstance[] henna = HennaTreeTable.getInstance().getAvailableHenna(player.getClassId());
final HennaEquipList hel = new HennaEquipList(player, henna);
player.sendPacket(hel);
player.sendPacket(new ItemList(player, false));
player.sendPacket(new HennaEquipList(player, HennaData.getInstance().getAvailableHennasFor(player)));
}
else if (command.equals("RemoveList"))
{
showRemoveChat(player);
}
else if (command.startsWith("Remove "))
{
if (!player.getClient().getFloodProtectors().getTransaction().tryPerformAction("HennaRemove"))
boolean hasHennas = false;
for (int i = 1; i <= 3; i++)
{
return;
if (player.getHenna(i) != null)
{
hasHennas = true;
}
}
final int slot = Integer.parseInt(command.substring(7));
player.removeHenna(slot);
player.sendPacket(new ItemList(player, false));
if (hasHennas)
{
player.sendPacket(new HennaRemoveList(player));
}
else
{
player.sendPacket(SystemMessageId.SYMBOL_NOT_FOUND);
}
}
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
public String getHtmlPath(int npcId, int val)
{

View File

@@ -16,84 +16,98 @@
*/
package org.l2jmobius.gameserver.model.items;
import org.l2jmobius.commons.util.Util;
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 int symbolId;
public String symbolName;
public int dye;
public int price;
public int amount;
public int statINT;
public int statSTR;
public int statCON;
public int statMEM;
public int statDEX;
public int statWIT;
private final int _symbolId;
private final int _dyeId;
private final int _price;
private final int _INT;
private final int _STR;
private final int _CON;
private final int _MEN;
private final int _DEX;
private final int _WIT;
private final int[] _classes;
public Henna(StatsSet set)
{
symbolId = set.getInt("symbol_id");
symbolName = ""; // set.getString("symbol_name");
dye = set.getInt("dye");
price = set.getInt("price");
amount = set.getInt("amount");
statINT = set.getInt("stat_INT");
statSTR = set.getInt("stat_STR");
statCON = set.getInt("stat_CON");
statMEM = set.getInt("stat_MEM");
statDEX = set.getInt("stat_DEX");
statWIT = set.getInt("stat_WIT");
_symbolId = set.getInt("symbolId");
_dyeId = set.getInt("dyeId");
_price = set.getInt("price");
_INT = set.getInt("INT");
_STR = set.getInt("STR");
_CON = set.getInt("CON");
_MEN = set.getInt("MEN");
_DEX = set.getInt("DEX");
_WIT = set.getInt("WIT");
_classes = set.getIntArray("classes", ";");
}
public int getSymbolId()
{
return symbolId;
return _symbolId;
}
public int getDyeId()
{
return dye;
return _dyeId;
}
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());
}
}

View File

@@ -973,6 +973,21 @@ public class GamePacketHandler implements IPacketHandler<GameClient>, IClientFac
msg = new RequestHennaEquip();
break;
}
case 0xbd:
{
msg = new RequestHennaRemoveList();
break;
}
case 0xbe:
{
msg = new RequestHennaItemRemoveInfo();
break;
}
case 0xbf:
{
msg = new RequestHennaRemove();
break;
}
case 0xc0:
{
// Clan Privileges

View File

@@ -2328,6 +2328,12 @@ public enum SystemMessageId
*/
SYMBOL_ADDED(877),
/**
* ID: 878<br>
* Message: The symbol has been deleted.
*/
SYMBOL_DELETED(878),
/**
* ID: 879<br>
* Message: The manor system is currently under maintenance.
@@ -2436,6 +2442,18 @@ public enum SystemMessageId
*/
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>
* Message: Current location : $s1, $s2, $s3 (Near Talking Island Village)

View File

@@ -21,6 +21,7 @@ import java.util.logging.Logger;
import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
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.GMViewPledgeInfo;
import org.l2jmobius.gameserver.network.serverpackets.GMViewQuestList;
@@ -58,6 +59,7 @@ public class RequestGMCommand extends GameClientPacket
case 1: // player status
{
sendPacket(new GMViewCharacterInfo(player));
sendPacket(new GMViewHennaInfo(player));
break;
}
case 2: // player clan
@@ -81,6 +83,7 @@ public class RequestGMCommand extends GameClientPacket
case 5: // player inventory
{
sendPacket(new GMViewItemList(player));
sendPacket(new GMViewHennaInfo(player));
break;
}
case 6: // player warehouse

View File

@@ -16,18 +16,11 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.Config;
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.datatables.xml.HennaData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.items.Henna;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
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
{
@@ -43,74 +36,50 @@ public class RequestHennaEquip extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
}
if (!getClient().getFloodProtectors().getTransaction().tryPerformAction("HennaEquip"))
final Henna henna = HennaData.getInstance().getHenna(_symbolId);
if (henna == null)
{
return;
}
final Henna template = HennaTable.getInstance().getTemplate(_symbolId);
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
if (!henna.canBeUsedBy(player))
{
player.sendPacket(SystemMessageId.CANT_DRAW_SYMBOL);
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);
}
return;
}
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);
}
}

View File

@@ -16,8 +16,7 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.datatables.csv.HennaTable;
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
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.HennaItemInfo;
@@ -36,22 +35,17 @@ public class RequestHennaItemInfo extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
}
final Henna template = HennaTable.getInstance().getTemplate(_symbolId);
final Henna template = HennaData.getInstance().getHenna(_symbolId);
if (template == null)
{
return;
}
final HennaInstance temp = new HennaInstance(template);
final HennaItemInfo hii = new HennaItemInfo(temp, player);
player.sendPacket(hii);
player.sendPacket(new HennaItemInfo(template, player));
}
}

View File

@@ -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));
}
}

View File

@@ -16,18 +16,12 @@
*/
package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.gameserver.datatables.sql.HennaTreeTable;
import org.l2jmobius.gameserver.model.actor.instance.HennaInstance;
import org.l2jmobius.gameserver.datatables.xml.HennaData;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.network.serverpackets.HennaEquipList;
/**
* RequestHennaList - 0xba
* @author Tempy
*/
public class RequestHennaList extends GameClientPacket
{
// This is just a trigger packet...
@SuppressWarnings("unused")
private int _unknown;
@@ -41,14 +35,11 @@ public class RequestHennaList extends GameClientPacket
protected void runImpl()
{
final PlayerInstance player = getClient().getPlayer();
if (player == null)
{
return;
}
final HennaInstance[] henna = HennaTreeTable.getInstance().getAvailableHenna(player.getClassId());
final HennaEquipList he = new HennaEquipList(player, henna);
player.sendPacket(he);
player.sendPacket(new HennaEquipList(player, HennaData.getInstance().getAvailableHennasFor(player)));
}
}

View File

@@ -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);
}
}
}
}

View File

@@ -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));
}
}

View File

@@ -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);
}
}
}

View File

@@ -16,15 +16,17 @@
*/
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.items.Henna;
public class HennaEquipList extends GameServerPacket
{
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;
_hennaEquipList = hennaEquipList;
@@ -34,32 +36,21 @@ public class HennaEquipList extends GameServerPacket
protected final void writeImpl()
{
writeC(0xe2);
writeD(_player.getAdena()); // activeChar current amount of aden
writeD(3); // available equip slot
// writeD(10); // total amount of symbol available which depends on difference classes
writeD(_hennaEquipList.length);
writeD(_player.getAdena());
writeD(3);
writeD(_hennaEquipList.size());
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.
*/
if (_player.getInventory().getItemByItemId(element.getItemIdDye()) != null)
// 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)
{
writeD(element.getSymbolId()); // symbolid
writeD(element.getItemIdDye()); // itemid of dye
writeD(element.getAmountDyeRequire()); // amount of dye require
writeD(element.getPrice()); // amount of aden require
writeD(temp.getSymbolId()); // symbolid
writeD(temp.getDyeId()); // itemid of dye
writeD(Henna.getRequiredDyeAmount()); // amount of dyes required
writeD(temp.getPrice()); // amount of adenas required
writeD(1); // meet the requirement or not
}
else
{
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
writeD(0x00);
}
}
}
}

View File

@@ -16,29 +16,28 @@
*/
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.items.Henna;
public class HennaInfo extends GameServerPacket
{
private final PlayerInstance _player;
private final HennaInstance[] _hennas = new HennaInstance[3];
private final int _count;
private final Henna[] _hennas = new Henna[3];
private int _count;
public HennaInfo(PlayerInstance player)
{
_player = player;
_count = 0;
int j = 0;
for (int i = 0; i < 3; i++)
{
final HennaInstance h = _player.getHennas(i + 1);
if (h != null)
Henna henna = _player.getHenna(i + 1);
if (henna != null)
{
_hennas[j++] = h;
_hennas[_count++] = henna;
}
}
_count = j;
}
@Override
@@ -53,13 +52,26 @@ public class HennaInfo extends GameServerPacket
writeC(_player.getHennaStatDEX()); // equip DEX
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
for (int i = 0; i < _count; i++)
{
writeD(_hennas[i].getSymbolId());
writeD(0x01);
writeD(_hennas[i].canBeUsedBy(_player) ? _hennas[i].getSymbolId() : 0);
}
}
}

View File

@@ -16,15 +16,15 @@
*/
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.items.Henna;
public class HennaItemInfo extends GameServerPacket
{
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;
_player = player;
@@ -35,23 +35,23 @@ public class HennaItemInfo extends GameServerPacket
{
writeC(0xe3);
writeD(_henna.getSymbolId()); // symbol Id
writeD(_henna.getItemIdDye()); // item id of dye
writeD(_henna.getAmountDyeRequire()); // total amount of dye require
writeD(_henna.getPrice()); // total amount of aden require to draw symbol
writeD(_henna.getDyeId()); // item id of dye
writeD(Henna.getRequiredDyeAmount()); // total amount of dye required
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(_player.getAdena());
writeD(_player.getINT()); // current INT
writeC(_player.getINT() + _henna.getStatINT()); // equip INT
writeC(_player.getINT() + _henna.getINT()); // equip INT
writeD(_player.getSTR()); // current STR
writeC(_player.getSTR() + _henna.getStatSTR()); // equip STR
writeC(_player.getSTR() + _henna.getSTR()); // equip STR
writeD(_player.getCON()); // current CON
writeC(_player.getCON() + _henna.getStatCON()); // equip CON
writeC(_player.getCON() + _henna.getCON()); // equip CON
writeD(_player.getMEN()); // current MEM
writeC(_player.getMEN() + _henna.getStatMEM()); // equip MEM
writeC(_player.getMEN() + _henna.getMEN()); // equip MEM
writeD(_player.getDEX()); // current DEX
writeC(_player.getDEX() + _henna.getStatDEX()); // equip DEX
writeC(_player.getDEX() + _henna.getDEX()); // equip DEX
writeD(_player.getWIT()); // current WIT
writeC(_player.getWIT() + _henna.getStatWIT()); // equip WIT
writeC(_player.getWIT() + _henna.getWIT()); // equip WIT
}
}

View File

@@ -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
}
}

View File

@@ -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);
}
}
}
}