From 56bc0a2d2b74c622c8300dcf0924d80b9b218dc4 Mon Sep 17 00:00:00 2001 From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com> Date: Sat, 25 Jan 2020 13:24:58 +0000 Subject: [PATCH] Replaced Henna CSV data with aCis free version XML data. --- .../db_installer/sql/game/henna_trees.sql | 7149 ----------------- .../dist/game/data/Hennas.xml | 183 + .../dist/game/data/csv/henna.csv | 182 - .../dist/game/data/xsd/Hennas.xsd | 26 + .../java/org/l2jmobius/commons/util/Util.java | 53 + .../org/l2jmobius/gameserver/GameServer.java | 13 +- .../gameserver/datatables/csv/HennaTable.java | 160 - .../datatables/sql/HennaTreeTable.java | 136 - .../gameserver/datatables/xml/FishData.java | 2 +- .../gameserver/datatables/xml/HennaData.java | 107 + .../model/actor/instance/HennaInstance.java | 214 - .../model/actor/instance/PlayerInstance.java | 264 +- .../actor/instance/SymbolMakerInstance.java | 70 +- .../gameserver/model/items/Henna.java | 94 +- .../gameserver/network/GamePacketHandler.java | 15 + .../gameserver/network/SystemMessageId.java | 18 + .../clientpackets/RequestGMCommand.java | 3 + .../clientpackets/RequestHennaEquip.java | 99 +- .../clientpackets/RequestHennaItemInfo.java | 12 +- .../RequestHennaItemRemoveInfo.java | 51 + .../clientpackets/RequestHennaList.java | 13 +- .../clientpackets/RequestHennaRemove.java | 59 + .../clientpackets/RequestHennaRemoveList.java | 47 + .../serverpackets/GMViewHennaInfo.java | 64 + .../network/serverpackets/HennaEquipList.java | 39 +- .../network/serverpackets/HennaInfo.java | 32 +- .../network/serverpackets/HennaItemInfo.java | 24 +- .../serverpackets/HennaItemRemoveInfo.java | 57 + .../serverpackets/HennaRemoveList.java | 52 + 29 files changed, 1011 insertions(+), 8227 deletions(-) delete mode 100644 L2J_Mobius_C6_Interlude/dist/db_installer/sql/game/henna_trees.sql create mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml delete mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv create mode 100644 L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd delete mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/csv/HennaTable.java delete mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/HennaTreeTable.java create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/HennaData.java delete mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/HennaInstance.java create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemRemoveInfo.java create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemoveList.java create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewHennaInfo.java create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemRemoveInfo.java create mode 100644 L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaRemoveList.java diff --git a/L2J_Mobius_C6_Interlude/dist/db_installer/sql/game/henna_trees.sql b/L2J_Mobius_C6_Interlude/dist/db_installer/sql/game/henna_trees.sql deleted file mode 100644 index ab468ff78b..0000000000 --- a/L2J_Mobius_C6_Interlude/dist/db_installer/sql/game/henna_trees.sql +++ /dev/null @@ -1,7149 +0,0 @@ --- --- Table structure for henna_trees --- -DROP TABLE IF EXISTS henna_trees; -CREATE TABLE `henna_trees` ( - `class_id` decimal(10,0) NOT NULL default 0, - `symbol_id` decimal(10,0) NOT NULL default 0, - PRIMARY KEY (`class_id`,`symbol_id`) -) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; - --- --- Records for table henna_trees --- - -insert into henna_trees values -(1,1), -(1,2), -(1,3), -(1,4), -(1,5), -(1,6), -(1,8), -(1,11), -(1,13), -(1,14), -(1,15), -(1,16), -(1,17), -(1,18), -(1,20), -(1,23), -(1,25), -(1,26), -(1,27), -(1,28), -(1,29), -(1,30), -(1,32), -(1,35), -(2,37), -(2,38), -(2,39), -(2,40), -(2,41), -(2,42), -(2,44), -(2,47), -(2,49), -(2,50), -(2,51), -(2,52), -(2,53), -(2,54), -(2,56), -(2,59), -(2,61), -(2,62), -(2,63), -(2,64), -(2,65), -(2,66), -(2,68), -(2,71), -(2,73), -(2,74), -(2,75), -(2,76), -(2,77), -(2,78), -(2,80), -(2,83), -(2,85), -(2,86), -(2,87), -(2,88), -(2,89), -(2,90), -(2,92), -(2,95), -(2,97), -(2,98), -(2,99), -(2,100), -(2,101), -(2,102), -(2,104), -(2,107), -(2,109), -(2,110), -(2,111), -(2,112), -(2,113), -(2,114), -(2,116), -(2,119), -(2,121), -(2,122), -(2,123), -(2,124), -(2,125), -(2,126), -(2,128), -(2,131), -(2,133), -(2,134), -(2,135), -(2,136), -(2,137), -(2,138), -(2,140), -(2,143), -(2,145), -(2,146), -(2,147), -(2,148), -(2,149), -(2,150), -(2,152), -(2,155), -(2,157), -(2,158), -(2,159), -(2,160), -(2,161), -(2,162), -(2,164), -(2,167), -(2,169), -(2,170), -(2,171), -(2,172), -(2,173), -(2,174), -(2,176), -(2,179), -(3,37), -(3,38), -(3,39), -(3,40), -(3,41), -(3,42), -(3,44), -(3,47), -(3,49), -(3,50), -(3,51), -(3,52), -(3,53), -(3,54), -(3,56), -(3,59), -(3,61), -(3,62), -(3,63), -(3,64), -(3,65), -(3,66), -(3,68), -(3,71), -(3,73), -(3,74), -(3,75), -(3,76), -(3,77), -(3,78), -(3,80), -(3,83), -(3,85), -(3,86), -(3,87), -(3,88), -(3,89), -(3,90), -(3,92), -(3,95), -(3,97), -(3,98), -(3,99), -(3,100), -(3,101), -(3,102), -(3,104), -(3,107), -(3,109), -(3,110), -(3,111), -(3,112), -(3,113), -(3,114), -(3,116), -(3,119), -(3,121), -(3,122), -(3,123), -(3,124), -(3,125), -(3,126), -(3,128), -(3,131), -(3,133), -(3,134), -(3,135), -(3,136), -(3,137), -(3,138), -(3,140), -(3,143), -(3,145), -(3,146), -(3,147), -(3,148), -(3,149), -(3,150), -(3,152), -(3,155), -(3,157), -(3,158), -(3,159), -(3,160), -(3,161), -(3,162), -(3,164), -(3,167), -(3,169), -(3,170), -(3,171), -(3,172), -(3,173), -(3,174), -(3,176), -(3,179), -(4,1), -(4,2), -(4,3), -(4,4), -(4,5), -(4,6), -(4,8), -(4,11), -(4,13), -(4,14), -(4,15), -(4,16), -(4,17), -(4,18), -(4,20), -(4,23), -(4,25), -(4,26), -(4,27), -(4,28), -(4,29), -(4,30), -(4,32), -(4,35), -(5,37), -(5,38), -(5,39), -(5,40), -(5,41), -(5,42), -(5,44), -(5,47), -(5,49), -(5,50), -(5,51), -(5,52), -(5,53), -(5,54), -(5,56), -(5,59), -(5,61), -(5,62), -(5,63), -(5,64), -(5,65), -(5,66), -(5,68), -(5,71), -(5,73), -(5,74), -(5,75), -(5,76), -(5,77), -(5,78), -(5,80), -(5,83), -(5,85), -(5,86), -(5,87), -(5,88), -(5,89), -(5,90), -(5,92), -(5,95), -(5,97), -(5,98), -(5,99), -(5,100), -(5,101), -(5,102), -(5,104), -(5,107), -(5,109), -(5,110), -(5,111), -(5,112), -(5,113), -(5,114), -(5,116), -(5,119), -(5,121), -(5,122), -(5,123), -(5,124), -(5,125), -(5,126), -(5,128), -(5,131), -(5,133), -(5,134), -(5,135), -(5,136), -(5,137), -(5,138), -(5,140), -(5,143), -(5,145), -(5,146), -(5,147), -(5,148), -(5,149), -(5,150), -(5,152), -(5,155), -(5,157), -(5,158), -(5,159), -(5,160), -(5,161), -(5,162), -(5,164), -(5,167), -(5,169), -(5,170), -(5,171), -(5,172), -(5,173), -(5,174), -(5,176), -(5,179), -(6,37), -(6,38), -(6,39), -(6,40), -(6,41), -(6,42), -(6,44), -(6,47), -(6,49), -(6,50), -(6,51), -(6,52), -(6,53), -(6,54), -(6,56), -(6,59), -(6,61), -(6,62), -(6,63), -(6,64), -(6,65), -(6,66), -(6,68), -(6,71), -(6,73), -(6,74), -(6,75), -(6,76), -(6,77), -(6,78), -(6,80), -(6,83), -(6,85), -(6,86), -(6,87), -(6,88), -(6,89), -(6,90), -(6,92), -(6,95), -(6,97), -(6,98), -(6,99), -(6,100), -(6,101), -(6,102), -(6,104), -(6,107), -(6,109), -(6,110), -(6,111), -(6,112), -(6,113), -(6,114), -(6,116), -(6,119), -(6,121), -(6,122), -(6,123), -(6,124), -(6,125), -(6,126), -(6,128), -(6,131), -(6,133), -(6,134), -(6,135), -(6,136), -(6,137), -(6,138), -(6,140), -(6,143), -(6,145), -(6,146), -(6,147), -(6,148), -(6,149), -(6,150), -(6,152), -(6,155), -(6,157), -(6,158), -(6,159), -(6,160), -(6,161), -(6,162), -(6,164), -(6,167), -(6,169), -(6,170), -(6,171), -(6,172), -(6,173), -(6,174), -(6,176), -(6,179), -(7,1), -(7,2), -(7,3), -(7,4), -(7,5), -(7,6), -(7,8), -(7,11), -(7,13), -(7,14), -(7,15), -(7,16), -(7,17), -(7,18), -(7,20), -(7,23), -(7,25), -(7,26), -(7,27), -(7,28), -(7,29), -(7,30), -(7,32), -(7,35), -(8,37), -(8,38), -(8,39), -(8,40), -(8,41), -(8,42), -(8,44), -(8,47), -(8,49), -(8,50), -(8,51), -(8,52), -(8,53), -(8,54), -(8,56), -(8,59), -(8,61), -(8,62), -(8,63), -(8,64), -(8,65), -(8,66), -(8,68), -(8,71), -(8,73), -(8,74), -(8,75), -(8,76), -(8,77), -(8,78), -(8,80), -(8,83), -(8,85), -(8,86), -(8,87), -(8,88), -(8,89), -(8,90), -(8,92), -(8,95), -(8,97), -(8,98), -(8,99), -(8,100), -(8,101), -(8,102), -(8,104), -(8,107), -(8,109), -(8,110), -(8,111), -(8,112), -(8,113), -(8,114), -(8,116), -(8,119), -(8,121), -(8,122), -(8,123), -(8,124), -(8,125), -(8,126), -(8,128), -(8,131), -(8,133), -(8,134), -(8,135), -(8,136), -(8,137), -(8,138), -(8,140), -(8,143), -(8,145), -(8,146), -(8,147), -(8,148), -(8,149), -(8,150), -(8,152), -(8,155), -(8,157), -(8,158), -(8,159), -(8,160), -(8,161), -(8,162), -(8,164), -(8,167), -(8,169), -(8,170), -(8,171), -(8,172), -(8,173), -(8,174), -(8,176), -(8,179), -(9,37), -(9,38), -(9,39), -(9,40), -(9,41), -(9,42), -(9,44), -(9,47), -(9,49), -(9,50), -(9,51), -(9,52), -(9,53), -(9,54), -(9,56), -(9,59), -(9,61), -(9,62), -(9,63), -(9,64), -(9,65), -(9,66), -(9,68), -(9,71), -(9,73), -(9,74), -(9,75), -(9,76), -(9,77), -(9,78), -(9,80), -(9,83), -(9,85), -(9,86), -(9,87), -(9,88), -(9,89), -(9,90), -(9,92), -(9,95), -(9,97), -(9,98), -(9,99), -(9,100), -(9,101), -(9,102), -(9,104), -(9,107), -(9,109), -(9,110), -(9,111), -(9,112), -(9,113), -(9,114), -(9,116), -(9,119), -(9,121), -(9,122), -(9,123), -(9,124), -(9,125), -(9,126), -(9,128), -(9,131), -(9,133), -(9,134), -(9,135), -(9,136), -(9,137), -(9,138), -(9,140), -(9,143), -(9,145), -(9,146), -(9,147), -(9,148), -(9,149), -(9,150), -(9,152), -(9,155), -(9,157), -(9,158), -(9,159), -(9,160), -(9,161), -(9,162), -(9,164), -(9,167), -(9,169), -(9,170), -(9,171), -(9,172), -(9,173), -(9,174), -(9,176), -(9,179), -(10,1), -(10,2), -(10,3), -(10,4), -(10,5), -(10,6), -(10,7), -(10,8), -(10,9), -(10,10), -(10,11), -(10,12), -(10,13), -(10,14), -(10,15), -(10,16), -(10,17), -(10,18), -(10,19), -(10,20), -(10,21), -(10,22), -(10,23), -(10,24), -(10,25), -(10,26), -(10,27), -(10,28), -(10,29), -(10,30), -(10,31), -(10,32), -(10,33), -(10,34), -(10,35), -(10,36), -(11,1), -(11,2), -(11,3), -(11,4), -(11,5), -(11,6), -(11,7), -(11,8), -(11,9), -(11,10), -(11,11), -(11,12), -(11,13), -(11,14), -(11,15), -(11,16), -(11,17), -(11,18), -(11,19), -(11,20), -(11,21), -(11,22), -(11,23), -(11,24), -(11,25), -(11,26), -(11,27), -(11,28), -(11,29), -(11,30), -(11,31), -(11,32), -(11,33), -(11,34), -(11,35), -(11,36), -(12,37), -(12,38), -(12,39), -(12,40), -(12,41), -(12,42), -(12,43), -(12,44), -(12,45), -(12,46), -(12,47), -(12,48), -(12,49), -(12,50), -(12,51), -(12,52), -(12,53), -(12,54), -(12,55), -(12,56), -(12,57), -(12,58), -(12,59), -(12,60), -(12,61), -(12,62), -(12,63), -(12,64), -(12,65), -(12,66), -(12,67), -(12,68), -(12,69), -(12,70), -(12,71), -(12,72), -(12,73), -(12,74), -(12,75), -(12,76), -(12,77), -(12,78), -(12,79), -(12,80), -(12,81), -(12,82), -(12,83), -(12,84), -(12,85), -(12,86), -(12,87), -(12,88), -(12,89), -(12,90), -(12,91), -(12,92), -(12,93), -(12,94), -(12,95), -(12,96), -(12,97), -(12,98), -(12,99), -(12,100), -(12,101), -(12,102), -(12,103), -(12,104), -(12,105), -(12,106), -(12,107), -(12,108), -(12,109), -(12,110), -(12,111), -(12,112), -(12,113), -(12,114), -(12,115), -(12,116), -(12,117), -(12,118), -(12,119), -(12,120), -(12,121), -(12,122), -(12,123), -(12,124), -(12,125), -(12,126), -(12,127), -(12,128), -(12,129), -(12,130), -(12,131), -(12,132), -(12,133), -(12,134), -(12,135), -(12,136), -(12,137), -(12,138), -(12,139), -(12,140), -(12,141), -(12,142), -(12,143), -(12,144), -(12,145), -(12,146), -(12,147), -(12,148), -(12,149), -(12,150), -(12,151), -(12,152), -(12,153), -(12,154), -(12,155), -(12,156), -(12,157), -(12,158), -(12,159), -(12,160), -(12,161), -(12,162), -(12,163), -(12,164), -(12,165), -(12,166), -(12,167), -(12,168), -(12,169), -(12,170), -(12,171), -(12,172), -(12,173), -(12,174), -(12,175), -(12,176), -(12,177), -(12,178), -(12,179), -(12,180), -(13,37), -(13,38), -(13,39), -(13,40), -(13,41), -(13,42), -(13,43), -(13,44), -(13,45), -(13,46), -(13,47), -(13,48), -(13,49), -(13,50), -(13,51), -(13,52), -(13,53), -(13,54), -(13,55), -(13,56), -(13,57), -(13,58), -(13,59), -(13,60), -(13,61), -(13,62), -(13,63), -(13,64), -(13,65), -(13,66), -(13,67), -(13,68), -(13,69), -(13,70), -(13,71), -(13,72), -(13,73), -(13,74), -(13,75), -(13,76), -(13,77), -(13,78), -(13,79), -(13,80), -(13,81), -(13,82), -(13,83), -(13,84), -(13,85), -(13,86), -(13,87), -(13,88), -(13,89), -(13,90), -(13,91), -(13,92), -(13,93), -(13,94), -(13,95), -(13,96), -(13,97), -(13,98), -(13,99), -(13,100), -(13,101), -(13,102), -(13,103), -(13,104), -(13,105), -(13,106), -(13,107), -(13,108), -(13,109), -(13,110), -(13,111), -(13,112), -(13,113), -(13,114), -(13,115), -(13,116), -(13,117), -(13,118), -(13,119), -(13,120), -(13,121), -(13,122), -(13,123), -(13,124), -(13,125), -(13,126), -(13,127), -(13,128), -(13,129), -(13,130), -(13,131), -(13,132), -(13,133), -(13,134), -(13,135), -(13,136), -(13,137), -(13,138), -(13,139), -(13,140), -(13,141), -(13,142), -(13,143), -(13,144), -(13,145), -(13,146), -(13,147), -(13,148), -(13,149), -(13,150), -(13,151), -(13,152), -(13,153), -(13,154), -(13,155), -(13,156), -(13,157), -(13,158), -(13,159), -(13,160), -(13,161), -(13,162), -(13,163), -(13,164), -(13,165), -(13,166), -(13,167), -(13,168), -(13,169), -(13,170), -(13,171), -(13,172); - -insert into henna_trees values -(13,173), -(13,174), -(13,175), -(13,176), -(13,177), -(13,178), -(13,179), -(13,180), -(14,37), -(14,38), -(14,39), -(14,40), -(14,41), -(14,42), -(14,43), -(14,44), -(14,45), -(14,46), -(14,47), -(14,48), -(14,49), -(14,50), -(14,51), -(14,52), -(14,53), -(14,54), -(14,55), -(14,56), -(14,57), -(14,58), -(14,59), -(14,60), -(14,61), -(14,62), -(14,63), -(14,64), -(14,65), -(14,66), -(14,67), -(14,68), -(14,69), -(14,70), -(14,71), -(14,72), -(14,73), -(14,74), -(14,75), -(14,76), -(14,77), -(14,78), -(14,79), -(14,80), -(14,81), -(14,82), -(14,83), -(14,84), -(14,85), -(14,86), -(14,87), -(14,88), -(14,89), -(14,90), -(14,91), -(14,92), -(14,93), -(14,94), -(14,95), -(14,96), -(14,97), -(14,98), -(14,99), -(14,100), -(14,101), -(14,102), -(14,103), -(14,104), -(14,105), -(14,106), -(14,107), -(14,108), -(14,109), -(14,110), -(14,111), -(14,112), -(14,113), -(14,114), -(14,115), -(14,116), -(14,117), -(14,118), -(14,119), -(14,120), -(14,121), -(14,122), -(14,123), -(14,124), -(14,125), -(14,126), -(14,127), -(14,128), -(14,129), -(14,130), -(14,131), -(14,132), -(14,133), -(14,134), -(14,135), -(14,136), -(14,137), -(14,138), -(14,139), -(14,140), -(14,141), -(14,142), -(14,143), -(14,144), -(14,145), -(14,146), -(14,147), -(14,148), -(14,149), -(14,150), -(14,151), -(14,152), -(14,153), -(14,154), -(14,155), -(14,156), -(14,157), -(14,158), -(14,159), -(14,160), -(14,161), -(14,162), -(14,163), -(14,164), -(14,165), -(14,166), -(14,167), -(14,168), -(14,169), -(14,170), -(14,171), -(14,172), -(14,173), -(14,174), -(14,175), -(14,176), -(14,177), -(14,178), -(14,179), -(14,180), -(15,1), -(15,2), -(15,3), -(15,4), -(15,5), -(15,6), -(15,10), -(15,12), -(15,13), -(15,14), -(15,15), -(15,16), -(15,17), -(15,18), -(15,22), -(15,24), -(15,25), -(15,26), -(15,27), -(15,28), -(15,29), -(15,30), -(15,34), -(15,36), -(16,37), -(16,38), -(16,39), -(16,40), -(16,41), -(16,42), -(16,46), -(16,48), -(16,49), -(16,50), -(16,51), -(16,52), -(16,53), -(16,54), -(16,58), -(16,60), -(16,61), -(16,62), -(16,63), -(16,64), -(16,65), -(16,66), -(16,70), -(16,72), -(16,73), -(16,74), -(16,75), -(16,76), -(16,77), -(16,78), -(16,82), -(16,84), -(16,85), -(16,86), -(16,87), -(16,88), -(16,89), -(16,90), -(16,94), -(16,96), -(16,97), -(16,98), -(16,99), -(16,100), -(16,101), -(16,102), -(16,106), -(16,108), -(16,109), -(16,110), -(16,111), -(16,112), -(16,113), -(16,114), -(16,118), -(16,120), -(16,121), -(16,122), -(16,123), -(16,124), -(16,125), -(16,126), -(16,130), -(16,132), -(16,133), -(16,134), -(16,135), -(16,136), -(16,137), -(16,138), -(16,142), -(16,144), -(16,145), -(16,146), -(16,147), -(16,148), -(16,149), -(16,150), -(16,154), -(16,156), -(16,157), -(16,158), -(16,159), -(16,160), -(16,161), -(16,162), -(16,166), -(16,168), -(16,169), -(16,170), -(16,171), -(16,172), -(16,173), -(16,174), -(16,178), -(16,180), -(17,37), -(17,38), -(17,39), -(17,40), -(17,41), -(17,42), -(17,46), -(17,48), -(17,49), -(17,50), -(17,51), -(17,52), -(17,53), -(17,54), -(17,58), -(17,60), -(17,61), -(17,62), -(17,63), -(17,64), -(17,65), -(17,66), -(17,70), -(17,72), -(17,73), -(17,74), -(17,75), -(17,76), -(17,77), -(17,78), -(17,82), -(17,84), -(17,85), -(17,86), -(17,87), -(17,88), -(17,89), -(17,90), -(17,94), -(17,96), -(17,97), -(17,98), -(17,99), -(17,100), -(17,101), -(17,102), -(17,106), -(17,108), -(17,109), -(17,110), -(17,111), -(17,112), -(17,113), -(17,114), -(17,118), -(17,120), -(17,121), -(17,122), -(17,123), -(17,124), -(17,125), -(17,126), -(17,130), -(17,132), -(17,133), -(17,134), -(17,135), -(17,136), -(17,137), -(17,138), -(17,142), -(17,144), -(17,145), -(17,146), -(17,147), -(17,148), -(17,149), -(17,150), -(17,154), -(17,156), -(17,157), -(17,158), -(17,159), -(17,160), -(17,161), -(17,162), -(17,166), -(17,168), -(17,169), -(17,170), -(17,171), -(17,172), -(17,173), -(17,174), -(17,178), -(17,180), -(19,1), -(19,2), -(19,3), -(19,4), -(19,5), -(19,6), -(19,8), -(19,11), -(19,13), -(19,14), -(19,15), -(19,16), -(19,17), -(19,18), -(19,20), -(19,23), -(19,25), -(19,26), -(19,27), -(19,28), -(19,29), -(19,30), -(19,32), -(19,35), -(20,37), -(20,38), -(20,39), -(20,40), -(20,41), -(20,42), -(20,44), -(20,47), -(20,49), -(20,50), -(20,51), -(20,52), -(20,53), -(20,54), -(20,56), -(20,59), -(20,61), -(20,62), -(20,63), -(20,64), -(20,65), -(20,66), -(20,68), -(20,71), -(20,73), -(20,74), -(20,75), -(20,76), -(20,77), -(20,78), -(20,80), -(20,83), -(20,85), -(20,86), -(20,87), -(20,88), -(20,89), -(20,90), -(20,92), -(20,95), -(20,97), -(20,98), -(20,99), -(20,100), -(20,101), -(20,102), -(20,104), -(20,107), -(20,109), -(20,110), -(20,111), -(20,112), -(20,113), -(20,114), -(20,116), -(20,119), -(20,121), -(20,122), -(20,123), -(20,124), -(20,125), -(20,126), -(20,128), -(20,131), -(20,133), -(20,134), -(20,135), -(20,136), -(20,137), -(20,138), -(20,140), -(20,143), -(20,145), -(20,146), -(20,147), -(20,148), -(20,149), -(20,150), -(20,152), -(20,155), -(20,157), -(20,158), -(20,159), -(20,160), -(20,161), -(20,162), -(20,164), -(20,167), -(20,169), -(20,170), -(20,171), -(20,172), -(20,173), -(20,174), -(20,176), -(20,179), -(21,37), -(21,38), -(21,39), -(21,40), -(21,41), -(21,42), -(21,44), -(21,47), -(21,49), -(21,50), -(21,51), -(21,52), -(21,53), -(21,54), -(21,56), -(21,59), -(21,61), -(21,62), -(21,63), -(21,64), -(21,65), -(21,66), -(21,68), -(21,71), -(21,73), -(21,74), -(21,75), -(21,76), -(21,77), -(21,78), -(21,80), -(21,83), -(21,85), -(21,86), -(21,87), -(21,88), -(21,89), -(21,90), -(21,92), -(21,95), -(21,97), -(21,98), -(21,99), -(21,100), -(21,101), -(21,102), -(21,104), -(21,107), -(21,109), -(21,110), -(21,111), -(21,112), -(21,113), -(21,114), -(21,116), -(21,119), -(21,121), -(21,122), -(21,123), -(21,124), -(21,125), -(21,126), -(21,128), -(21,131), -(21,133), -(21,134), -(21,135), -(21,136), -(21,137), -(21,138), -(21,140), -(21,143), -(21,145), -(21,146), -(21,147), -(21,148), -(21,149), -(21,150), -(21,152), -(21,155), -(21,157), -(21,158), -(21,159), -(21,160), -(21,161), -(21,162), -(21,164), -(21,167), -(21,169), -(21,170), -(21,171), -(21,172), -(21,173), -(21,174), -(21,176), -(21,179), -(22,1), -(22,2), -(22,3), -(22,4), -(22,5), -(22,6), -(22,8), -(22,11), -(22,13), -(22,14), -(22,15), -(22,16), -(22,17), -(22,18), -(22,20), -(22,23), -(22,25), -(22,26), -(22,27), -(22,28), -(22,29), -(22,30), -(22,32), -(22,35), -(23,37), -(23,38), -(23,39), -(23,40), -(23,41), -(23,42), -(23,44), -(23,47), -(23,49), -(23,50), -(23,51), -(23,52), -(23,53), -(23,54), -(23,56), -(23,59), -(23,61), -(23,62), -(23,63), -(23,64), -(23,65), -(23,66), -(23,68), -(23,71), -(23,73), -(23,74), -(23,75), -(23,76), -(23,77), -(23,78), -(23,80), -(23,83), -(23,85), -(23,86), -(23,87), -(23,88), -(23,89), -(23,90), -(23,92), -(23,95), -(23,97), -(23,98), -(23,99), -(23,100), -(23,101), -(23,102), -(23,104), -(23,107), -(23,109), -(23,110), -(23,111), -(23,112), -(23,113), -(23,114), -(23,116), -(23,119), -(23,121), -(23,122), -(23,123), -(23,124), -(23,125), -(23,126), -(23,128), -(23,131), -(23,133), -(23,134), -(23,135), -(23,136), -(23,137), -(23,138), -(23,140), -(23,143), -(23,145), -(23,146), -(23,147), -(23,148), -(23,149), -(23,150), -(23,152), -(23,155), -(23,157), -(23,158), -(23,159), -(23,160), -(23,161), -(23,162), -(23,164), -(23,167), -(23,169), -(23,170), -(23,171), -(23,172), -(23,173), -(23,174), -(23,176), -(23,179), -(24,37), -(24,38), -(24,39), -(24,40), -(24,41), -(24,42), -(24,44), -(24,47), -(24,49), -(24,50), -(24,51), -(24,52), -(24,53), -(24,54), -(24,56), -(24,59), -(24,61), -(24,62), -(24,63), -(24,64), -(24,65), -(24,66), -(24,68), -(24,71), -(24,73), -(24,74), -(24,75), -(24,76), -(24,77), -(24,78), -(24,80), -(24,83), -(24,85), -(24,86), -(24,87), -(24,88), -(24,89), -(24,90), -(24,92), -(24,95), -(24,97), -(24,98), -(24,99), -(24,100), -(24,101), -(24,102), -(24,104), -(24,107), -(24,109), -(24,110), -(24,111), -(24,112), -(24,113), -(24,114), -(24,116), -(24,119), -(24,121), -(24,122), -(24,123), -(24,124), -(24,125), -(24,126), -(24,128), -(24,131), -(24,133), -(24,134), -(24,135), -(24,136), -(24,137), -(24,138), -(24,140), -(24,143), -(24,145), -(24,146), -(24,147), -(24,148), -(24,149), -(24,150), -(24,152), -(24,155), -(24,157), -(24,158), -(24,159), -(24,160), -(24,161), -(24,162), -(24,164), -(24,167), -(24,169), -(24,170), -(24,171), -(24,172), -(24,173), -(24,174), -(24,176), -(24,179), -(26,1), -(26,2), -(26,3), -(26,4), -(26,5), -(26,6), -(26,7), -(26,8), -(26,9), -(26,10), -(26,11), -(26,12), -(26,13), -(26,14), -(26,15), -(26,16), -(26,17), -(26,18), -(26,19), -(26,20), -(26,21), -(26,22), -(26,23), -(26,24), -(26,25), -(26,26), -(26,27), -(26,28), -(26,29), -(26,30), -(26,31), -(26,32), -(26,33), -(26,34), -(26,35), -(26,36), -(27,37), -(27,38), -(27,39), -(27,40), -(27,41), -(27,42), -(27,43), -(27,44), -(27,45), -(27,46), -(27,47), -(27,48), -(27,49), -(27,50), -(27,51), -(27,52), -(27,53), -(27,54), -(27,55), -(27,56), -(27,57), -(27,58), -(27,59), -(27,60), -(27,61), -(27,62), -(27,63), -(27,64), -(27,65), -(27,66), -(27,67), -(27,68), -(27,69), -(27,70), -(27,71), -(27,72), -(27,73), -(27,74), -(27,75), -(27,76), -(27,77), -(27,78), -(27,79), -(27,80), -(27,81), -(27,82), -(27,83), -(27,84), -(27,85), -(27,86), -(27,87), -(27,88), -(27,89), -(27,90), -(27,91), -(27,92), -(27,93), -(27,94), -(27,95), -(27,96), -(27,97), -(27,98), -(27,99), -(27,100), -(27,101), -(27,102), -(27,103), -(27,104), -(27,105), -(27,106), -(27,107), -(27,108), -(27,109), -(27,110), -(27,111), -(27,112), -(27,113), -(27,114), -(27,115), -(27,116), -(27,117), -(27,118), -(27,119), -(27,120), -(27,121), -(27,122), -(27,123), -(27,124), -(27,125), -(27,126), -(27,127), -(27,128), -(27,129), -(27,130), -(27,131), -(27,132), -(27,133), -(27,134), -(27,135), -(27,136), -(27,137), -(27,138), -(27,139), -(27,140), -(27,141), -(27,142), -(27,143), -(27,144), -(27,145), -(27,146), -(27,147), -(27,148), -(27,149), -(27,150), -(27,151), -(27,152), -(27,153), -(27,154), -(27,155), -(27,156), -(27,157), -(27,158), -(27,159), -(27,160), -(27,161), -(27,162), -(27,163), -(27,164), -(27,165), -(27,166), -(27,167), -(27,168), -(27,169), -(27,170), -(27,171), -(27,172), -(27,173), -(27,174), -(27,175), -(27,176), -(27,177), -(27,178), -(27,179), -(27,180), -(28,37), -(28,38), -(28,39), -(28,40), -(28,41), -(28,42), -(28,43), -(28,44), -(28,45), -(28,46), -(28,47), -(28,48), -(28,49), -(28,50), -(28,51), -(28,52), -(28,53), -(28,54), -(28,55), -(28,56); - -insert into henna_trees values -(28,57), -(28,58), -(28,59), -(28,60), -(28,61), -(28,62), -(28,63), -(28,64), -(28,65), -(28,66), -(28,67), -(28,68), -(28,69), -(28,70), -(28,71), -(28,72), -(28,73), -(28,74), -(28,75), -(28,76), -(28,77), -(28,78), -(28,79), -(28,80), -(28,81), -(28,82), -(28,83), -(28,84), -(28,85), -(28,86), -(28,87), -(28,88), -(28,89), -(28,90), -(28,91), -(28,92), -(28,93), -(28,94), -(28,95), -(28,96), -(28,97), -(28,98), -(28,99), -(28,100), -(28,101), -(28,102), -(28,103), -(28,104), -(28,105), -(28,106), -(28,107), -(28,108), -(28,109), -(28,110), -(28,111), -(28,112), -(28,113), -(28,114), -(28,115), -(28,116), -(28,117), -(28,118), -(28,119), -(28,120), -(28,121), -(28,122), -(28,123), -(28,124), -(28,125), -(28,126), -(28,127), -(28,128), -(28,129), -(28,130), -(28,131), -(28,132), -(28,133), -(28,134), -(28,135), -(28,136), -(28,137), -(28,138), -(28,139), -(28,140), -(28,141), -(28,142), -(28,143), -(28,144), -(28,145), -(28,146), -(28,147), -(28,148), -(28,149), -(28,150), -(28,151), -(28,152), -(28,153), -(28,154), -(28,155), -(28,156), -(28,157), -(28,158), -(28,159), -(28,160), -(28,161), -(28,162), -(28,163), -(28,164), -(28,165), -(28,166), -(28,167), -(28,168), -(28,169), -(28,170), -(28,171), -(28,172), -(28,173), -(28,174), -(28,175), -(28,176), -(28,177), -(28,178), -(28,179), -(28,180), -(29,1), -(29,2), -(29,3), -(29,4), -(29,5), -(29,6), -(29,10), -(29,12), -(29,13), -(29,14), -(29,15), -(29,16), -(29,17), -(29,18), -(29,22), -(29,24), -(29,25), -(29,26), -(29,27), -(29,28), -(29,29), -(29,30), -(29,34), -(29,36), -(30,37), -(30,38), -(30,39), -(30,40), -(30,41), -(30,42), -(30,46), -(30,48), -(30,49), -(30,50), -(30,51), -(30,52), -(30,53), -(30,54), -(30,58), -(30,60), -(30,61), -(30,62), -(30,63), -(30,64), -(30,65), -(30,66), -(30,70), -(30,72), -(30,73), -(30,74), -(30,75), -(30,76), -(30,77), -(30,78), -(30,82), -(30,84), -(30,85), -(30,86), -(30,87), -(30,88), -(30,89), -(30,90), -(30,94), -(30,96), -(30,97), -(30,98), -(30,99), -(30,100), -(30,101), -(30,102), -(30,106), -(30,108), -(30,109), -(30,110), -(30,111), -(30,112), -(30,113), -(30,114), -(30,118), -(30,120), -(30,121), -(30,122), -(30,123), -(30,124), -(30,125), -(30,126), -(30,130), -(30,132), -(30,133), -(30,134), -(30,135), -(30,136), -(30,137), -(30,138), -(30,142), -(30,144), -(30,145), -(30,146), -(30,147), -(30,148), -(30,149), -(30,150), -(30,154), -(30,156), -(30,157), -(30,158), -(30,159), -(30,160), -(30,161), -(30,162), -(30,166), -(30,168), -(30,169), -(30,170), -(30,171), -(30,172), -(30,173), -(30,174), -(30,178), -(30,180), -(32,1), -(32,2), -(32,3), -(32,4), -(32,5), -(32,6), -(32,8), -(32,11), -(32,13), -(32,14), -(32,15), -(32,16), -(32,17), -(32,18), -(32,20), -(32,23), -(32,25), -(32,26), -(32,27), -(32,28), -(32,29), -(32,30), -(32,32), -(32,35), -(33,37), -(33,38), -(33,39), -(33,40), -(33,41), -(33,42), -(33,44), -(33,47), -(33,49), -(33,50), -(33,51), -(33,52), -(33,53), -(33,54), -(33,56), -(33,59), -(33,61), -(33,62), -(33,63), -(33,64), -(33,65), -(33,66), -(33,68), -(33,71), -(33,73), -(33,74), -(33,75), -(33,76), -(33,77), -(33,78), -(33,80), -(33,83), -(33,85), -(33,86), -(33,87), -(33,88), -(33,89), -(33,90), -(33,92), -(33,95), -(33,97), -(33,98), -(33,99), -(33,100), -(33,101), -(33,102), -(33,104), -(33,107), -(33,109), -(33,110), -(33,111), -(33,112), -(33,113), -(33,114), -(33,116), -(33,119), -(33,121), -(33,122), -(33,123), -(33,124), -(33,125), -(33,126), -(33,128), -(33,131), -(33,133), -(33,134), -(33,135), -(33,136), -(33,137), -(33,138), -(33,140), -(33,143), -(33,145), -(33,146), -(33,147), -(33,148), -(33,149), -(33,150), -(33,152), -(33,155), -(33,157), -(33,158), -(33,159), -(33,160), -(33,161), -(33,162), -(33,164), -(33,167), -(33,169), -(33,170), -(33,171), -(33,172), -(33,173), -(33,174), -(33,176), -(33,179), -(34,37), -(34,38), -(34,39), -(34,40), -(34,41), -(34,42), -(34,44), -(34,47), -(34,49), -(34,50), -(34,51), -(34,52), -(34,53), -(34,54), -(34,56), -(34,59), -(34,61), -(34,62), -(34,63), -(34,64), -(34,65), -(34,66), -(34,68), -(34,71), -(34,73), -(34,74), -(34,75), -(34,76), -(34,77), -(34,78), -(34,80), -(34,83), -(34,85), -(34,86), -(34,87), -(34,88), -(34,89), -(34,90), -(34,92), -(34,95), -(34,97), -(34,98), -(34,99), -(34,100), -(34,101), -(34,102), -(34,104), -(34,107), -(34,109), -(34,110), -(34,111), -(34,112), -(34,113), -(34,114), -(34,116), -(34,119), -(34,121), -(34,122), -(34,123), -(34,124), -(34,125), -(34,126), -(34,128), -(34,131), -(34,133), -(34,134), -(34,135), -(34,136), -(34,137), -(34,138), -(34,140), -(34,143), -(34,145), -(34,146), -(34,147), -(34,148), -(34,149), -(34,150), -(34,152), -(34,155), -(34,157), -(34,158), -(34,159), -(34,160), -(34,161), -(34,162), -(34,164), -(34,167), -(34,169), -(34,170), -(34,171), -(34,172), -(34,173), -(34,174), -(34,176), -(34,179), -(35,1), -(35,2), -(35,3), -(35,4), -(35,5), -(35,6), -(35,8), -(35,11), -(35,13), -(35,14), -(35,15), -(35,16), -(35,17), -(35,18), -(35,20), -(35,23), -(35,25), -(35,26), -(35,27), -(35,28), -(35,29), -(35,30), -(35,32), -(35,35), -(36,37), -(36,38), -(36,39), -(36,40), -(36,41), -(36,42), -(36,44), -(36,47), -(36,49), -(36,50), -(36,51), -(36,52), -(36,53), -(36,54), -(36,56), -(36,59), -(36,61), -(36,62), -(36,63), -(36,64), -(36,65), -(36,66), -(36,68), -(36,71), -(36,73), -(36,74), -(36,75), -(36,76), -(36,77), -(36,78), -(36,80), -(36,83), -(36,85), -(36,86), -(36,87), -(36,88), -(36,89), -(36,90), -(36,92), -(36,95), -(36,97), -(36,98), -(36,99), -(36,100), -(36,101), -(36,102), -(36,104), -(36,107), -(36,109), -(36,110), -(36,111), -(36,112), -(36,113), -(36,114), -(36,116), -(36,119), -(36,121), -(36,122), -(36,123), -(36,124), -(36,125), -(36,126), -(36,128), -(36,131), -(36,133), -(36,134), -(36,135), -(36,136), -(36,137), -(36,138), -(36,140), -(36,143), -(36,145), -(36,146), -(36,147), -(36,148), -(36,149), -(36,150), -(36,152), -(36,155), -(36,157), -(36,158), -(36,159), -(36,160), -(36,161), -(36,162), -(36,164), -(36,167), -(36,169), -(36,170), -(36,171), -(36,172), -(36,173), -(36,174), -(36,176), -(36,179), -(37,37), -(37,38), -(37,39), -(37,40), -(37,41), -(37,42), -(37,44), -(37,47), -(37,49), -(37,50), -(37,51), -(37,52), -(37,53), -(37,54), -(37,56), -(37,59), -(37,61), -(37,62), -(37,63), -(37,64), -(37,65), -(37,66), -(37,68), -(37,71), -(37,73), -(37,74), -(37,75), -(37,76), -(37,77), -(37,78), -(37,80), -(37,83), -(37,85), -(37,86), -(37,87), -(37,88), -(37,89), -(37,90), -(37,92), -(37,95), -(37,97), -(37,98), -(37,99), -(37,100), -(37,101), -(37,102), -(37,104), -(37,107), -(37,109), -(37,110), -(37,111), -(37,112), -(37,113), -(37,114), -(37,116), -(37,119), -(37,121), -(37,122), -(37,123), -(37,124), -(37,125), -(37,126), -(37,128), -(37,131), -(37,133), -(37,134), -(37,135), -(37,136), -(37,137), -(37,138), -(37,140), -(37,143), -(37,145), -(37,146), -(37,147), -(37,148), -(37,149), -(37,150), -(37,152), -(37,155), -(37,157), -(37,158), -(37,159), -(37,160), -(37,161), -(37,162), -(37,164), -(37,167), -(37,169), -(37,170), -(37,171), -(37,172), -(37,173), -(37,174), -(37,176), -(37,179), -(39,1), -(39,2), -(39,3), -(39,4), -(39,5), -(39,6), -(39,7), -(39,8), -(39,9), -(39,10), -(39,11), -(39,12), -(39,13), -(39,14), -(39,15), -(39,16), -(39,17), -(39,18), -(39,19), -(39,20), -(39,21), -(39,22), -(39,23), -(39,24), -(39,25), -(39,26), -(39,27), -(39,28), -(39,29), -(39,30), -(39,31), -(39,32), -(39,33), -(39,34), -(39,35), -(39,36), -(40,37), -(40,38), -(40,39), -(40,40), -(40,41), -(40,42), -(40,43), -(40,44), -(40,45), -(40,46), -(40,47), -(40,48), -(40,49), -(40,50), -(40,51), -(40,52), -(40,53), -(40,54), -(40,55), -(40,56), -(40,57), -(40,58), -(40,59), -(40,60), -(40,61), -(40,62), -(40,63), -(40,64), -(40,65), -(40,66), -(40,67), -(40,68), -(40,69), -(40,70), -(40,71), -(40,72), -(40,73), -(40,74), -(40,75), -(40,76), -(40,77), -(40,78), -(40,79), -(40,80), -(40,81), -(40,82), -(40,83), -(40,84), -(40,85), -(40,86), -(40,87), -(40,88), -(40,89), -(40,90), -(40,91), -(40,92), -(40,93), -(40,94), -(40,95), -(40,96), -(40,97), -(40,98), -(40,99), -(40,100), -(40,101), -(40,102), -(40,103), -(40,104), -(40,105), -(40,106), -(40,107), -(40,108), -(40,109), -(40,110), -(40,111), -(40,112), -(40,113), -(40,114), -(40,115), -(40,116), -(40,117), -(40,118), -(40,119), -(40,120), -(40,121), -(40,122), -(40,123), -(40,124), -(40,125), -(40,126), -(40,127), -(40,128), -(40,129), -(40,130), -(40,131), -(40,132), -(40,133), -(40,134), -(40,135), -(40,136), -(40,137), -(40,138), -(40,139), -(40,140), -(40,141), -(40,142), -(40,143), -(40,144), -(40,145), -(40,146), -(40,147), -(40,148), -(40,149), -(40,150), -(40,151), -(40,152), -(40,153), -(40,154), -(40,155), -(40,156), -(40,157), -(40,158), -(40,159), -(40,160), -(40,161), -(40,162), -(40,163), -(40,164), -(40,165), -(40,166), -(40,167), -(40,168), -(40,169), -(40,170), -(40,171), -(40,172), -(40,173), -(40,174), -(40,175), -(40,176), -(40,177), -(40,178), -(40,179), -(40,180), -(41,37), -(41,38), -(41,39), -(41,40), -(41,41), -(41,42), -(41,43), -(41,44), -(41,45), -(41,46), -(41,47), -(41,48), -(41,49), -(41,50), -(41,51), -(41,52), -(41,53), -(41,54), -(41,55), -(41,56), -(41,57), -(41,58), -(41,59), -(41,60), -(41,61), -(41,62), -(41,63), -(41,64), -(41,65), -(41,66), -(41,67), -(41,68), -(41,69), -(41,70), -(41,71), -(41,72), -(41,73), -(41,74), -(41,75), -(41,76), -(41,77), -(41,78), -(41,79), -(41,80), -(41,81), -(41,82), -(41,83), -(41,84), -(41,85), -(41,86), -(41,87), -(41,88), -(41,89), -(41,90), -(41,91), -(41,92), -(41,93), -(41,94), -(41,95), -(41,96), -(41,97), -(41,98), -(41,99), -(41,100), -(41,101), -(41,102), -(41,103), -(41,104), -(41,105), -(41,106), -(41,107), -(41,108), -(41,109), -(41,110), -(41,111), -(41,112), -(41,113), -(41,114), -(41,115), -(41,116), -(41,117), -(41,118), -(41,119), -(41,120), -(41,121), -(41,122), -(41,123), -(41,124), -(41,125), -(41,126), -(41,127), -(41,128), -(41,129), -(41,130), -(41,131), -(41,132), -(41,133), -(41,134), -(41,135), -(41,136), -(41,137), -(41,138), -(41,139), -(41,140), -(41,141), -(41,142), -(41,143), -(41,144), -(41,145), -(41,146), -(41,147), -(41,148), -(41,149), -(41,150), -(41,151), -(41,152), -(41,153), -(41,154), -(41,155), -(41,156), -(41,157), -(41,158), -(41,159), -(41,160), -(41,161), -(41,162), -(41,163), -(41,164), -(41,165), -(41,166), -(41,167), -(41,168), -(41,169), -(41,170), -(41,171), -(41,172), -(41,173), -(41,174), -(41,175), -(41,176), -(41,177), -(41,178), -(41,179), -(41,180); - -insert into henna_trees values -(42,1), -(42,2), -(42,3), -(42,4), -(42,5), -(42,6), -(42,10), -(42,12), -(42,13), -(42,14), -(42,15), -(42,16), -(42,17), -(42,18), -(42,22), -(42,24), -(42,25), -(42,26), -(42,27), -(42,28), -(42,29), -(42,30), -(42,34), -(42,36), -(43,37), -(43,38), -(43,39), -(43,40), -(43,41), -(43,42), -(43,46), -(43,48), -(43,49), -(43,50), -(43,51), -(43,52), -(43,53), -(43,54), -(43,58), -(43,60), -(43,61), -(43,62), -(43,63), -(43,64), -(43,65), -(43,66), -(43,70), -(43,72), -(43,73), -(43,74), -(43,75), -(43,76), -(43,77), -(43,78), -(43,82), -(43,84), -(43,85), -(43,86), -(43,87), -(43,88), -(43,89), -(43,90), -(43,94), -(43,96), -(43,97), -(43,98), -(43,99), -(43,100), -(43,101), -(43,102), -(43,106), -(43,108), -(43,109), -(43,110), -(43,111), -(43,112), -(43,113), -(43,114), -(43,118), -(43,120), -(43,121), -(43,122), -(43,123), -(43,124), -(43,125), -(43,126), -(43,130), -(43,132), -(43,133), -(43,134), -(43,135), -(43,136), -(43,137), -(43,138), -(43,142), -(43,144), -(43,145), -(43,146), -(43,147), -(43,148), -(43,149), -(43,150), -(43,154), -(43,156), -(43,157), -(43,158), -(43,159), -(43,160), -(43,161), -(43,162), -(43,166), -(43,168), -(43,169), -(43,170), -(43,171), -(43,172), -(43,173), -(43,174), -(43,178), -(43,180), -(45,1), -(45,2), -(45,3), -(45,4), -(45,5), -(45,6), -(45,8), -(45,11), -(45,13), -(45,14), -(45,15), -(45,16), -(45,17), -(45,18), -(45,20), -(45,23), -(45,25), -(45,26), -(45,27), -(45,28), -(45,29), -(45,30), -(45,32), -(45,35), -(46,37), -(46,38), -(46,39), -(46,40), -(46,41), -(46,42), -(46,44), -(46,47), -(46,49), -(46,50), -(46,51), -(46,52), -(46,53), -(46,54), -(46,56), -(46,59), -(46,61), -(46,62), -(46,63), -(46,64), -(46,65), -(46,66), -(46,68), -(46,71), -(46,73), -(46,74), -(46,75), -(46,76), -(46,77), -(46,78), -(46,80), -(46,83), -(46,85), -(46,86), -(46,87), -(46,88), -(46,89), -(46,90), -(46,92), -(46,95), -(46,97), -(46,98), -(46,99), -(46,100), -(46,101), -(46,102), -(46,104), -(46,107), -(46,109), -(46,110), -(46,111), -(46,112), -(46,113), -(46,114), -(46,116), -(46,119), -(46,121), -(46,122), -(46,123), -(46,124), -(46,125), -(46,126), -(46,128), -(46,131), -(46,133), -(46,134), -(46,135), -(46,136), -(46,137), -(46,138), -(46,140), -(46,143), -(46,145), -(46,146), -(46,147), -(46,148), -(46,149), -(46,150), -(46,152), -(46,155), -(46,157), -(46,158), -(46,159), -(46,160), -(46,161), -(46,162), -(46,164), -(46,167), -(46,169), -(46,170), -(46,171), -(46,172), -(46,173), -(46,174), -(46,176), -(46,179), -(47,1), -(47,2), -(47,3), -(47,4), -(47,5), -(47,6), -(47,8), -(47,11), -(47,13), -(47,14), -(47,15), -(47,16), -(47,17), -(47,18), -(47,20), -(47,23), -(47,25), -(47,26), -(47,27), -(47,28), -(47,29), -(47,30), -(47,32), -(47,35), -(48,37), -(48,38), -(48,39), -(48,40), -(48,41), -(48,42), -(48,44), -(48,47), -(48,49), -(48,50), -(48,51), -(48,52), -(48,53), -(48,54), -(48,56), -(48,59), -(48,61), -(48,62), -(48,63), -(48,64), -(48,65), -(48,66), -(48,68), -(48,71), -(48,73), -(48,74), -(48,75), -(48,76), -(48,77), -(48,78), -(48,80), -(48,83), -(48,85), -(48,86), -(48,87), -(48,88), -(48,89), -(48,90), -(48,92), -(48,95), -(48,97), -(48,98), -(48,99), -(48,100), -(48,101), -(48,102), -(48,104), -(48,107), -(48,109), -(48,110), -(48,111), -(48,112), -(48,113), -(48,114), -(48,116), -(48,119), -(48,121), -(48,122), -(48,123), -(48,124), -(48,125), -(48,126), -(48,128), -(48,131), -(48,133), -(48,134), -(48,135), -(48,136), -(48,137), -(48,138), -(48,140), -(48,143), -(48,145), -(48,146), -(48,147), -(48,148), -(48,149), -(48,150), -(48,152), -(48,155), -(48,157), -(48,158), -(48,159), -(48,160), -(48,161), -(48,162), -(48,164), -(48,167), -(48,169), -(48,170), -(48,171), -(48,172), -(48,173), -(48,174), -(48,176), -(48,179), -(50,1), -(50,2), -(50,3), -(50,4), -(50,5), -(50,6), -(50,10), -(50,12), -(50,13), -(50,14), -(50,15), -(50,16), -(50,17), -(50,18), -(50,22), -(50,24), -(50,25), -(50,26), -(50,27), -(50,28), -(50,29), -(50,30), -(50,34), -(50,36), -(51,37), -(51,38), -(51,39), -(51,40), -(51,41), -(51,42), -(51,46), -(51,48), -(51,49), -(51,50), -(51,51), -(51,52), -(51,53), -(51,54), -(51,58), -(51,60), -(51,61), -(51,62), -(51,63), -(51,64), -(51,65), -(51,66), -(51,70), -(51,72), -(51,73), -(51,74), -(51,75), -(51,76), -(51,77), -(51,78), -(51,82), -(51,84), -(51,85), -(51,86), -(51,87), -(51,88), -(51,89), -(51,90), -(51,94), -(51,96), -(51,97), -(51,98), -(51,99), -(51,100), -(51,101), -(51,102), -(51,106), -(51,108), -(51,109), -(51,110), -(51,111), -(51,112), -(51,113), -(51,114), -(51,118), -(51,120), -(51,121), -(51,122), -(51,123), -(51,124), -(51,125), -(51,126), -(51,130), -(51,132), -(51,133), -(51,134), -(51,135), -(51,136), -(51,137), -(51,138), -(51,142), -(51,144), -(51,145), -(51,146), -(51,147), -(51,148), -(51,149), -(51,150), -(51,154), -(51,156), -(51,157), -(51,158), -(51,159), -(51,160), -(51,161), -(51,162), -(51,166), -(51,168), -(51,169), -(51,170), -(51,171), -(51,172), -(51,173), -(51,174), -(51,178), -(51,180), -(52,37), -(52,38), -(52,39), -(52,40), -(52,41), -(52,42), -(52,46), -(52,48), -(52,49), -(52,50), -(52,51), -(52,52), -(52,53), -(52,54), -(52,58), -(52,60), -(52,61), -(52,62), -(52,63), -(52,64), -(52,65), -(52,66), -(52,70), -(52,72), -(52,73), -(52,74), -(52,75), -(52,76), -(52,77), -(52,78), -(52,82), -(52,84), -(52,85), -(52,86), -(52,87), -(52,88), -(52,89), -(52,90), -(52,94), -(52,96), -(52,97), -(52,98), -(52,99), -(52,100), -(52,101), -(52,102), -(52,106), -(52,108), -(52,109), -(52,110), -(52,111), -(52,112), -(52,113), -(52,114), -(52,118), -(52,120), -(52,121), -(52,122), -(52,123), -(52,124), -(52,125), -(52,126), -(52,130), -(52,132), -(52,133), -(52,134), -(52,135), -(52,136), -(52,137), -(52,138), -(52,142), -(52,144), -(52,145), -(52,146), -(52,147), -(52,148), -(52,149), -(52,150), -(52,154), -(52,156), -(52,157), -(52,158), -(52,159), -(52,160), -(52,161), -(52,162), -(52,166), -(52,168), -(52,169), -(52,170), -(52,171), -(52,172), -(52,173), -(52,174), -(52,178), -(52,180), -(54,1), -(54,2), -(54,3), -(54,4), -(54,5), -(54,6), -(54,8), -(54,11), -(54,13), -(54,14), -(54,15), -(54,16), -(54,17), -(54,18), -(54,20), -(54,23), -(54,25), -(54,26), -(54,27), -(54,28), -(54,29), -(54,30), -(54,32), -(54,35), -(55,37), -(55,38), -(55,39), -(55,40), -(55,41), -(55,42), -(55,44), -(55,47), -(55,49), -(55,50), -(55,51), -(55,52), -(55,53), -(55,54), -(55,56), -(55,59), -(55,61), -(55,62), -(55,63), -(55,64), -(55,65), -(55,66), -(55,68), -(55,71), -(55,73), -(55,74), -(55,75), -(55,76), -(55,77), -(55,78), -(55,80), -(55,83), -(55,85), -(55,86), -(55,87), -(55,88), -(55,89), -(55,90), -(55,92), -(55,95), -(55,97), -(55,98), -(55,99), -(55,100), -(55,101), -(55,102), -(55,104), -(55,107), -(55,109), -(55,110), -(55,111), -(55,112), -(55,113), -(55,114), -(55,116), -(55,119), -(55,121), -(55,122), -(55,123), -(55,124), -(55,125), -(55,126), -(55,128), -(55,131), -(55,133), -(55,134), -(55,135), -(55,136), -(55,137), -(55,138), -(55,140), -(55,143), -(55,145), -(55,146), -(55,147), -(55,148), -(55,149), -(55,150), -(55,152), -(55,155), -(55,157), -(55,158), -(55,159), -(55,160), -(55,161), -(55,162), -(55,164), -(55,167), -(55,169), -(55,170), -(55,171), -(55,172), -(55,173), -(55,174), -(55,176), -(55,179), -(56,1), -(56,2), -(56,3), -(56,4), -(56,5), -(56,6), -(56,8), -(56,11), -(56,13), -(56,14), -(56,15), -(56,16), -(56,17), -(56,18), -(56,20), -(56,23), -(56,25), -(56,26), -(56,27), -(56,28), -(56,29), -(56,30), -(56,32), -(56,35), -(57,37), -(57,38), -(57,39), -(57,40), -(57,41), -(57,42), -(57,44), -(57,47), -(57,49), -(57,50), -(57,51), -(57,52), -(57,53), -(57,54), -(57,56), -(57,59), -(57,61), -(57,62), -(57,63), -(57,64), -(57,65), -(57,66), -(57,68), -(57,71), -(57,73), -(57,74), -(57,75), -(57,76), -(57,77), -(57,78), -(57,80), -(57,83), -(57,85), -(57,86), -(57,87), -(57,88), -(57,89), -(57,90), -(57,92), -(57,95), -(57,97), -(57,98), -(57,99), -(57,100), -(57,101), -(57,102), -(57,104), -(57,107), -(57,109), -(57,110), -(57,111), -(57,112), -(57,113), -(57,114), -(57,116), -(57,119), -(57,121), -(57,122), -(57,123), -(57,124), -(57,125), -(57,126), -(57,128), -(57,131), -(57,133), -(57,134), -(57,135), -(57,136), -(57,137), -(57,138), -(57,140), -(57,143), -(57,145), -(57,146), -(57,147), -(57,148), -(57,149), -(57,150), -(57,152), -(57,155), -(57,157), -(57,158), -(57,159), -(57,160), -(57,161), -(57,162), -(57,164), -(57,167), -(57,169), -(57,170), -(57,171), -(57,172), -(57,173), -(57,174), -(57,176), -(57,179), -(88,37), -(88,38), -(88,39), -(88,40), -(88,41), -(88,42), -(88,44), -(88,47), -(88,49), -(88,50), -(88,51), -(88,52), -(88,53), -(88,54), -(88,56), -(88,59), -(88,61), -(88,62), -(88,63), -(88,64), -(88,65), -(88,66), -(88,68), -(88,71), -(88,73), -(88,74), -(88,75), -(88,76), -(88,77), -(88,78), -(88,80), -(88,83), -(88,85), -(88,86), -(88,87), -(88,88), -(88,89), -(88,90), -(88,92), -(88,95), -(88,97), -(88,98), -(88,99), -(88,100), -(88,101), -(88,102), -(88,104), -(88,107), -(88,109), -(88,110), -(88,111), -(88,112), -(88,113), -(88,114), -(88,116), -(88,119), -(88,121), -(88,122), -(88,123), -(88,124), -(88,125), -(88,126), -(88,128), -(88,131), -(88,133), -(88,134), -(88,135), -(88,136), -(88,137), -(88,138), -(88,140), -(88,143), -(88,145), -(88,146), -(88,147), -(88,148), -(88,149), -(88,150), -(88,152), -(88,155), -(88,157), -(88,158), -(88,159), -(88,160), -(88,161), -(88,162), -(88,164), -(88,167), -(88,169), -(88,170), -(88,171), -(88,172), -(88,173), -(88,174), -(88,176), -(88,179), -(89,37), -(89,38), -(89,39), -(89,40), -(89,41), -(89,42), -(89,44), -(89,47), -(89,49), -(89,50), -(89,51), -(89,52), -(89,53), -(89,54), -(89,56), -(89,59), -(89,61), -(89,62), -(89,63), -(89,64), -(89,65), -(89,66), -(89,68), -(89,71), -(89,73), -(89,74), -(89,75), -(89,76), -(89,77), -(89,78), -(89,80), -(89,83), -(89,85), -(89,86), -(89,87), -(89,88), -(89,89), -(89,90), -(89,92), -(89,95), -(89,97), -(89,98), -(89,99), -(89,100), -(89,101), -(89,102), -(89,104), -(89,107), -(89,109), -(89,110), -(89,111), -(89,112), -(89,113), -(89,114), -(89,116), -(89,119), -(89,121), -(89,122), -(89,123), -(89,124), -(89,125), -(89,126), -(89,128), -(89,131), -(89,133), -(89,134), -(89,135), -(89,136), -(89,137), -(89,138), -(89,140), -(89,143), -(89,145), -(89,146), -(89,147), -(89,148), -(89,149), -(89,150), -(89,152), -(89,155), -(89,157), -(89,158), -(89,159), -(89,160), -(89,161), -(89,162), -(89,164), -(89,167), -(89,169), -(89,170), -(89,171), -(89,172), -(89,173), -(89,174), -(89,176), -(89,179), -(90,37), -(90,38), -(90,39), -(90,40), -(90,41), -(90,42), -(90,44), -(90,47), -(90,49), -(90,50), -(90,51), -(90,52), -(90,53), -(90,54), -(90,56), -(90,59), -(90,61), -(90,62), -(90,63), -(90,64), -(90,65), -(90,66), -(90,68), -(90,71), -(90,73), -(90,74), -(90,75), -(90,76), -(90,77), -(90,78), -(90,80), -(90,83), -(90,85), -(90,86), -(90,87), -(90,88), -(90,89), -(90,90), -(90,92), -(90,95), -(90,97), -(90,98), -(90,99), -(90,100), -(90,101), -(90,102), -(90,104), -(90,107), -(90,109), -(90,110), -(90,111), -(90,112), -(90,113), -(90,114), -(90,116), -(90,119), -(90,121), -(90,122), -(90,123), -(90,124), -(90,125), -(90,126), -(90,128), -(90,131), -(90,133), -(90,134), -(90,135), -(90,136), -(90,137), -(90,138), -(90,140), -(90,143), -(90,145), -(90,146), -(90,147), -(90,148), -(90,149), -(90,150), -(90,152), -(90,155), -(90,157), -(90,158), -(90,159), -(90,160), -(90,161), -(90,162), -(90,164), -(90,167), -(90,169), -(90,170), -(90,171), -(90,172), -(90,173), -(90,174), -(90,176), -(90,179), -(91,37), -(91,38), -(91,39), -(91,40), -(91,41), -(91,42), -(91,44), -(91,47), -(91,49), -(91,50), -(91,51), -(91,52), -(91,53), -(91,54), -(91,56), -(91,59), -(91,61), -(91,62), -(91,63), -(91,64), -(91,65), -(91,66), -(91,68), -(91,71), -(91,73), -(91,74), -(91,75), -(91,76), -(91,77), -(91,78), -(91,80), -(91,83), -(91,85), -(91,86), -(91,87), -(91,88), -(91,89), -(91,90), -(91,92), -(91,95), -(91,97), -(91,98), -(91,99), -(91,100), -(91,101), -(91,102), -(91,104), -(91,107), -(91,109), -(91,110), -(91,111), -(91,112), -(91,113), -(91,114), -(91,116), -(91,119), -(91,121), -(91,122), -(91,123), -(91,124), -(91,125), -(91,126), -(91,128), -(91,131), -(91,133), -(91,134), -(91,135), -(91,136), -(91,137), -(91,138), -(91,140), -(91,143), -(91,145), -(91,146), -(91,147), -(91,148), -(91,149), -(91,150), -(91,152), -(91,155), -(91,157), -(91,158), -(91,159), -(91,160), -(91,161), -(91,162), -(91,164), -(91,167), -(91,169), -(91,170), -(91,171), -(91,172), -(91,173), -(91,174), -(91,176), -(91,179), -(92,37), -(92,38), -(92,39), -(92,40), -(92,41), -(92,42), -(92,44), -(92,47), -(92,49), -(92,50), -(92,51), -(92,52), -(92,53), -(92,54), -(92,56), -(92,59), -(92,61), -(92,62), -(92,63), -(92,64), -(92,65), -(92,66), -(92,68), -(92,71), -(92,73), -(92,74), -(92,75), -(92,76), -(92,77), -(92,78), -(92,80), -(92,83), -(92,85), -(92,86), -(92,87), -(92,88), -(92,89), -(92,90), -(92,92), -(92,95), -(92,97), -(92,98), -(92,99), -(92,100), -(92,101), -(92,102), -(92,104), -(92,107), -(92,109), -(92,110), -(92,111), -(92,112), -(92,113), -(92,114), -(92,116), -(92,119), -(92,121), -(92,122), -(92,123), -(92,124), -(92,125), -(92,126), -(92,128), -(92,131), -(92,133), -(92,134), -(92,135), -(92,136), -(92,137), -(92,138), -(92,140), -(92,143), -(92,145), -(92,146), -(92,147), -(92,148), -(92,149), -(92,150), -(92,152), -(92,155), -(92,157), -(92,158), -(92,159), -(92,160), -(92,161), -(92,162), -(92,164), -(92,167), -(92,169), -(92,170), -(92,171), -(92,172), -(92,173), -(92,174), -(92,176), -(92,179), -(93,37), -(93,38), -(93,39), -(93,40), -(93,41), -(93,42), -(93,44), -(93,47), -(93,49), -(93,50), -(93,51), -(93,52), -(93,53), -(93,54), -(93,56), -(93,59), -(93,61), -(93,62), -(93,63), -(93,64), -(93,65), -(93,66), -(93,68), -(93,71), -(93,73), -(93,74), -(93,75), -(93,76), -(93,77), -(93,78), -(93,80), -(93,83), -(93,85), -(93,86), -(93,87), -(93,88), -(93,89), -(93,90), -(93,92), -(93,95), -(93,97), -(93,98), -(93,99), -(93,100), -(93,101), -(93,102), -(93,104), -(93,107), -(93,109), -(93,110), -(93,111), -(93,112), -(93,113), -(93,114), -(93,116), -(93,119), -(93,121), -(93,122), -(93,123), -(93,124), -(93,125), -(93,126), -(93,128), -(93,131), -(93,133), -(93,134), -(93,135), -(93,136), -(93,137), -(93,138), -(93,140), -(93,143), -(93,145), -(93,146), -(93,147), -(93,148), -(93,149), -(93,150), -(93,152), -(93,155), -(93,157), -(93,158), -(93,159), -(93,160), -(93,161), -(93,162), -(93,164), -(93,167), -(93,169), -(93,170), -(93,171), -(93,172), -(93,173), -(93,174), -(93,176), -(93,179), -(94,37), -(94,38), -(94,39), -(94,40), -(94,41), -(94,42), -(94,43), -(94,44), -(94,45), -(94,46), -(94,47), -(94,48), -(94,49), -(94,50), -(94,51), -(94,52), -(94,53), -(94,54), -(94,55), -(94,56), -(94,57), -(94,58), -(94,59), -(94,60), -(94,61), -(94,62), -(94,63), -(94,64), -(94,65), -(94,66), -(94,67), -(94,68), -(94,69), -(94,70), -(94,71), -(94,72), -(94,73), -(94,74), -(94,75), -(94,76), -(94,77), -(94,78), -(94,79), -(94,80), -(94,81), -(94,82), -(94,83), -(94,84), -(94,85), -(94,86), -(94,87), -(94,88), -(94,89), -(94,90), -(94,91), -(94,92), -(94,93), -(94,94), -(94,95), -(94,96), -(94,97), -(94,98), -(94,99), -(94,100), -(94,101), -(94,102), -(94,103), -(94,104), -(94,105), -(94,106), -(94,107), -(94,108), -(94,109), -(94,110), -(94,111), -(94,112), -(94,113), -(94,114), -(94,115), -(94,116), -(94,117), -(94,118), -(94,119), -(94,120), -(94,121), -(94,122), -(94,123), -(94,124), -(94,125), -(94,126), -(94,127), -(94,128), -(94,129), -(94,130), -(94,131), -(94,132), -(94,133), -(94,134), -(94,135), -(94,136), -(94,137), -(94,138), -(94,139), -(94,140), -(94,141), -(94,142), -(94,143), -(94,144), -(94,145), -(94,146), -(94,147), -(94,148), -(94,149), -(94,150), -(94,151), -(94,152), -(94,153), -(94,154), -(94,155), -(94,156), -(94,157), -(94,158), -(94,159), -(94,160), -(94,161), -(94,162), -(94,163), -(94,164), -(94,165), -(94,166), -(94,167), -(94,168), -(94,169), -(94,170), -(94,171), -(94,172), -(94,173), -(94,174), -(94,175), -(94,176), -(94,177), -(94,178), -(94,179), -(94,180), -(95,37), -(95,38), -(95,39), -(95,40), -(95,41), -(95,42), -(95,43), -(95,44), -(95,45), -(95,46), -(95,47), -(95,48), -(95,49), -(95,50), -(95,51), -(95,52), -(95,53), -(95,54), -(95,55), -(95,56), -(95,57), -(95,58), -(95,59), -(95,60), -(95,61), -(95,62), -(95,63), -(95,64), -(95,65), -(95,66), -(95,67), -(95,68), -(95,69), -(95,70), -(95,71), -(95,72), -(95,73), -(95,74), -(95,75), -(95,76), -(95,77), -(95,78), -(95,79), -(95,80), -(95,81), -(95,82), -(95,83), -(95,84), -(95,85), -(95,86), -(95,87), -(95,88), -(95,89), -(95,90), -(95,91), -(95,92), -(95,93), -(95,94), -(95,95), -(95,96), -(95,97), -(95,98), -(95,99), -(95,100), -(95,101), -(95,102), -(95,103), -(95,104), -(95,105), -(95,106), -(95,107), -(95,108), -(95,109), -(95,110), -(95,111), -(95,112), -(95,113), -(95,114), -(95,115), -(95,116), -(95,117), -(95,118), -(95,119), -(95,120), -(95,121), -(95,122), -(95,123), -(95,124), -(95,125), -(95,126), -(95,127), -(95,128), -(95,129), -(95,130), -(95,131), -(95,132), -(95,133), -(95,134), -(95,135), -(95,136), -(95,137), -(95,138), -(95,139), -(95,140), -(95,141), -(95,142), -(95,143), -(95,144), -(95,145), -(95,146), -(95,147), -(95,148), -(95,149), -(95,150), -(95,151), -(95,152), -(95,153), -(95,154), -(95,155), -(95,156), -(95,157), -(95,158), -(95,159), -(95,160), -(95,161), -(95,162), -(95,163), -(95,164), -(95,165), -(95,166), -(95,167), -(95,168), -(95,169), -(95,170), -(95,171), -(95,172), -(95,173), -(95,174), -(95,175), -(95,176), -(95,177), -(95,178), -(95,179), -(95,180), -(96,37), -(96,38), -(96,39), -(96,40), -(96,41), -(96,42), -(96,43), -(96,44), -(96,45), -(96,46), -(96,47), -(96,48), -(96,49), -(96,50), -(96,51), -(96,52), -(96,53), -(96,54), -(96,55), -(96,56), -(96,57), -(96,58), -(96,59), -(96,60), -(96,61), -(96,62), -(96,63), -(96,64), -(96,65), -(96,66), -(96,67), -(96,68), -(96,69), -(96,70), -(96,71), -(96,72), -(96,73), -(96,74), -(96,75), -(96,76), -(96,77), -(96,78), -(96,79), -(96,80), -(96,81), -(96,82), -(96,83), -(96,84), -(96,85), -(96,86), -(96,87), -(96,88), -(96,89), -(96,90), -(96,91), -(96,92), -(96,93), -(96,94), -(96,95), -(96,96), -(96,97), -(96,98), -(96,99), -(96,100), -(96,101), -(96,102), -(96,103), -(96,104), -(96,105), -(96,106), -(96,107), -(96,108), -(96,109), -(96,110), -(96,111), -(96,112), -(96,113), -(96,114), -(96,115), -(96,116), -(96,117), -(96,118), -(96,119), -(96,120), -(96,121), -(96,122), -(96,123), -(96,124), -(96,125), -(96,126), -(96,127), -(96,128), -(96,129), -(96,130), -(96,131), -(96,132), -(96,133), -(96,134), -(96,135), -(96,136), -(96,137), -(96,138), -(96,139), -(96,140), -(96,141), -(96,142), -(96,143), -(96,144), -(96,145), -(96,146), -(96,147), -(96,148), -(96,149), -(96,150), -(96,151), -(96,152), -(96,153), -(96,154), -(96,155), -(96,156), -(96,157), -(96,158), -(96,159), -(96,160), -(96,161), -(96,162), -(96,163), -(96,164), -(96,165), -(96,166), -(96,167), -(96,168), -(96,169), -(96,170), -(96,171), -(96,172), -(96,173), -(96,174), -(96,175), -(96,176), -(96,177), -(96,178), -(96,179), -(96,180), -(97,37), -(97,38), -(97,39), -(97,40), -(97,41), -(97,42), -(97,46), -(97,48), -(97,49), -(97,50), -(97,51), -(97,52), -(97,53), -(97,54), -(97,58), -(97,60), -(97,61), -(97,62), -(97,63), -(97,64), -(97,65), -(97,66), -(97,70), -(97,72), -(97,73), -(97,74), -(97,75), -(97,76), -(97,77), -(97,78), -(97,82), -(97,84), -(97,85), -(97,86), -(97,87), -(97,88), -(97,89), -(97,90), -(97,94), -(97,96), -(97,97), -(97,98), -(97,99), -(97,100), -(97,101), -(97,102), -(97,106), -(97,108), -(97,109), -(97,110), -(97,111), -(97,112), -(97,113), -(97,114), -(97,118), -(97,120), -(97,121), -(97,122), -(97,123), -(97,124), -(97,125), -(97,126), -(97,130), -(97,132), -(97,133), -(97,134), -(97,135), -(97,136), -(97,137), -(97,138), -(97,142), -(97,144), -(97,145), -(97,146), -(97,147), -(97,148), -(97,149), -(97,150), -(97,154), -(97,156), -(97,157), -(97,158), -(97,159), -(97,160), -(97,161), -(97,162), -(97,166), -(97,168), -(97,169), -(97,170), -(97,171), -(97,172), -(97,173), -(97,174), -(97,178), -(97,180), -(98,37), -(98,38), -(98,39), -(98,40), -(98,41), -(98,42), -(98,46), -(98,48), -(98,49), -(98,50), -(98,51), -(98,52), -(98,53), -(98,54), -(98,58), -(98,60), -(98,61), -(98,62), -(98,63), -(98,64), -(98,65), -(98,66), -(98,70), -(98,72), -(98,73), -(98,74), -(98,75), -(98,76), -(98,77), -(98,78), -(98,82), -(98,84), -(98,85), -(98,86), -(98,87), -(98,88), -(98,89), -(98,90), -(98,94), -(98,96), -(98,97), -(98,98), -(98,99), -(98,100), -(98,101), -(98,102), -(98,106), -(98,108), -(98,109), -(98,110), -(98,111), -(98,112), -(98,113), -(98,114), -(98,118), -(98,120), -(98,121), -(98,122), -(98,123), -(98,124), -(98,125), -(98,126), -(98,130), -(98,132), -(98,133), -(98,134), -(98,135), -(98,136), -(98,137), -(98,138), -(98,142), -(98,144), -(98,145), -(98,146), -(98,147), -(98,148), -(98,149), -(98,150), -(98,154), -(98,156), -(98,157), -(98,158), -(98,159), -(98,160), -(98,161), -(98,162), -(98,166), -(98,168), -(98,169), -(98,170), -(98,171), -(98,172), -(98,173), -(98,174), -(98,178), -(98,180), -(99,37), -(99,38), -(99,39), -(99,40), -(99,41), -(99,42), -(99,44), -(99,47), -(99,49), -(99,50), -(99,51), -(99,52), -(99,53), -(99,54), -(99,56), -(99,59), -(99,61), -(99,62), -(99,63), -(99,64), -(99,65), -(99,66), -(99,68), -(99,71), -(99,73), -(99,74), -(99,75), -(99,76), -(99,77), -(99,78), -(99,80), -(99,83), -(99,85), -(99,86), -(99,87), -(99,88), -(99,89), -(99,90), -(99,92), -(99,95), -(99,97), -(99,98), -(99,99), -(99,100), -(99,101), -(99,102), -(99,104), -(99,107), -(99,109), -(99,110), -(99,111), -(99,112), -(99,113), -(99,114), -(99,116), -(99,119), -(99,121), -(99,122), -(99,123), -(99,124), -(99,125), -(99,126), -(99,128), -(99,131), -(99,133), -(99,134), -(99,135), -(99,136), -(99,137), -(99,138), -(99,140), -(99,143), -(99,145), -(99,146), -(99,147), -(99,148), -(99,149), -(99,150), -(99,152), -(99,155), -(99,157), -(99,158), -(99,159), -(99,160), -(99,161), -(99,162), -(99,164), -(99,167), -(99,169), -(99,170), -(99,171), -(99,172), -(99,173), -(99,174), -(99,176), -(99,179), -(100,37), -(100,38), -(100,39), -(100,40), -(100,41), -(100,42), -(100,44), -(100,47), -(100,49), -(100,50), -(100,51), -(100,52), -(100,53), -(100,54), -(100,56), -(100,59), -(100,61), -(100,62), -(100,63), -(100,64), -(100,65), -(100,66), -(100,68), -(100,71), -(100,73), -(100,74), -(100,75), -(100,76), -(100,77), -(100,78), -(100,80), -(100,83), -(100,85), -(100,86), -(100,87), -(100,88), -(100,89), -(100,90), -(100,92), -(100,95), -(100,97), -(100,98), -(100,99), -(100,100), -(100,101), -(100,102), -(100,104), -(100,107), -(100,109), -(100,110), -(100,111), -(100,112), -(100,113), -(100,114), -(100,116), -(100,119), -(100,121), -(100,122), -(100,123), -(100,124), -(100,125), -(100,126), -(100,128), -(100,131), -(100,133), -(100,134), -(100,135), -(100,136), -(100,137), -(100,138), -(100,140), -(100,143), -(100,145), -(100,146), -(100,147), -(100,148), -(100,149), -(100,150), -(100,152), -(100,155), -(100,157), -(100,158), -(100,159), -(100,160), -(100,161), -(100,162), -(100,164), -(100,167), -(100,169), -(100,170), -(100,171), -(100,172), -(100,173), -(100,174), -(100,176), -(100,179), -(101,37), -(101,38), -(101,39), -(101,40), -(101,41), -(101,42), -(101,44), -(101,47), -(101,49), -(101,50), -(101,51), -(101,52), -(101,53), -(101,54), -(101,56), -(101,59), -(101,61), -(101,62), -(101,63), -(101,64), -(101,65), -(101,66), -(101,68), -(101,71), -(101,73), -(101,74), -(101,75), -(101,76), -(101,77), -(101,78), -(101,80), -(101,83), -(101,85), -(101,86), -(101,87), -(101,88), -(101,89), -(101,90), -(101,92), -(101,95), -(101,97), -(101,98), -(101,99), -(101,100), -(101,101), -(101,102), -(101,104), -(101,107), -(101,109), -(101,110), -(101,111), -(101,112), -(101,113), -(101,114), -(101,116), -(101,119), -(101,121), -(101,122), -(101,123), -(101,124), -(101,125), -(101,126), -(101,128), -(101,131), -(101,133), -(101,134), -(101,135), -(101,136), -(101,137), -(101,138), -(101,140), -(101,143), -(101,145), -(101,146), -(101,147), -(101,148), -(101,149), -(101,150), -(101,152), -(101,155), -(101,157), -(101,158), -(101,159), -(101,160), -(101,161), -(101,162), -(101,164), -(101,167), -(101,169), -(101,170), -(101,171), -(101,172), -(101,173), -(101,174), -(101,176), -(101,179), -(102,37), -(102,38), -(102,39), -(102,40), -(102,41), -(102,42), -(102,44), -(102,47), -(102,49), -(102,50), -(102,51), -(102,52), -(102,53), -(102,54), -(102,56), -(102,59), -(102,61), -(102,62), -(102,63), -(102,64), -(102,65), -(102,66), -(102,68), -(102,71), -(102,73), -(102,74), -(102,75), -(102,76), -(102,77), -(102,78), -(102,80), -(102,83), -(102,85), -(102,86), -(102,87), -(102,88), -(102,89), -(102,90), -(102,92), -(102,95), -(102,97), -(102,98), -(102,99), -(102,100), -(102,101), -(102,102), -(102,104), -(102,107), -(102,109), -(102,110), -(102,111), -(102,112), -(102,113), -(102,114), -(102,116), -(102,119), -(102,121), -(102,122), -(102,123), -(102,124), -(102,125), -(102,126), -(102,128), -(102,131), -(102,133), -(102,134), -(102,135), -(102,136), -(102,137), -(102,138), -(102,140), -(102,143), -(102,145), -(102,146), -(102,147), -(102,148), -(102,149), -(102,150), -(102,152), -(102,155), -(102,157), -(102,158), -(102,159), -(102,160), -(102,161), -(102,162), -(102,164), -(102,167), -(102,169), -(102,170), -(102,171), -(102,172), -(102,173), -(102,174), -(102,176), -(102,179), -(103,37), -(103,38), -(103,39), -(103,40), -(103,41), -(103,42), -(103,43), -(103,44), -(103,45), -(103,46), -(103,47), -(103,48), -(103,49), -(103,50), -(103,51), -(103,52), -(103,53), -(103,54), -(103,55), -(103,56), -(103,57), -(103,58), -(103,59), -(103,60), -(103,61), -(103,62), -(103,63), -(103,64), -(103,65), -(103,66), -(103,67), -(103,68), -(103,69), -(103,70), -(103,71), -(103,72), -(103,73), -(103,74), -(103,75), -(103,76), -(103,77), -(103,78), -(103,79), -(103,80), -(103,81), -(103,82), -(103,83), -(103,84), -(103,85), -(103,86), -(103,87), -(103,88), -(103,89), -(103,90), -(103,91), -(103,92), -(103,93), -(103,94), -(103,95), -(103,96), -(103,97), -(103,98), -(103,99), -(103,100), -(103,101), -(103,102), -(103,103), -(103,104), -(103,105), -(103,106), -(103,107), -(103,108), -(103,109), -(103,110), -(103,111), -(103,112), -(103,113), -(103,114), -(103,115), -(103,116), -(103,117), -(103,118), -(103,119), -(103,120), -(103,121), -(103,122), -(103,123), -(103,124), -(103,125), -(103,126), -(103,127), -(103,128), -(103,129), -(103,130), -(103,131), -(103,132), -(103,133), -(103,134), -(103,135), -(103,136), -(103,137), -(103,138), -(103,139), -(103,140), -(103,141), -(103,142), -(103,143), -(103,144), -(103,145), -(103,146), -(103,147), -(103,148), -(103,149), -(103,150), -(103,151), -(103,152), -(103,153), -(103,154), -(103,155), -(103,156), -(103,157), -(103,158), -(103,159), -(103,160), -(103,161), -(103,162), -(103,163), -(103,164), -(103,165), -(103,166), -(103,167), -(103,168), -(103,169), -(103,170), -(103,171), -(103,172), -(103,173), -(103,174), -(103,175), -(103,176), -(103,177), -(103,178), -(103,179), -(103,180), -(104,37), -(104,38), -(104,39), -(104,40), -(104,41), -(104,42), -(104,43), -(104,44), -(104,45), -(104,46), -(104,47), -(104,48), -(104,49), -(104,50), -(104,51), -(104,52), -(104,53), -(104,54), -(104,55), -(104,56), -(104,57), -(104,58), -(104,59), -(104,60), -(104,61), -(104,62), -(104,63), -(104,64), -(104,65), -(104,66), -(104,67), -(104,68), -(104,69), -(104,70), -(104,71), -(104,72), -(104,73), -(104,74), -(104,75), -(104,76), -(104,77), -(104,78), -(104,79), -(104,80), -(104,81), -(104,82), -(104,83), -(104,84), -(104,85), -(104,86), -(104,87), -(104,88), -(104,89), -(104,90), -(104,91), -(104,92), -(104,93), -(104,94), -(104,95), -(104,96), -(104,97), -(104,98), -(104,99), -(104,100), -(104,101), -(104,102), -(104,103), -(104,104), -(104,105), -(104,106), -(104,107), -(104,108), -(104,109), -(104,110), -(104,111), -(104,112), -(104,113), -(104,114), -(104,115), -(104,116), -(104,117), -(104,118), -(104,119), -(104,120), -(104,121), -(104,122), -(104,123), -(104,124), -(104,125), -(104,126), -(104,127), -(104,128), -(104,129), -(104,130), -(104,131), -(104,132), -(104,133), -(104,134), -(104,135), -(104,136), -(104,137), -(104,138), -(104,139), -(104,140), -(104,141), -(104,142), -(104,143), -(104,144), -(104,145), -(104,146), -(104,147), -(104,148), -(104,149), -(104,150), -(104,151), -(104,152), -(104,153), -(104,154), -(104,155), -(104,156), -(104,157), -(104,158), -(104,159), -(104,160), -(104,161), -(104,162), -(104,163), -(104,164), -(104,165), -(104,166), -(104,167), -(104,168), -(104,169), -(104,170), -(104,171), -(104,172), -(104,173), -(104,174), -(104,175), -(104,176), -(104,177), -(104,178), -(104,179), -(104,180), -(105,37), -(105,38), -(105,39), -(105,40), -(105,41), -(105,42), -(105,46), -(105,48), -(105,49), -(105,50), -(105,51), -(105,52), -(105,53), -(105,54), -(105,58), -(105,60), -(105,61), -(105,62), -(105,63), -(105,64), -(105,65), -(105,66), -(105,70), -(105,72), -(105,73), -(105,74), -(105,75), -(105,76), -(105,77), -(105,78), -(105,82), -(105,84), -(105,85), -(105,86), -(105,87), -(105,88), -(105,89), -(105,90), -(105,94), -(105,96), -(105,97), -(105,98), -(105,99), -(105,100), -(105,101), -(105,102), -(105,106), -(105,108), -(105,109), -(105,110), -(105,111), -(105,112), -(105,113), -(105,114), -(105,118), -(105,120), -(105,121), -(105,122), -(105,123), -(105,124), -(105,125), -(105,126), -(105,130), -(105,132), -(105,133), -(105,134), -(105,135), -(105,136), -(105,137), -(105,138), -(105,142), -(105,144), -(105,145), -(105,146), -(105,147), -(105,148), -(105,149), -(105,150), -(105,154), -(105,156), -(105,157), -(105,158), -(105,159), -(105,160), -(105,161), -(105,162), -(105,166), -(105,168), -(105,169), -(105,170), -(105,171), -(105,172), -(105,173), -(105,174), -(105,178), -(105,180), -(106,37), -(106,38), -(106,39), -(106,40), -(106,41), -(106,42), -(106,44), -(106,47), -(106,49), -(106,50), -(106,51), -(106,52), -(106,53), -(106,54), -(106,56), -(106,59), -(106,61), -(106,62), -(106,63), -(106,64), -(106,65), -(106,66), -(106,68), -(106,71), -(106,73), -(106,74), -(106,75), -(106,76), -(106,77), -(106,78), -(106,80), -(106,83), -(106,85), -(106,86), -(106,87), -(106,88), -(106,89), -(106,90), -(106,92), -(106,95), -(106,97), -(106,98), -(106,99), -(106,100), -(106,101), -(106,102), -(106,104), -(106,107), -(106,109), -(106,110), -(106,111), -(106,112), -(106,113), -(106,114), -(106,116), -(106,119), -(106,121), -(106,122), -(106,123), -(106,124), -(106,125), -(106,126), -(106,128), -(106,131), -(106,133), -(106,134), -(106,135), -(106,136), -(106,137), -(106,138), -(106,140), -(106,143), -(106,145), -(106,146), -(106,147), -(106,148), -(106,149), -(106,150), -(106,152), -(106,155), -(106,157), -(106,158), -(106,159), -(106,160), -(106,161), -(106,162), -(106,164), -(106,167), -(106,169), -(106,170), -(106,171), -(106,172), -(106,173), -(106,174), -(106,176), -(106,179), -(107,37), -(107,38), -(107,39), -(107,40), -(107,41), -(107,42), -(107,44), -(107,47), -(107,49), -(107,50), -(107,51), -(107,52), -(107,53), -(107,54), -(107,56), -(107,59), -(107,61), -(107,62), -(107,63), -(107,64), -(107,65), -(107,66), -(107,68), -(107,71), -(107,73), -(107,74), -(107,75), -(107,76), -(107,77), -(107,78), -(107,80), -(107,83), -(107,85), -(107,86), -(107,87), -(107,88), -(107,89), -(107,90), -(107,92), -(107,95), -(107,97), -(107,98), -(107,99), -(107,100), -(107,101), -(107,102), -(107,104), -(107,107), -(107,109), -(107,110), -(107,111), -(107,112), -(107,113), -(107,114), -(107,116), -(107,119), -(107,121), -(107,122), -(107,123), -(107,124), -(107,125), -(107,126), -(107,128), -(107,131), -(107,133), -(107,134), -(107,135), -(107,136), -(107,137), -(107,138), -(107,140), -(107,143), -(107,145), -(107,146), -(107,147), -(107,148), -(107,149), -(107,150), -(107,152), -(107,155), -(107,157), -(107,158), -(107,159), -(107,160), -(107,161), -(107,162), -(107,164), -(107,167), -(107,169), -(107,170), -(107,171), -(107,172), -(107,173), -(107,174), -(107,176), -(107,179), -(108,37), -(108,38), -(108,39), -(108,40), -(108,41), -(108,42), -(108,44), -(108,47), -(108,49), -(108,50), -(108,51), -(108,52), -(108,53), -(108,54), -(108,56), -(108,59), -(108,61), -(108,62), -(108,63), -(108,64), -(108,65), -(108,66), -(108,68), -(108,71), -(108,73), -(108,74), -(108,75), -(108,76), -(108,77), -(108,78), -(108,80), -(108,83), -(108,85), -(108,86), -(108,87), -(108,88), -(108,89), -(108,90), -(108,92), -(108,95), -(108,97), -(108,98), -(108,99), -(108,100), -(108,101), -(108,102), -(108,104), -(108,107), -(108,109), -(108,110), -(108,111), -(108,112), -(108,113), -(108,114), -(108,116), -(108,119), -(108,121), -(108,122), -(108,123), -(108,124), -(108,125), -(108,126), -(108,128), -(108,131), -(108,133), -(108,134), -(108,135), -(108,136), -(108,137), -(108,138), -(108,140), -(108,143), -(108,145), -(108,146), -(108,147), -(108,148), -(108,149), -(108,150), -(108,152), -(108,155), -(108,157), -(108,158), -(108,159), -(108,160), -(108,161), -(108,162), -(108,164), -(108,167), -(108,169), -(108,170), -(108,171), -(108,172), -(108,173), -(108,174), -(108,176), -(108,179), -(109,37), -(109,38), -(109,39), -(109,40), -(109,41), -(109,42), -(109,44), -(109,47), -(109,49), -(109,50), -(109,51), -(109,52), -(109,53), -(109,54), -(109,56), -(109,59), -(109,61), -(109,62), -(109,63), -(109,64), -(109,65), -(109,66), -(109,68), -(109,71), -(109,73), -(109,74), -(109,75), -(109,76), -(109,77), -(109,78), -(109,80), -(109,83), -(109,85), -(109,86), -(109,87), -(109,88), -(109,89), -(109,90), -(109,92), -(109,95), -(109,97), -(109,98), -(109,99), -(109,100), -(109,101), -(109,102), -(109,104), -(109,107), -(109,109), -(109,110), -(109,111), -(109,112), -(109,113), -(109,114), -(109,116), -(109,119), -(109,121), -(109,122), -(109,123), -(109,124), -(109,125), -(109,126), -(109,128), -(109,131), -(109,133), -(109,134), -(109,135), -(109,136), -(109,137), -(109,138), -(109,140), -(109,143), -(109,145), -(109,146), -(109,147), -(109,148), -(109,149), -(109,150), -(109,152), -(109,155), -(109,157), -(109,158), -(109,159), -(109,160), -(109,161), -(109,162), -(109,164), -(109,167), -(109,169), -(109,170), -(109,171), -(109,172), -(109,173), -(109,174), -(109,176), -(109,179), -(110,37), -(110,38), -(110,39), -(110,40), -(110,41), -(110,42), -(110,43), -(110,44), -(110,45), -(110,46), -(110,47), -(110,48), -(110,49), -(110,50), -(110,51), -(110,52), -(110,53), -(110,54), -(110,55), -(110,56), -(110,57), -(110,58), -(110,59), -(110,60), -(110,61), -(110,62), -(110,63), -(110,64), -(110,65), -(110,66), -(110,67), -(110,68), -(110,69), -(110,70), -(110,71), -(110,72), -(110,73), -(110,74), -(110,75), -(110,76), -(110,77), -(110,78), -(110,79), -(110,80), -(110,81), -(110,82), -(110,83), -(110,84), -(110,85), -(110,86), -(110,87), -(110,88), -(110,89), -(110,90), -(110,91), -(110,92), -(110,93), -(110,94), -(110,95), -(110,96), -(110,97), -(110,98), -(110,99), -(110,100), -(110,101), -(110,102), -(110,103), -(110,104), -(110,105), -(110,106), -(110,107), -(110,108), -(110,109), -(110,110), -(110,111), -(110,112), -(110,113), -(110,114), -(110,115), -(110,116), -(110,117), -(110,118), -(110,119), -(110,120), -(110,121), -(110,122), -(110,123), -(110,124), -(110,125), -(110,126), -(110,127), -(110,128), -(110,129), -(110,130), -(110,131), -(110,132), -(110,133), -(110,134), -(110,135), -(110,136), -(110,137), -(110,138), -(110,139), -(110,140), -(110,141), -(110,142), -(110,143), -(110,144), -(110,145), -(110,146), -(110,147), -(110,148), -(110,149), -(110,150), -(110,151), -(110,152), -(110,153), -(110,154), -(110,155), -(110,156), -(110,157), -(110,158), -(110,159), -(110,160), -(110,161), -(110,162), -(110,163), -(110,164), -(110,165), -(110,166), -(110,167), -(110,168), -(110,169), -(110,170), -(110,171), -(110,172), -(110,173), -(110,174), -(110,175), -(110,176), -(110,177), -(110,178), -(110,179), -(110,180), -(111,37), -(111,38), -(111,39), -(111,40), -(111,41), -(111,42), -(111,43), -(111,44), -(111,45), -(111,46), -(111,47), -(111,48), -(111,49), -(111,50), -(111,51), -(111,52), -(111,53), -(111,54), -(111,55), -(111,56), -(111,57), -(111,58), -(111,59), -(111,60), -(111,61), -(111,62), -(111,63), -(111,64), -(111,65), -(111,66), -(111,67), -(111,68), -(111,69), -(111,70), -(111,71), -(111,72), -(111,73), -(111,74), -(111,75), -(111,76), -(111,77), -(111,78), -(111,79), -(111,80), -(111,81), -(111,82), -(111,83), -(111,84), -(111,85), -(111,86), -(111,87), -(111,88), -(111,89), -(111,90), -(111,91), -(111,92), -(111,93), -(111,94), -(111,95), -(111,96), -(111,97), -(111,98), -(111,99), -(111,100), -(111,101), -(111,102), -(111,103), -(111,104), -(111,105), -(111,106), -(111,107), -(111,108), -(111,109), -(111,110), -(111,111), -(111,112), -(111,113), -(111,114), -(111,115), -(111,116), -(111,117), -(111,118), -(111,119), -(111,120), -(111,121), -(111,122), -(111,123), -(111,124), -(111,125), -(111,126), -(111,127), -(111,128), -(111,129), -(111,130), -(111,131), -(111,132), -(111,133), -(111,134), -(111,135), -(111,136), -(111,137), -(111,138), -(111,139), -(111,140), -(111,141), -(111,142), -(111,143), -(111,144), -(111,145), -(111,146), -(111,147), -(111,148), -(111,149), -(111,150), -(111,151), -(111,152), -(111,153), -(111,154), -(111,155), -(111,156), -(111,157), -(111,158), -(111,159), -(111,160), -(111,161), -(111,162), -(111,163), -(111,164), -(111,165), -(111,166), -(111,167), -(111,168), -(111,169), -(111,170), -(111,171), -(111,172), -(111,173), -(111,174), -(111,175), -(111,176), -(111,177), -(111,178), -(111,179), -(111,180), -(112,37), -(112,38), -(112,39), -(112,40), -(112,41), -(112,42), -(112,46), -(112,48), -(112,49), -(112,50), -(112,51), -(112,52), -(112,53), -(112,54), -(112,58), -(112,60), -(112,61), -(112,62), -(112,63), -(112,64), -(112,65), -(112,66), -(112,70), -(112,72), -(112,73), -(112,74), -(112,75), -(112,76), -(112,77), -(112,78), -(112,82), -(112,84), -(112,85), -(112,86), -(112,87), -(112,88), -(112,89), -(112,90), -(112,94), -(112,96), -(112,97), -(112,98), -(112,99), -(112,100), -(112,101), -(112,102), -(112,106), -(112,108), -(112,109), -(112,110), -(112,111), -(112,112), -(112,113), -(112,114), -(112,118), -(112,120), -(112,121), -(112,122), -(112,123), -(112,124), -(112,125), -(112,126), -(112,130), -(112,132), -(112,133), -(112,134), -(112,135), -(112,136), -(112,137), -(112,138), -(112,142), -(112,144), -(112,145), -(112,146), -(112,147), -(112,148), -(112,149), -(112,150), -(112,154), -(112,156), -(112,157), -(112,158), -(112,159), -(112,160), -(112,161), -(112,162), -(112,166), -(112,168), -(112,169), -(112,170), -(112,171), -(112,172), -(112,173), -(112,174), -(112,178), -(112,180), -(113,37), -(113,38), -(113,39), -(113,40), -(113,41), -(113,42), -(113,44), -(113,47), -(113,49), -(113,50), -(113,51), -(113,52), -(113,53), -(113,54), -(113,56), -(113,59), -(113,61), -(113,62), -(113,63), -(113,64), -(113,65), -(113,66), -(113,68), -(113,71), -(113,73), -(113,74), -(113,75), -(113,76), -(113,77), -(113,78), -(113,80), -(113,83), -(113,85), -(113,86), -(113,87), -(113,88), -(113,89), -(113,90), -(113,92), -(113,95), -(113,97), -(113,98), -(113,99), -(113,100), -(113,101), -(113,102), -(113,104), -(113,107), -(113,109), -(113,110), -(113,111), -(113,112), -(113,113), -(113,114), -(113,116), -(113,119), -(113,121), -(113,122), -(113,123), -(113,124), -(113,125), -(113,126), -(113,128), -(113,131), -(113,133), -(113,134), -(113,135), -(113,136), -(113,137), -(113,138), -(113,140), -(113,143), -(113,145), -(113,146), -(113,147), -(113,148), -(113,149), -(113,150), -(113,152), -(113,155), -(113,157), -(113,158), -(113,159), -(113,160), -(113,161), -(113,162), -(113,164), -(113,167), -(113,169), -(113,170), -(113,171), -(113,172), -(113,173), -(113,174), -(113,176), -(113,179), -(114,37), -(114,38), -(114,39), -(114,40), -(114,41), -(114,42), -(114,44), -(114,47), -(114,49), -(114,50), -(114,51), -(114,52), -(114,53), -(114,54), -(114,56), -(114,59), -(114,61), -(114,62), -(114,63), -(114,64), -(114,65), -(114,66), -(114,68), -(114,71), -(114,73), -(114,74), -(114,75), -(114,76), -(114,77), -(114,78), -(114,80), -(114,83), -(114,85), -(114,86), -(114,87), -(114,88), -(114,89), -(114,90), -(114,92), -(114,95), -(114,97), -(114,98), -(114,99), -(114,100), -(114,101), -(114,102), -(114,104), -(114,107), -(114,109), -(114,110), -(114,111), -(114,112), -(114,113), -(114,114), -(114,116), -(114,119), -(114,121), -(114,122), -(114,123), -(114,124), -(114,125), -(114,126), -(114,128), -(114,131), -(114,133), -(114,134), -(114,135), -(114,136), -(114,137), -(114,138), -(114,140), -(114,143), -(114,145), -(114,146), -(114,147), -(114,148), -(114,149), -(114,150), -(114,152), -(114,155), -(114,157), -(114,158), -(114,159), -(114,160), -(114,161), -(114,162), -(114,164), -(114,167), -(114,169), -(114,170), -(114,171), -(114,172), -(114,173), -(114,174), -(114,176), -(114,179), -(115,37), -(115,38), -(115,39), -(115,40), -(115,41), -(115,42), -(115,46), -(115,48), -(115,49), -(115,50), -(115,51), -(115,52), -(115,53), -(115,54), -(115,58), -(115,60), -(115,61), -(115,62), -(115,63), -(115,64), -(115,65), -(115,66), -(115,70), -(115,72), -(115,73), -(115,74), -(115,75), -(115,76), -(115,77), -(115,78), -(115,82), -(115,84), -(115,85), -(115,86), -(115,87), -(115,88), -(115,89), -(115,90), -(115,94), -(115,96), -(115,97), -(115,98), -(115,99), -(115,100), -(115,101), -(115,102), -(115,106), -(115,108), -(115,109), -(115,110), -(115,111), -(115,112), -(115,113), -(115,114), -(115,118), -(115,120), -(115,121), -(115,122), -(115,123), -(115,124), -(115,125), -(115,126), -(115,130), -(115,132), -(115,133), -(115,134), -(115,135), -(115,136), -(115,137), -(115,138), -(115,142), -(115,144), -(115,145), -(115,146), -(115,147), -(115,148), -(115,149), -(115,150), -(115,154), -(115,156), -(115,157), -(115,158), -(115,159), -(115,160), -(115,161), -(115,162), -(115,166), -(115,168), -(115,169), -(115,170), -(115,171), -(115,172), -(115,173), -(115,174), -(115,178), -(115,180), -(116,37), -(116,38), -(116,39), -(116,40), -(116,41), -(116,42), -(116,46), -(116,48), -(116,49), -(116,50), -(116,51), -(116,52), -(116,53), -(116,54), -(116,58), -(116,60), -(116,61), -(116,62), -(116,63), -(116,64), -(116,65), -(116,66), -(116,70), -(116,72), -(116,73), -(116,74), -(116,75), -(116,76), -(116,77), -(116,78), -(116,82), -(116,84), -(116,85), -(116,86), -(116,87), -(116,88), -(116,89), -(116,90), -(116,94), -(116,96), -(116,97), -(116,98), -(116,99), -(116,100), -(116,101), -(116,102), -(116,106), -(116,108), -(116,109), -(116,110), -(116,111), -(116,112), -(116,113), -(116,114), -(116,118), -(116,120), -(116,121), -(116,122), -(116,123), -(116,124), -(116,125), -(116,126), -(116,130), -(116,132), -(116,133), -(116,134), -(116,135), -(116,136), -(116,137), -(116,138), -(116,142), -(116,144), -(116,145), -(116,146), -(116,147), -(116,148), -(116,149), -(116,150), -(116,154), -(116,156), -(116,157), -(116,158), -(116,159), -(116,160), -(116,161), -(116,162), -(116,166), -(116,168), -(116,169), -(116,170), -(116,171), -(116,172), -(116,173), -(116,174), -(116,178), -(116,180), -(117,37), -(117,38), -(117,39), -(117,40), -(117,41), -(117,42), -(117,44), -(117,47), -(117,49), -(117,50), -(117,51), -(117,52), -(117,53), -(117,54), -(117,56), -(117,59), -(117,61), -(117,62), -(117,63), -(117,64), -(117,65), -(117,66), -(117,68), -(117,71), -(117,73), -(117,74), -(117,75), -(117,76), -(117,77), -(117,78), -(117,80), -(117,83), -(117,85), -(117,86), -(117,87), -(117,88), -(117,89), -(117,90), -(117,92), -(117,95), -(117,97), -(117,98), -(117,99), -(117,100), -(117,101), -(117,102), -(117,104), -(117,107), -(117,109), -(117,110), -(117,111), -(117,112), -(117,113), -(117,114), -(117,116), -(117,119), -(117,121), -(117,122), -(117,123), -(117,124), -(117,125), -(117,126), -(117,128), -(117,131), -(117,133), -(117,134), -(117,135), -(117,136), -(117,137), -(117,138), -(117,140), -(117,143), -(117,145), -(117,146), -(117,147), -(117,148), -(117,149), -(117,150), -(117,152), -(117,155), -(117,157), -(117,158), -(117,159), -(117,160), -(117,161), -(117,162), -(117,164), -(117,167), -(117,169), -(117,170), -(117,171), -(117,172), -(117,173), -(117,174), -(117,176), -(117,179), -(118,37), -(118,38), -(118,39), -(118,40), -(118,41), -(118,42), -(118,44), -(118,47), -(118,49), -(118,50), -(118,51), -(118,52), -(118,53), -(118,54), -(118,56), -(118,59), -(118,61), -(118,62), -(118,63), -(118,64), -(118,65), -(118,66), -(118,68), -(118,71), -(118,73), -(118,74), -(118,75), -(118,76), -(118,77), -(118,78), -(118,80), -(118,83), -(118,85), -(118,86), -(118,87), -(118,88), -(118,89), -(118,90), -(118,92), -(118,95), -(118,97), -(118,98), -(118,99), -(118,100), -(118,101), -(118,102), -(118,104), -(118,107), -(118,109), -(118,110), -(118,111), -(118,112), -(118,113), -(118,114), -(118,116), -(118,119), -(118,121), -(118,122), -(118,123), -(118,124), -(118,125), -(118,126), -(118,128), -(118,131), -(118,133), -(118,134), -(118,135), -(118,136), -(118,137), -(118,138), -(118,140), -(118,143), -(118,145), -(118,146), -(118,147), -(118,148), -(118,149), -(118,150), -(118,152), -(118,155), -(118,157), -(118,158), -(118,159), -(118,160), -(118,161), -(118,162), -(118,164), -(118,167), -(118,169), -(118,170), -(118,171), -(118,172), -(118,173), -(118,174), -(118,176), -(118,179); \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml b/L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml new file mode 100644 index 0000000000..298683c256 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/dist/game/data/Hennas.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv b/L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv deleted file mode 100644 index 15d91f567d..0000000000 --- a/L2J_Mobius_C6_Interlude/dist/game/data/csv/henna.csv +++ /dev/null @@ -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 \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd new file mode 100644 index 0000000000..36727e1726 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/dist/game/data/xsd/Hennas.xsd @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/Util.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/Util.java index 8cd6ee6d93..f68274a889 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/Util.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/commons/util/Util.java @@ -172,4 +172,57 @@ public class Util } return array; } + + /** + * @param + * @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 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; + } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java index 0effa9c621..40b435cdae 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/GameServer.java @@ -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()) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/csv/HennaTable.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/csv/HennaTable.java deleted file mode 100644 index 514b8ec2bb..0000000000 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/csv/HennaTable.java +++ /dev/null @@ -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 . - */ -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 _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(); - } -} diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/HennaTreeTable.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/HennaTreeTable.java deleted file mode 100644 index d6730dd19e..0000000000 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/sql/HennaTreeTable.java +++ /dev/null @@ -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 . - */ -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> _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 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 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(); - } -} diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/FishData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/FishData.java index 8bd57cf97c..9bed05dea5 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/FishData.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/FishData.java @@ -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. diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/HennaData.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/HennaData.java new file mode 100644 index 0000000000..7d5cd83eb8 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/datatables/xml/HennaData.java @@ -0,0 +1,107 @@ +/* + * This file is part of the L2J Mobius project. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package 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 _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 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(); + } +} \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/HennaInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/HennaInstance.java deleted file mode 100644 index 1d68e9dc81..0000000000 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/HennaInstance.java +++ /dev/null @@ -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 . - */ -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; - } -} diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java index 519ca92501..e8df27f055 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java @@ -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 _snoopListener = new ArrayList<>(); private final List _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.
- *
- */ - 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.
*
@@ -10043,13 +9989,68 @@ public class PlayerInstance extends Playable } /** - * Return the number of Henna empty slot of the PlayerInstance.
- *
- * @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.
- *
- * @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.
- *
- * @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.
- *
+ * 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.
- *
- * @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.
- *
- * @return the henna stat int - */ public int getHennaStatINT() { return _hennaINT; } - /** - * Return the STR Henna modifier of this PlayerInstance.
- *
- * @return the henna stat str - */ public int getHennaStatSTR() { return _hennaSTR; } - /** - * Return the CON Henna modifier of this PlayerInstance.
- *
- * @return the henna stat con - */ public int getHennaStatCON() { return _hennaCON; } - /** - * Return the MEN Henna modifier of this PlayerInstance.
- *
- * @return the henna stat men - */ public int getHennaStatMEN() { return _hennaMEN; } - /** - * Return the WIT Henna modifier of this PlayerInstance.
- *
- * @return the henna stat wit - */ public int getHennaStatWIT() { return _hennaWIT; } - /** - * Return the DEX Henna modifier of this PlayerInstance.
- *
- * @return the henna stat dex - */ public int getHennaStatDEX() { return _hennaDEX; diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SymbolMakerInstance.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SymbolMakerInstance.java index f87a8f1db2..6d0df09a26 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SymbolMakerInstance.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/actor/instance/SymbolMakerInstance.java @@ -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(""); - html1.append("Select symbol you would like to remove:

"); - boolean hasHennas = false; - - for (int i = 1; i <= 3; i++) - { - final HennaInstance henna = player.getHennas(i); - - if (henna != null) - { - hasHennas = true; - html1.append("" + henna.getName() + "
"); - } - } - if (!hasHennas) - { - html1.append("You don't have any symbol to remove!"); - } - - html1.append(""); - insertObjectIdAndShowChatWindow(player, html1.toString()); - } - - public SymbolMakerInstance(int objectID, NpcTemplate template) - { - super(objectID, template); - } - @Override public String getHtmlPath(int npcId, int val) { diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/items/Henna.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/items/Henna.java index b6ad57137c..1c8c4b34ca 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/items/Henna.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/model/items/Henna.java @@ -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.
+ * 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()); + } +} \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GamePacketHandler.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GamePacketHandler.java index d96b22b54a..ad6c77e3a1 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GamePacketHandler.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/GamePacketHandler.java @@ -973,6 +973,21 @@ public class GamePacketHandler implements IPacketHandler, 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 diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/SystemMessageId.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/SystemMessageId.java index c0cb57eb05..268ed2c3cc 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/SystemMessageId.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/SystemMessageId.java @@ -2328,6 +2328,12 @@ public enum SystemMessageId */ SYMBOL_ADDED(877), + /** + * ID: 878
+ * Message: The symbol has been deleted. + */ + SYMBOL_DELETED(878), + /** * ID: 879
* Message: The manor system is currently under maintenance. @@ -2436,6 +2442,18 @@ public enum SystemMessageId */ CANT_DRAW_SYMBOL(899), + /** + * ID: 900
+ * Message: No slot exists to draw the symbol + */ + SYMBOLS_FULL(900), + + /** + * ID: 901
+ * Message: The symbol information cannot be found. + */ + SYMBOL_NOT_FOUND(901), + /** * ID: 910
* Message: Current location : $s1, $s2, $s3 (Near Talking Island Village) diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGMCommand.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGMCommand.java index f70c1e88e0..e952a5b5e2 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGMCommand.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestGMCommand.java @@ -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 diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java index 5d8a396a3e..414868b894 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaEquip.java @@ -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); } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemInfo.java index 05dc529056..d83b52565f 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemInfo.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemInfo.java @@ -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)); } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemRemoveInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemRemoveInfo.java new file mode 100644 index 0000000000..c3c836a7b7 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaItemRemoveInfo.java @@ -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 . + */ +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)); + } +} \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaList.java index 4155cf1e7a..2b9a3dc9c3 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaList.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaList.java @@ -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))); } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java new file mode 100644 index 0000000000..d79d7a1dcc --- /dev/null +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemove.java @@ -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 . + */ +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); + } + } + } +} \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemoveList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemoveList.java new file mode 100644 index 0000000000..c6ca26edf9 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/clientpackets/RequestHennaRemoveList.java @@ -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 . + */ +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)); + } +} \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewHennaInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewHennaInfo.java new file mode 100644 index 0000000000..d27bf7de91 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/GMViewHennaInfo.java @@ -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 . + */ +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); + } + } +} \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaEquipList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaEquipList.java index 23fcc146fb..96d0faa0e6 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaEquipList.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaEquipList.java @@ -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 _hennaEquipList; - public HennaEquipList(PlayerInstance player, HennaInstance[] hennaEquipList) + public HennaEquipList(PlayerInstance player, List 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); - } } } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaInfo.java index 6717457c5c..1ca28d13fa 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaInfo.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaInfo.java @@ -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); } } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemInfo.java index 42514d6c41..5130efdc42 100644 --- a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemInfo.java +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemInfo.java @@ -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 } } diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemRemoveInfo.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemRemoveInfo.java new file mode 100644 index 0000000000..a51877ec59 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaItemRemoveInfo.java @@ -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 . + */ +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 + } +} \ No newline at end of file diff --git a/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaRemoveList.java b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaRemoveList.java new file mode 100644 index 0000000000..3fc2c3d249 --- /dev/null +++ b/L2J_Mobius_C6_Interlude/java/org/l2jmobius/gameserver/network/serverpackets/HennaRemoveList.java @@ -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 . + */ +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); + } + } + } +} \ No newline at end of file