diff --git a/conf/server/ErrorCodeEerverConfig.txt b/conf/server/ErrorCodeEerverConfig.txt
index 0222ae264..ae4e9c614 100644
--- a/conf/server/ErrorCodeEerverConfig.txt
+++ b/conf/server/ErrorCodeEerverConfig.txt
@@ -5,12 +5,23 @@ int string string
3 adventuren_boss_kill_reward_title 外敌击杀者奖励
4 adventuren_boss_kill_reward__txt 在各位小伙伴的共同努力下,击败了在秘境中发现的外敌。本次外敌由您对其造成了最终一击,奉上专属的击杀奖励。
5 adventure_boss_reward_title 秘境外敌周奖励
-6 adventure_boss_reward_txt 恭喜玩家 {0} 在秘境外敌进攻中获得了第 {1} 名,特发放此排名奖励。
+6 adventure_boss_reward_txt 恭喜玩家 {0} 在秘境外敌进攻中获得了第 {1} 名,特发放此排名奖励。
7 arena_daily_reward_title 竞技场每日奖励
8 arena_daily_reward_txt 恭喜获得竞技场每日奖励。
9 arena_season_reward_title 竞技场赛季奖励
10 arena_season_reward_txt 恭喜获得竞技场赛季奖励。
11 adventuren_reward_of_uplevel_title 秘境奖励发放
-12 adventuren_reward_of_uplevel_content 因秘境 {0} 等级提升到 {1} ,该秘境此前保存的奖励通过邮件发放。
+12 adventuren_reward_of_uplevel_content 因秘境 {0} 等级提升到 {1} ,该秘境此前保存的奖励通过邮件发放。
13 adventuren_reward_of_viplevel_title 秘境奖励发放
-14 adventuren_reward_of_viplevel_content 因特权等级提升到 {0} ,此前保存的所有的秘境奖励通过邮件发放。
+14 adventuren_reward_of_viplevel_content 因特权等级提升到 {0} ,此前保存的所有的秘境奖励通过邮件发放。
+15 lamp_lottery_content 恭喜玩家 {0} 获得SSR妖灵师 {1} 。
+16 lamp_rankup_content 恭喜玩家 {0} 将妖灵师 {2} 升至 {3} 星,实力大幅提升。
+17 lamp_lottery_recruit_content 恭喜玩家 {0} 通过招募获得了稀有 {1} 品阶的妖灵师 {2} 。
+18 lamp_lottery_synthesize_content 恭喜玩家 {0} 通过碎片合成获得了稀有 {1} 品阶的妖灵师 {2} 。
+19 lamp_lottery_equip_content 恭喜玩家 {0} 获得了 {1} 品质的装备 {2} 。
+20 lamp_rankup_hero_content 玩家 {0} 经过不懈努力,将 {1} 成长到了 {2} 星。
+21 lamp_lottery_differ_content 恭喜玩家 {0} 获得了 {1} 的妖魂。
+22 lamp_activate_differ_red_content 玩家 {0} 经过不懈努力,激活了异妖 {1} 。
+23 lamp_rankup_differ_red_content 玩家 {0} 经过不懈努力,将 {1} 进阶到了 {2} 阶。
+22 lamp_activate_differ_golden_content 玩家 {0} 经过不懈努力,激活了异妖 {1} 。
+23 lamp_rankup_differ_golden_content 玩家 {0} 经过不懈努力,将 {1} 进阶到了 {2} 阶。
diff --git a/conf/server/HeroConfig.txt b/conf/server/HeroConfig.txt
index 34967aee7..da414c349 100644
--- a/conf/server/HeroConfig.txt
+++ b/conf/server/HeroConfig.txt
@@ -1,54 +1,54 @@
-Id PiecesId PiecesCount Star Profession PropertyName MaxRank Hp Attack PhysicalDefence MagicDefence Speed SecondaryFactor ActionPower RankupConsumeMaterial OpenSkillRules
-int int int int int int int float float float float float mut,int#int,2 int mut,int#int,2 mut,int#int,2
-10001 11001 50 5 1 3 10 2508.0 181.0 286.0 238.0 176.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#34#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000111|5#1000121|6#1000112|6#1000121|7#1000112|7#1000122|8#1000113|8#1000122|9#1000113|9#1000123|10#1000114|10#1000124
-10002 11002 50 5 1 2 10 2281.0 158.0 259.0 216.0 154.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#22#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000211|5#1000221|6#1000212|6#1000221|7#1000212|7#1000222|8#1000213|8#1000222|9#1000213|9#1000223|10#1000214|10#1000224
-10003 11003 50 5 1 4 10 2280.0 162.0 262.0 218.0 181.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#27#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000311|5#1000321|6#1000312|6#1000321|7#1000312|7#1000322|8#1000313|8#1000322|9#1000313|9#1000323|10#1000314|10#1000324
-10004 11004 50 5 5 2 10 2373.0 184.0 236.0 283.0 136.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#28#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000411|5#1000421|6#1000412|6#1000421|7#1000412|7#1000422|8#1000413|8#1000422|9#1000413|9#1000423|10#1000414|10#1000424
-10005 11005 50 5 5 4 10 2155.0 166.0 215.0 258.0 184.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#29#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000511|5#1000521|6#1000512|6#1000521|7#1000512|7#1000522|8#1000513|8#1000522|9#1000513|9#1000523|10#1000514|10#1000524
-10006 11006 50 5 5 1 10 2161.0 171.0 214.0 257.0 175.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#23#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000611|5#1000621|6#1000612|6#1000621|7#1000612|7#1000622|8#1000613|8#1000622|9#1000613|9#1000623|10#1000614|10#1000624
-10007 11007 50 5 5 3 10 2165.0 165.0 259.0 216.0 172.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#35#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000711|5#1000721|6#1000712|6#1000721|7#1000712|7#1000722|8#1000713|8#1000722|9#1000713|9#1000723|10#1000714|10#1000724
-10008 11008 50 5 3 5 10 2206.0 217.0 193.0 232.0 130.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#24#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000811|5#1000821|6#1000812|6#1000821|7#1000812|7#1000822|8#1000813|8#1000822|9#1000813|9#1000823|10#1000814|10#1000824
-10009 11009 50 5 3 6 10 1921.0 198.0 208.0 173.0 168.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#32#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000911|5#1000921|6#1000912|6#1000921|7#1000912|7#1000922|8#1000913|8#1000922|9#1000913|9#1000923|10#1000914|10#1000924
-10010 11010 50 5 3 3 10 1922.0 199.0 172.0 206.0 138.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#37#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001011|5#1001021|6#1001012|6#1001021|7#1001012|7#1001022|8#1001013|8#1001022|9#1001013|9#1001023|10#1001014|10#1001024
-10011 11011 50 5 3 4 10 1922.0 199.0 178.0 213.0 153.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#30#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001111|5#1001121|6#1001112|6#1001121|7#1001112|7#1001122|8#1001113|8#1001122|9#1001113|9#1001123|10#1001114|10#1001124
-10012 11012 50 5 2 1 10 1849.0 265.0 217.0 181.0 146.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#36#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001211|5#1001221|6#1001212|6#1001221|7#1001212|7#1001222|8#1001213|8#1001222|9#1001213|9#1001223|10#1001214|10#1001224
-10013 11013 50 5 2 4 10 1678.0 242.0 194.0 162.0 163.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#31#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001311|5#1001321|6#1001312|6#1001321|7#1001312|7#1001322|8#1001313|8#1001322|9#1001313|9#1001323|10#1001314|10#1001324
-10014 11014 50 5 2 6 10 1676.0 244.0 196.0 163.0 191.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#33#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001411|5#1001421|6#1001412|6#1001421|7#1001412|7#1001422|8#1001413|8#1001422|9#1001413|9#1001423|10#1001414|10#1001424
-10015 11015 50 5 2 5 10 1675.0 235.0 159.0 191.0 174.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#25#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001511|5#1001521|6#1001512|6#1001521|7#1001512|7#1001522|8#1001513|8#1001522|9#1001513|9#1001523|10#1001514|10#1001524
-10016 11016 50 5 4 1 10 1587.0 313.0 141.0 169.0 156.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#38#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001611|5#1001621|6#1001612|6#1001621|7#1001612|7#1001622|8#1001613|8#1001622|9#1001613|9#1001623|10#1001614|10#1001624
-10017 11017 50 5 4 6 10 1443.0 278.0 127.0 152.0 159.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#42#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001711|5#1001721|6#1001712|6#1001721|7#1001712|7#1001722|8#1001713|8#1001722|9#1001713|9#1001723|10#1001714|10#1001724
-10018 11018 50 5 4 5 10 1443.0 280.0 134.0 161.0 154.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#26#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001811|5#1001821|6#1001812|6#1001821|7#1001812|7#1001822|8#1001813|8#1001822|9#1001813|9#1001823|10#1001814|10#1001824
-10019 11019 50 5 4 2 10 1436.0 284.0 152.0 127.0 149.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#40#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001911|5#1001921|6#1001912|6#1001921|7#1001912|7#1001922|8#1001913|8#1001922|9#1001913|9#1001923|10#1001914|10#1001924
-10020 11020 50 5 1 1 10 2279.0 164.0 264.0 220.0 152.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#39#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1002011|5#1002021|6#1002012|6#1002021|7#1002012|7#1002022|8#1002013|8#1002022|9#1002013|9#1002023|10#1002014|10#1002024
-10021 11021 40 5 3 3 10 1920.0 205.0 170.0 204.0 178.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#41#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1002111|5#1002121|6#1002112|6#1002121|7#1002112|7#1002122|8#1002113|8#1002122|9#1002113|9#1002123|10#1002114|10#1002124
-10022 11022 40 5 2 2 10 1676.0 244.0 167.0 200.0 173.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#43#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1002211|5#1002221|6#1002212|6#1002221|7#1002212|7#1002222|8#1002213|8#1002222|9#1002213|9#1002223|10#1002214|10#1002224
-10023 11023 40 5 4 5 10 1439.0 280.0 131.0 157.0 168.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#44#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1002311|5#1002321|6#1002312|6#1002321|7#1002312|7#1002322|8#1002313|8#1002322|9#1002313|9#1002323|10#1002314|10#1002324
-10024 11024 40 4 1 2 10 1933.0 138.0 216.0 180.0 182.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#43#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1002411|5#1002411|5#1002421|6#1002412|6#1002421|7#1002412|7#1002422|8#1002413|8#1002422|9#1002413|9#1002423
-10025 11025 40 4 3 1 10 1630.0 174.0 146.0 175.0 166.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#39#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1002511|5#1002511|5#1002521|6#1002512|6#1002521|7#1002512|7#1002522|8#1002513|8#1002522|9#1002513|9#1002523
-10026 11026 40 4 1 5 10 2051.0 138.0 216.0 180.0 181.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#44#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1002611|5#1002611|5#1002621|6#1002612|6#1002621|7#1002612|7#1002622|8#1002613|8#1002622|9#1002613|9#1002623
-10027 11027 40 4 5 5 10 1944.0 141.0 221.0 184.0 175.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#24#1|6#3#17#3 4#1002711|5#1002711|5#1002721|6#1002712|6#1002721
-10028 11028 40 4 4 5 10 1292.0 241.0 110.0 132.0 157.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#25#1|6#3#17#3 4#1002811|5#1002811|5#1002821|6#1002812|6#1002821
-10029 11029 40 4 4 4 10 1228.0 240.0 108.0 129.0 153.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#30#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1002911|5#1002911|5#1002921|6#1002912|6#1002921|7#1002912|7#1002922|8#1002913|8#1002922|9#1002913|9#1002923
-10030 11030 40 4 5 2 10 1833.0 146.0 186.0 223.0 174.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#22#1|6#3#17#3 4#1003011|5#1003011|5#1003021|6#1003012|6#1003021
-10031 11031 40 4 1 4 10 1942.0 133.0 218.0 182.0 184.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#27#1|6#3#17#3 4#1003111|5#1003111|5#1003121|6#1003112|6#1003121
-10032 11032 40 4 2 4 10 1426.0 205.0 161.0 134.0 202.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#31#1|6#3#17#3 4#1003211|5#1003211|5#1003221|6#1003212|6#1003221
-10033 11033 40 4 4 4 10 1219.0 234.0 130.0 108.0 156.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#29#1|6#3#17#3 4#1003311|5#1003311|5#1003321|6#1003312|6#1003321
-10034 11034 40 4 4 6 10 1293.0 240.0 107.0 128.0 161.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#42#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1003411|5#1003411|5#1003421|6#1003412|6#1003421|7#1003412|7#1003422|8#1003413|8#1003422|9#1003413|14#1003423
-10035 11035 40 4 3 6 10 1732.0 166.0 172.0 143.0 160.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#32#1|6#3#17#3 4#1003511|5#1003511|5#1003521|6#1003512|6#1003521
-10036 11036 40 4 3 3 10 1724.0 170.0 149.0 179.0 158.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#37#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1003611|5#1003611|5#1003621|6#1003612|6#1003621|7#1003612|7#1003622|8#1003613|8#1003622|9#1003613|16#1003623
-10037 11037 40 4 2 3 10 1427.0 206.0 161.0 134.0 197.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#41#1|6#3#17#3 4#1003711|5#1003711|5#1003721|6#1003712|6#1003721
-10038 11038 40 4 4 1 10 1224.0 242.0 114.0 137.0 155.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#36#1|6#3#17#3 4#1003811|5#1003811|5#1003821|6#1003812|6#1003821
-10039 11039 40 4 2 3 10 1428.0 206.0 165.0 138.0 191.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#35#1|6#3#17#3 4#1003911|5#1003911|5#1003921|6#1003912|6#1003921
-10040 11040 40 4 1 1 10 1938.0 141.0 222.0 185.0 182.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#23#1|6#3#17#3 4#1004011|5#1004011|5#1004021|6#1004012|6#1004021
-10041 11041 40 4 1 1 10 1937.0 135.0 221.0 184.0 174.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#38#1|6#3#17#3 4#1004111|5#1004111|5#1004121|6#1004112|6#1004121
-10042 11042 40 4 1 2 10 1942.0 135.0 218.0 182.0 181.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#28#1|6#3#17#3 4#1004211|5#1004211|5#1004221|6#1004212|6#1004221
-10043 11043 40 4 4 3 10 1222.0 234.0 136.0 113.0 155.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#34#1|6#3#17#3 4#1004311|5#1004311|5#1004321|6#1004312|6#1004321
-10044 11044 40 4 2 6 10 1425.0 201.0 138.0 165.0 192.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#33#1|6#3#17#3 4#1004411|5#1004411|5#1004421|6#1004412|6#1004421
-10045 11045 40 4 5 2 10 1831.0 143.0 188.0 225.0 181.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#40#1|6#3#17#3 4#1004511|5#1004511|5#1004521|6#1004512|6#1004521
-10046 11046 30 4 2 5 10 1507.0 203.0 134.0 161.0 171.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#26#1|6#3#17#3 4#1004611|5#1004611|5#1004621|6#1004612|6#1004621
-10047 11047 30 3 3 1 10 1942.0 140.0 226.0 188.0 175.0 56#15000|57#10000|58#10000 30 null 3#1004711
-10048 11048 30 3 2 2 10 1637.0 167.0 173.0 144.0 172.0 56#15000|57#10000|58#10000 30 null 3#1004811
-10049 11049 30 3 4 3 10 1423.0 199.0 161.0 134.0 196.0 56#15000|57#10000|58#10000 30 null 3#1004911
-10050 11050 30 3 3 4 10 1226.0 242.0 111.0 133.0 159.0 56#15000|57#10000|58#10000 30 null 3#1005011
-10051 11051 30 3 2 5 10 1943.0 140.0 188.0 225.0 182.0 56#15000|57#10000|58#10000 30 null 3#1005111
-10052 11052 30 3 4 6 10 2049.0 136.0 187.0 224.0 177.0 56#15000|57#10000|58#10000 30 null 3#1005211
+Id ReadingName PiecesId PiecesCount Star Quality Natural Profession PropertyName MaxRank Hp Attack PhysicalDefence MagicDefence Speed SecondaryFactor ActionPower RankupConsumeMaterial OpenSkillRules
+int string int int int int int int int int float float float float float mut,int#int,2 int mut,int#int,2 mut,int#int,2
+10001 石御霏 11001 50 5 4001 3 1 3 10 2508.0 181.0 286.0 238.0 176.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#34#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000111|5#1000121|6#1000112|6#1000121|7#1000112|7#1000122|8#1000113|8#1000122|9#1000113|9#1000123|10#1000114|10#1000124
+10002 楚恒 11002 50 5 4002 3 1 2 10 2281.0 158.0 259.0 216.0 154.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#22#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000211|5#1000221|6#1000212|6#1000221|7#1000212|7#1000222|8#1000213|8#1000222|9#1000213|9#1000223|10#1000214|10#1000224
+10003 夏侯鸿天 11003 50 5 4003 3 1 4 10 2280.0 162.0 262.0 218.0 181.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#27#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000311|5#1000321|6#1000312|6#1000321|7#1000312|7#1000322|8#1000313|8#1000322|9#1000313|9#1000323|10#1000314|10#1000324
+10004 应茹 11004 50 5 4004 3 5 2 10 2373.0 184.0 236.0 283.0 136.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#28#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000411|5#1000421|6#1000412|6#1000421|7#1000412|7#1000422|8#1000413|8#1000422|9#1000413|9#1000423|10#1000414|10#1000424
+10005 端木葵 11005 50 5 4005 3 5 4 10 2155.0 166.0 215.0 258.0 184.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#29#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000511|5#1000521|6#1000512|6#1000521|7#1000512|7#1000522|8#1000513|8#1000522|9#1000513|9#1000523|10#1000514|10#1000524
+10006 兰卿 11006 50 5 4006 3 5 1 10 2161.0 171.0 214.0 257.0 175.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#23#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000611|5#1000621|6#1000612|6#1000621|7#1000612|7#1000622|8#1000613|8#1000622|9#1000613|9#1000623|10#1000614|10#1000624
+10007 靖之 11007 50 5 4001 3 5 3 10 2165.0 165.0 259.0 216.0 172.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#35#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000711|5#1000721|6#1000712|6#1000721|7#1000712|7#1000722|8#1000713|8#1000722|9#1000713|9#1000723|10#1000714|10#1000724
+10008 白梦凡 11008 50 5 4002 3 3 5 10 2206.0 217.0 193.0 232.0 130.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#24#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000811|5#1000821|6#1000812|6#1000821|7#1000812|7#1000822|8#1000813|8#1000822|9#1000813|9#1000823|10#1000814|10#1000824
+10009 祁菲 11009 50 5 4003 3 3 6 10 1921.0 198.0 208.0 173.0 168.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#32#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1000911|5#1000921|6#1000912|6#1000921|7#1000912|7#1000922|8#1000913|8#1000922|9#1000913|9#1000923|10#1000914|10#1000924
+10010 颜祈佳 11010 50 5 4004 3 3 3 10 1922.0 199.0 172.0 206.0 138.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#37#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001011|5#1001021|6#1001012|6#1001021|7#1001012|7#1001022|8#1001013|8#1001022|9#1001013|9#1001023|10#1001014|10#1001024
+10011 岳寅 11011 50 5 4005 3 3 4 10 1922.0 199.0 178.0 213.0 153.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#30#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001111|5#1001121|6#1001112|6#1001121|7#1001112|7#1001122|8#1001113|8#1001122|9#1001113|9#1001123|10#1001114|10#1001124
+10012 慕容子期 11012 50 5 4006 3 2 1 10 1849.0 265.0 217.0 181.0 146.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#36#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001211|5#1001221|6#1001212|6#1001221|7#1001212|7#1001222|8#1001213|8#1001222|9#1001213|9#1001223|10#1001214|10#1001224
+10013 云灵 11013 50 5 4001 3 2 4 10 1678.0 242.0 194.0 162.0 163.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#31#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001311|5#1001321|6#1001312|6#1001321|7#1001312|7#1001322|8#1001313|8#1001322|9#1001313|9#1001323|10#1001314|10#1001324
+10014 耿陶 11014 50 5 4002 3 2 6 10 1676.0 244.0 196.0 163.0 191.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#33#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001411|5#1001421|6#1001412|6#1001421|7#1001412|7#1001422|8#1001413|8#1001422|9#1001413|9#1001423|10#1001414|10#1001424
+10015 云 11015 50 5 4003 3 2 5 10 1675.0 235.0 159.0 191.0 174.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#25#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001511|5#1001521|6#1001512|6#1001521|7#1001512|7#1001522|8#1001513|8#1001522|9#1001513|9#1001523|10#1001514|10#1001524
+10016 岑以航 11016 50 5 4004 3 4 1 10 1587.0 313.0 141.0 169.0 156.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#38#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001611|5#1001621|6#1001612|6#1001621|7#1001612|7#1001622|8#1001613|8#1001622|9#1001613|9#1001623|10#1001614|10#1001624
+10017 影蓟 11017 50 5 4005 3 4 6 10 1443.0 278.0 127.0 152.0 159.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#42#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001711|5#1001721|6#1001712|6#1001721|7#1001712|7#1001722|8#1001713|8#1001722|9#1001713|9#1001723|10#1001714|10#1001724
+10018 朱贺 11018 50 5 4006 3 4 5 10 1443.0 280.0 134.0 161.0 154.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#26#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001811|5#1001821|6#1001812|6#1001821|7#1001812|7#1001822|8#1001813|8#1001822|9#1001813|9#1001823|10#1001814|10#1001824
+10019 孔谦 11019 50 5 4001 3 4 2 10 1436.0 284.0 152.0 127.0 149.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#40#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1001911|5#1001921|6#1001912|6#1001921|7#1001912|7#1001922|8#1001913|8#1001922|9#1001913|9#1001923|10#1001914|10#1001924
+10020 颜无雍 11020 50 5 4002 3 1 1 10 2279.0 164.0 264.0 220.0 152.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#39#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1002011|5#1002021|6#1002012|6#1002021|7#1002012|7#1002022|8#1002013|8#1002022|9#1002013|9#1002023|10#1002014|10#1002024
+10021 岑以璇 11021 40 5 4003 3 3 3 10 1920.0 205.0 170.0 204.0 178.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#41#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1002111|5#1002121|6#1002112|6#1002121|7#1002112|7#1002122|8#1002113|8#1002122|9#1002113|9#1002123|10#1002114|10#1002124
+10022 颜无诡 11022 40 5 4004 3 2 2 10 1676.0 244.0 167.0 200.0 173.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#43#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1002211|5#1002221|6#1002212|6#1002221|7#1002212|7#1002222|8#1002213|8#1002222|9#1002213|9#1002223|10#1002214|10#1002224
+10023 荧荧 11023 40 5 4005 3 4 5 10 1439.0 280.0 131.0 157.0 168.0 56#15000|57#10000|58#10000 30 6#1#3#1|6#2#44#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2|10#1#3#2|10#2#18#1|10#3#21#1 5#1002311|5#1002321|6#1002312|6#1002321|7#1002312|7#1002322|8#1002313|8#1002322|9#1002313|9#1002323|10#1002314|10#1002324
+10024 许槿然 11024 40 4 4006 2 1 2 10 1933.0 138.0 216.0 180.0 182.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#43#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1002411|5#1002411|5#1002421|6#1002412|6#1002421|7#1002412|7#1002422|8#1002413|8#1002422|9#1002413|9#1002423
+10025 唐萱 11025 40 4 4001 2 3 1 10 1630.0 174.0 146.0 175.0 166.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#39#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1002511|5#1002511|5#1002521|6#1002512|6#1002521|7#1002512|7#1002522|8#1002513|8#1002522|9#1002513|9#1002523
+10026 孙晴 11026 40 4 4002 2 1 5 10 2051.0 138.0 216.0 180.0 181.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#44#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1002611|5#1002611|5#1002621|6#1002612|6#1002621|7#1002612|7#1002622|8#1002613|8#1002622|9#1002613|9#1002623
+10027 宁月 11027 40 4 4003 2 5 5 10 1944.0 141.0 221.0 184.0 175.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#24#1|6#3#17#3 4#1002711|5#1002711|5#1002721|6#1002712|6#1002721
+10028 紫川 11028 40 4 4004 2 4 5 10 1292.0 241.0 110.0 132.0 157.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#25#1|6#3#17#3 4#1002811|5#1002811|5#1002821|6#1002812|6#1002821
+10029 晏息 11029 40 4 4005 2 4 4 10 1228.0 240.0 108.0 129.0 153.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#30#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1002911|5#1002911|5#1002921|6#1002912|6#1002921|7#1002912|7#1002922|8#1002913|8#1002922|9#1002913|9#1002923
+10030 瑶瑶 11030 40 4 4006 2 5 2 10 1833.0 146.0 186.0 223.0 174.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#22#1|6#3#17#3 4#1003011|5#1003011|5#1003021|6#1003012|6#1003021
+10031 贾裴武 11031 40 4 4001 2 1 4 10 1942.0 133.0 218.0 182.0 184.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#27#1|6#3#17#3 4#1003111|5#1003111|5#1003121|6#1003112|6#1003121
+10032 雷燕 11032 40 4 4002 2 2 4 10 1426.0 205.0 161.0 134.0 202.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#31#1|6#3#17#3 4#1003211|5#1003211|5#1003221|6#1003212|6#1003221
+10033 辛夷 11033 40 4 4003 2 4 4 10 1219.0 234.0 130.0 108.0 156.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#29#1|6#3#17#3 4#1003311|5#1003311|5#1003321|6#1003312|6#1003321
+10034 伏冥 11034 40 4 4004 2 4 6 10 1293.0 240.0 107.0 128.0 161.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#42#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1003411|5#1003411|5#1003421|6#1003412|6#1003421|7#1003412|7#1003422|8#1003413|8#1003422|9#1003413|14#1003423
+10035 司空染 11035 40 4 4005 2 3 6 10 1732.0 166.0 172.0 143.0 160.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#32#1|6#3#17#3 4#1003511|5#1003511|5#1003521|6#1003512|6#1003521
+10036 解幽 11036 40 4 4006 2 3 3 10 1724.0 170.0 149.0 179.0 158.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#37#1|6#3#17#3|7#1#17#4|8#1#17#3|8#2#18#1|9#1#3#1|9#2#18#1|9#3#17#2 4#1003611|5#1003611|5#1003621|6#1003612|6#1003621|7#1003612|7#1003622|8#1003613|8#1003622|9#1003613|16#1003623
+10037 薛苓 11037 40 4 4001 2 2 3 10 1427.0 206.0 161.0 134.0 197.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#41#1|6#3#17#3 4#1003711|5#1003711|5#1003721|6#1003712|6#1003721
+10038 常申 11038 40 4 4002 2 4 1 10 1224.0 242.0 114.0 137.0 155.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#36#1|6#3#17#3 4#1003811|5#1003811|5#1003821|6#1003812|6#1003821
+10039 呼延腾 11039 40 4 4003 2 2 3 10 1428.0 206.0 165.0 138.0 191.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#35#1|6#3#17#3 4#1003911|5#1003911|5#1003921|6#1003912|6#1003921
+10040 冉宜 11040 40 4 4004 2 1 1 10 1938.0 141.0 222.0 185.0 182.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#23#1|6#3#17#3 4#1004011|5#1004011|5#1004021|6#1004012|6#1004021
+10041 孟灿 11041 40 4 4005 2 1 1 10 1937.0 135.0 221.0 184.0 174.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#38#1|6#3#17#3 4#1004111|5#1004111|5#1004121|6#1004112|6#1004121
+10042 叶辽 11042 40 4 4006 2 1 2 10 1942.0 135.0 218.0 182.0 181.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#28#1|6#3#17#3 4#1004211|5#1004211|5#1004221|6#1004212|6#1004221
+10043 乌廉 11043 40 4 4001 2 4 3 10 1222.0 234.0 136.0 113.0 155.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#34#1|6#3#17#3 4#1004311|5#1004311|5#1004321|6#1004312|6#1004321
+10044 姜燧 11044 40 4 4002 2 2 6 10 1425.0 201.0 138.0 165.0 192.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#33#1|6#3#17#3 4#1004411|5#1004411|5#1004421|6#1004412|6#1004421
+10045 苏可 11045 40 4 4003 2 5 2 10 1831.0 143.0 188.0 225.0 181.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#40#1|6#3#17#3 4#1004511|5#1004511|5#1004521|6#1004512|6#1004521
+10046 林越 11046 30 4 4004 2 2 5 10 1507.0 203.0 134.0 161.0 171.0 56#15000|57#10000|58#10000 30 5#1#2#3|5#2#15#4|5#3#16#4|6#1#3#1|6#2#26#1|6#3#17#3 4#1004611|5#1004611|5#1004621|6#1004612|6#1004621
+10047 赤肥肥 11047 30 3 4005 1 3 1 10 1942.0 140.0 226.0 188.0 175.0 56#15000|57#10000|58#10000 30 null 3#1004711
+10048 银肥肥 11048 30 3 4006 1 2 2 10 1637.0 167.0 173.0 144.0 172.0 56#15000|57#10000|58#10000 30 null 3#1004811
+10049 苍肥肥 11049 30 3 4001 1 4 3 10 1423.0 199.0 161.0 134.0 196.0 56#15000|57#10000|58#10000 30 null 3#1004911
+10050 金肥肥 11050 30 3 4002 1 3 4 10 1226.0 242.0 111.0 133.0 159.0 56#15000|57#10000|58#10000 30 null 3#1005011
+10051 阳魔 11051 30 3 4003 1 2 5 10 1943.0 140.0 188.0 225.0 182.0 56#15000|57#10000|58#10000 30 null 3#1005111
+10052 阴魔 11052 30 3 4004 1 4 6 10 2049.0 136.0 187.0 224.0 177.0 56#15000|57#10000|58#10000 30 null 3#1005211
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java
index 130ce0b87..c1309b9db 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/chat/logic/ChatLogic.java
@@ -5,7 +5,9 @@ import com.ljsd.GameApplication;
import com.ljsd.jieling.chat.messge.MessageCache;
import com.ljsd.jieling.db.redis.RedisKey;
import com.ljsd.jieling.db.redis.RedisUtil;
+import com.ljsd.jieling.globals.Global;
import com.ljsd.jieling.logic.OnlineUserManager;
+import com.ljsd.jieling.logic.dao.FriendManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
@@ -35,6 +37,8 @@ public class ChatLogic {
*/
public void getAllChatMessageInfo(ISession iSession, int chatType) throws Exception {
int uid = iSession.getUid();
+ FriendManager friendManager = UserManager.getUser(uid).getFriendManager();
+ List friends = friendManager.getFriends();
List chatInfoList = new ArrayList<>();
switch (chatType){
case 0: // 系统
@@ -53,14 +57,17 @@ public class ChatLogic {
String[] split = entry.getKey().toString().split("#");
String message = String.valueOf(entry.getValue());
int userid = Integer.parseInt(split[0]);
+ if (!friends.contains(userid)){
+ continue;
+ }
long time = Long.parseLong(split[1]);
User user = UserManager.getUser(userid);
- CBean2Proto.getChatInfoBuilder(user,message,time);
+ chatInfoList.add(CBean2Proto.getChatInfoBuilder(user,message,time));
}
}
if (hmget!= null && hmget.size() != 0){
//取出数据好友聊天数据后删除
- RedisUtil.getInstence().hdel(GameApplication.serverId + RedisKey.CUser_Chat + uid);
+ RedisUtil.getInstence().del(GameApplication.serverId + RedisKey.CUser_Chat + uid);
}
break;
}
@@ -77,8 +84,10 @@ public class ChatLogic {
* @param message
*/
public void sendChatMessage(ISession iSession, int chatType, String message,int friendId) throws Exception {
+ int msgId = MessageTypeProto.MessageType.SEND_CHAT_INFO_RESPONSE_VALUE;
int uid = iSession.getUid();
User user = UserManager.getUser(uid);
+ FriendManager friendManager = user.getFriendManager();
long nowTime = System.currentTimeMillis();
switch (chatType){
case 1: //世界
@@ -90,6 +99,11 @@ public class ChatLogic {
MessageCache.addGuildMsg(chatInfo);
break;
case 3: //好友
+ List friends = friendManager.getFriends();
+ if (!friends.contains(friendId)){
+ MessageUtil.sendErrorResponse(iSession,0, msgId, "不能查找自己");
+ return;
+ }
//现在好友推送
if (OnlineUserManager.checkUidOnline(friendId)){
ISession sessionByUid = OnlineUserManager.getSessionByUid(friendId);
@@ -98,21 +112,21 @@ public class ChatLogic {
.setChatInfo(chatInfo)
.build();
assert sessionByUid != null;
- MessageUtil.sendMessage(sessionByUid, 1, MessageTypeProto.MessageType.SEND_CHAT_INFO_INDICATION_VALUE, sendChatInfoIndication, true);
+ MessageUtil.sendIndicationMessage(sessionByUid, 1, MessageTypeProto.MessageType.SEND_CHAT_INFO_INDICATION_VALUE, sendChatInfoIndication, true);
}else{
RedisUtil.getInstence().hset(GameApplication.serverId +RedisKey.CUser_Chat+friendId,uid +"#"+ nowTime,message, -1);
}
break;
}
- MessageUtil.sendMessage(iSession, 1, MessageTypeProto.MessageType.SEND_CHAT_INFO_RESPONSE_VALUE, null, true);
+ MessageUtil.sendMessage(iSession, 1, msgId, null, true);
}
/**
* 系统消息跑马灯
*/
- public static void sendSysChatMessage(String message,int type,int startTime, int endTime, int priorityLevel, int frequency) {
- ChatProto.ChatInfo chatInfo = CBean2Proto.getSysChatInfoBuilder(message,type,startTime,endTime,priorityLevel,frequency);
+ public void sendSysChatMessage(String message,int messageType ,int itemId, int type,int startTime, int endTime, int priorityLevel, int frequency) {
+ ChatProto.ChatInfo chatInfo = CBean2Proto.getSysChatInfoBuilder(message,messageType,itemId ,type,startTime,endTime,priorityLevel,frequency);
MessageCache.addSystemMsg(chatInfo);
}
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SCHero.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SCHero.java
index b87ac5c9b..49232db92 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/config/SCHero.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SCHero.java
@@ -19,6 +19,8 @@ public class SCHero implements BaseConfig{
private int piecesCount;
+ private String readingName;
+
private int propertyName; //角色属性
private int profession; //角色职业
@@ -45,6 +47,10 @@ public class SCHero implements BaseConfig{
private int[][] secondaryFactor;
+ private int quality;
+
+ private int natural;
+
private Map secondaryFactorMap;
private Map> skillListByStar;
@@ -219,4 +225,16 @@ public class SCHero implements BaseConfig{
public void setSecondaryFactorMap(Map secondaryFactorMap) {
this.secondaryFactorMap = secondaryFactorMap;
}
+
+ public int getQuality() {
+ return quality;
+ }
+
+ public int getNatural() {
+ return natural;
+ }
+
+ public String getReadingName() {
+ return readingName;
+ }
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SRingFireMaterialConfig.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SRingFireMaterialConfig.java
index a37fbf90a..dea9ce2e2 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/config/SRingFireMaterialConfig.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SRingFireMaterialConfig.java
@@ -23,7 +23,7 @@ public class SRingFireMaterialConfig implements BaseConfig {
public void init() throws Exception {
Map configTmp = STableManager.getConfig(SRingFireMaterialConfig.class);
Map configMap = new HashMap<>();
- for(SRingFireMaterialConfig sRingFireMaterialConfig : configMap.values()){
+ for(SRingFireMaterialConfig sRingFireMaterialConfig : configTmp.values()){
configMap.put(sRingFireMaterialConfig.getFireId(),sRingFireMaterialConfig);
}
config = configMap;
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/config/SWorkShopSetting.java b/serverlogic/src/main/java/com/ljsd/jieling/config/SWorkShopSetting.java
index d3a53022e..e5930d499 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/config/SWorkShopSetting.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/config/SWorkShopSetting.java
@@ -12,10 +12,14 @@ public class SWorkShopSetting implements BaseConfig {
private int id;
- private int exp;
+ private int[][] exp;
private int[] promote;
+ private int technologyLevel;
+
+ private int[] unravelItem;
+
private int foodExp;
private float addNum;
@@ -28,10 +32,7 @@ public class SWorkShopSetting implements BaseConfig {
private int cookTotalWeight;
- private static int maxExp;
-
- private static int maxCookExp;
-
+ private static int maxLevel;
private static Map sWorkShopSettingMap;
@@ -40,8 +41,7 @@ public class SWorkShopSetting implements BaseConfig {
public void init() throws Exception {
Map sWorkShopSettingMapTmp = sWorkShopSettingMap = STableManager.getConfig(SWorkShopSetting.class);
Map promoteMapTmp = new HashMap<>();
- int maxExpTmp = 0;
- int maxCookExpTmp = 0;
+ int maxLevel = 0;
for(SWorkShopSetting sWorkShopSetting : sWorkShopSettingMapTmp.values()){
Map promoteMapTmptm = new HashMap<>(promoteMapTmp);
int[] promote = sWorkShopSetting.getPromote();
@@ -51,8 +51,7 @@ public class SWorkShopSetting implements BaseConfig {
promoteMapTmptm.put(promote[0],promote[1]);
sWorkShopSetting.setPromoteMap(promoteMapTmptm);
}
- maxExpTmp = MathUtils.getMaxNum(maxExpTmp,sWorkShopSetting.getExp());
- maxCookExpTmp=MathUtils.getMaxNum(maxExpTmp,sWorkShopSetting.getFoodExp());
+ maxLevel = MathUtils.getMaxNum(maxLevel,sWorkShopSetting.getId());
int[][] poolWeight = sWorkShopSetting.getPoolRate();
if(poolWeight!=null && poolWeight.length>0){
int totalWeight = 0;
@@ -64,27 +63,22 @@ public class SWorkShopSetting implements BaseConfig {
}
sWorkShopSettingMap = sWorkShopSettingMapTmp;
- maxExp = maxExpTmp;
- maxCookExp = maxCookExpTmp;
+ this.maxLevel = maxLevel;
}
- public static int getMaxExp() {
- return maxExp;
+ public static int getMaxLevel() {
+ return maxLevel;
}
- public static int getMaxCookExp() {
- return maxCookExp;
- }
-
- public static SWorkShopSetting getsWorkShopSettingByLevel(int levle) {
- return sWorkShopSettingMap.get(levle);
+ public static SWorkShopSetting getsWorkShopSettingByLevel(int level) {
+ return sWorkShopSettingMap.get(level);
}
public int getId() {
return id;
}
- public int getExp() {
+ public int[][] getExp() {
return exp;
}
@@ -100,18 +94,10 @@ public class SWorkShopSetting implements BaseConfig {
this.promoteMap = promoteMap;
}
- public void setExp(int exp) {
+ public void setExp(int[][] exp) {
this.exp = exp;
}
- public int getFoodExp() {
- return foodExp;
- }
-
- public float getAddNum() {
- return addNum;
- }
-
public int[][] getPoolRate() {
return poolRate;
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java
index d0fb1e4d5..7715a323f 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/BIReason.java
@@ -7,7 +7,7 @@ public interface BIReason {
int DECOMPOS_ITEM_REWARD = 3 ;//分解道具奖励
int DECOMPOS_EQUIP_REWARD = 4 ;//分解道具奖励
int DECOMPOS_HERO_REWARD = 5;//分解妖灵师获取奖励
- int COMPOS_HERO_REWARD = 6 ;//分解妖灵师获取奖励
+ int COMPOS_HERO_REWARD = 6 ;//合成妖灵师
int HERO_RANDOM = 7 ;//抽卡
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java b/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java
index a572efc16..90a6aafe1 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/globals/Global.java
@@ -42,4 +42,9 @@ public interface Global {
//返回状态
int USER_NO_EXIT_STATE = 10000; // 玩家不存在
int NO_FIND_ONESELF_STATE = 10001; // 不能查找自己
+
+
+ //跑马灯状态
+ int LUCKY_LUCK = 1; //吉运
+ int DILIGENT = 2; //勤勉
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/FunctionOfTimeHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/FunctionOfTimeHandler.java
index bade8b031..50652e09e 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/handler/FunctionOfTimeHandler.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/FunctionOfTimeHandler.java
@@ -16,6 +16,7 @@ public class FunctionOfTimeHandler extends BaseHandler{
@Override
public void process(ISession iSession, PacketNetData netData) throws Exception {
+ iSession.setFiveReady(1);
GlobalDataManaager.getInstance().getTimeOfControl(iSession);
}
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java
index 97b69e456..89dd1a73a 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapLogic.java
@@ -437,7 +437,8 @@ public class MapLogic {
return;
}
if (mapManager.getStartExporeTime() == 0) {
- LOGGER.info("mapManager.getStartExporeTime() == 0");
+ LOGGER.info("mapMana" +
+ "ger.getStartExporeTime() == 0");
MessageUtil.sendErrorResponse(session,0, messageType.getNumber(), "未开始探索");
return;
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java
index 93ac89868..ffbec7be1 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/map/MapManager.java
@@ -215,7 +215,6 @@ public class MapManager extends MongoBase {
if (addValue != 0) {
int curEnergy = MathUtils.setBetweenWithMax(itemNum + addValue, 0, SGameSetting.getGameSetting().getInitialEnergy());
item.setItemNum(curEnergy > playerInfoManager.getMaxStamina() ? playerInfoManager.getMaxStamina() : curEnergy);
- System.out.println("增加之前的==============================="+itemNum + "增加的数量============"+addValue +"总数========="+item.getItemNum());
setLastUpdateEnergyTime(item, updateTime, lastUpdateEnergyTime);
}
} else {
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMapUpdateEventHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMapUpdateEventHandler.java
new file mode 100644
index 000000000..169f8fb9d
--- /dev/null
+++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/room/RoomMapUpdateEventHandler.java
@@ -0,0 +1,25 @@
+package com.ljsd.jieling.handler.room;
+
+import com.ljsd.jieling.handler.BaseHandler;
+import com.ljsd.jieling.logic.room.RoomManager;
+import com.ljsd.jieling.netty.cocdex.PacketNetData;
+import com.ljsd.jieling.network.session.ISession;
+import com.ljsd.jieling.protocols.MessageTypeProto;
+import com.ljsd.jieling.protocols.RoomFightProto;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RoomMapUpdateEventHandler extends BaseHandler {
+ @Override
+ public MessageTypeProto.MessageType getMessageCode() {
+ return MessageTypeProto.MessageType.ROOM_MAP_UPDATE_EVENT_REQUEST;
+ }
+
+ @Override
+ public void process(ISession iSession, PacketNetData netData) throws Exception {
+ RoomFightProto.RoomMapUpdateEventRequest roomMapUpdateEventRequest = RoomFightProto.RoomMapUpdateEventRequest.parseFrom(netData.parseClientProtoNetData());
+ int triggerXY = roomMapUpdateEventRequest.getTriggerXY();
+ int eventType = roomMapUpdateEventRequest.getEventType();
+ RoomManager.updateRoomMapEvent(iSession,triggerXY,eventType);
+ }
+}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/handler/workshop/WorkShopLevelUpHandler.java b/serverlogic/src/main/java/com/ljsd/jieling/handler/workshop/WorkShopLevelUpHandler.java
new file mode 100644
index 000000000..a58e63957
--- /dev/null
+++ b/serverlogic/src/main/java/com/ljsd/jieling/handler/workshop/WorkShopLevelUpHandler.java
@@ -0,0 +1,21 @@
+package com.ljsd.jieling.handler.workshop;
+
+import com.ljsd.jieling.handler.BaseHandler;
+import com.ljsd.jieling.logic.item.WorkShopLogic;
+import com.ljsd.jieling.netty.cocdex.PacketNetData;
+import com.ljsd.jieling.network.session.ISession;
+import com.ljsd.jieling.protocols.MessageTypeProto;
+import org.springframework.stereotype.Component;
+
+@Component
+public class WorkShopLevelUpHandler extends BaseHandler {
+ @Override
+ public MessageTypeProto.MessageType getMessageCode() {
+ return MessageTypeProto.MessageType.WORKSHOP_LEVELUP_REQUEST;
+ }
+
+ @Override
+ public void process(ISession iSession, PacketNetData netData) throws Exception {
+ WorkShopLogic.getInstance().workShopLevelUp(iSession);
+ }
+}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java
index a751b992a..f0d77744c 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/GlobalDataManaager.java
@@ -239,10 +239,10 @@ public class GlobalDataManaager {
fBuilder.addUserMissionInfo(CommonProto.UserMissionInfo.newBuilder().setMissionId(sDailyTasksConfig.getId()).setState(0).setType(dailymissionType).setProgress(0));
}
if(session.getFiveReady() == 1){ //客户端准备好接受五点刷新请求
- MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.FIVE_PLAYER_REFLUSH_INDICATION_VALUE,null,true);
+ MessageUtil.sendIndicationMessage(session,1, MessageTypeProto.MessageType.FIVE_PLAYER_REFLUSH_INDICATION_VALUE,fBuilder.build(),true);
}else{
int indicationIndex = session.getIndicationIndex();
- byte[] byteBuf = MessageUtil.wrappedBuffer(session.getUid(), session.getToken(), indicationIndex,1, MessageTypeProto.MessageType.FIVE_PLAYER_REFLUSH_INDICATION_VALUE, null);
+ byte[] byteBuf = MessageUtil.wrappedBuffer(session.getUid(), session.getToken(), indicationIndex,1, MessageTypeProto.MessageType.FIVE_PLAYER_REFLUSH_INDICATION_VALUE, fBuilder.build());
session.setFiveByteBuf(byteBuf);
}
}
@@ -267,9 +267,7 @@ public class GlobalDataManaager {
Tea.intToByte(packetData, 4, session.getToken()); //token
Tea.intToByte(packetData, 8,msgNum); //msgId
Tea.intToByte(packetData, 12, 0); // msgIndex
- int[] secretKey = Tea.KEY;
- byte[] finalData = Tea.encrypt2(packetData, secretKey);
- return finalData;
+ return packetData;
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PokemonManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PokemonManager.java
index 0f67d6285..aa7f6a209 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PokemonManager.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/PokemonManager.java
@@ -23,7 +23,7 @@ public class PokemonManager extends MongoBase {
}
public void addRingFirePokemon(Pokemon pokemon) throws Exception {
- pokemon.init(this.getRootId(),getMongoKey() + ".pokemonMap." + pokemon.getId());
+ pokemon.init(this.getRootId(),getMongoKey() + ".ringFireMap." + pokemon.getId());
updateString("ringFireMap." + pokemon.getId(), pokemon);
ringFireMap.put(pokemon.getId(),pokemon);
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WorkShopController.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WorkShopController.java
index dd8f25a38..6a033a4ae 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WorkShopController.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/dao/WorkShopController.java
@@ -36,62 +36,6 @@ public class WorkShopController extends MongoBase {
updateString("openBlueStateMap." + type, openBlueStateMap.get(type));
}
- public void addWorkShopExp(User user,int addExp) throws Exception {
- int maxExp = SWorkShopSetting.getMaxExp();
- if(this.workShopExp >= maxExp){
- return;
- }
- SWorkShopSetting sWorkShopSetting = SWorkShopSetting.getsWorkShopSettingByLevel(this.workShopLevel + 1);
- int needLevelExp;
- if (sWorkShopSetting == null) {
- needLevelExp = maxExp;
- } else {
- needLevelExp = sWorkShopSetting.getExp();
- }
- int curExp = MathUtils.setBetweenWithMax(this.workShopExp + addExp, 0, maxExp);
- int oldLevel = this.workShopLevel;
- while(curExp>=needLevelExp && curExp <= maxExp){
- setWorkShopLevel(this.workShopLevel+1);
- sWorkShopSetting = SWorkShopSetting.getsWorkShopSettingByLevel(this.workShopLevel + 1);
- if(null == sWorkShopSetting){
- needLevelExp = Integer.MAX_VALUE;
- continue;
- }
- needLevelExp = sWorkShopSetting.getExp();
- }
- if(this.workShopLevel>oldLevel){
- user.getUserMissionManager().onGameEvent(user,GameEvent.WORKSHOP_LEVELUP,oldLevel,this.workShopLevel);
- }
- setWorkShopExp(curExp);
- }
-
- public void addCookExp(int addExp) throws Exception {
- int maxExp = SWorkShopSetting.getMaxCookExp();
- if(this.cookExp >= maxExp){
- return;
- }
- SWorkShopSetting sWorkShopSetting = SWorkShopSetting.getsWorkShopSettingByLevel(this.cookLevel + 1);
- int needLevelExp;
- if (sWorkShopSetting == null) {
- needLevelExp = maxExp;
- } else {
- needLevelExp = sWorkShopSetting.getExp();
- }
- int curExp = MathUtils.setBetweenWithMax(this.cookExp + addExp, 0, maxExp);
- while(curExp>=needLevelExp && curExp <= maxExp){
- setWorkShopLevel(this.cookLevel+1);
- sWorkShopSetting = SWorkShopSetting.getsWorkShopSettingByLevel(this.cookLevel + 1);
- if(null == sWorkShopSetting || sWorkShopSetting.getExp() == 0){
- needLevelExp = Integer.MAX_VALUE;
- continue;
- }
- needLevelExp = sWorkShopSetting.getExp();
- }
- setWorkShopExp(curExp);
- }
-
-
-
public int getWorkShopLevel() {
return workShopLevel;
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java
index 04781ba18..7ba55662f 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/friend/FriendLogic.java
@@ -46,7 +46,7 @@ public class FriendLogic {
List friends = friendManager.getFriends();
List onlineList = new CopyOnWriteArrayList<>();
for (Integer friendId :friends){
- if(!OnlineUserManager.checkUidOnline(uid)){
+ if(!OnlineUserManager.checkUidOnline(friendId)){
continue;
}
onlineList.add(friendId);
@@ -460,13 +460,13 @@ public class FriendLogic {
return;
}
if (playerInfoManager.getNickName().equals(name)){
- MessageUtil.sendErrorCode(iSession, Global.NO_FIND_ONESELF_STATE, "不能查找自己");
+ MessageUtil.sendErrorResponse(iSession, Global.NO_FIND_ONESELF_STATE, msgId, "不能查找自己");
return;
}
String key = RedisKey.getKey(RedisKey.C_User_Name_Key, name, false);
Object friend = RedisUtil.getInstence().get(key);
if (friend == null){
- MessageUtil.sendErrorCode(iSession, Global.USER_NO_EXIT_STATE, "玩家不存在");
+ MessageUtil.sendErrorResponse(iSession, Global.USER_NO_EXIT_STATE, msgId, "玩家不存在");
return;
}
int type = 1;
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java
index e61372c1a..67c60121a 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/hero/HeroLogic.java
@@ -1,6 +1,7 @@
package com.ljsd.jieling.logic.hero;
import com.ljsd.GameApplication;
+import com.ljsd.jieling.chat.logic.ChatLogic;
import com.ljsd.jieling.config.*;
import com.ljsd.jieling.core.GlobalsDef;
import com.ljsd.jieling.core.VipPrivilegeType;
@@ -16,9 +17,12 @@ import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.HeroInfoProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.util.*;
+import com.sun.org.apache.regexp.internal.RE;
+import org.omg.CORBA.PUBLIC_MEMBER;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.rmi.ServerError;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -868,11 +872,14 @@ public class HeroLogic {
Pokemon pokemon = item.getValue();
int allStage = pokemon.getAllStage();
SRingFireConfig sRingFireConfig = SRingFireConfig.getsRingFireByRingIdAndLevel(pokemon.getId(), allStage);
- int[][] property = sRingFireConfig.getProperty();
- if(property == null){
+ if(sRingFireConfig == null){
continue;
}
- combinedAttribute(property,heroAllAttribute);
+ int[][] property = sRingFireConfig.getProperty();
+ if(property != null){
+ combinedAttribute(property,heroAllAttribute);
+ }
+
for(int i=1;i0){
- user.getWorkShopController().addCookExp(totalFailExp);
- }
+
CommonProto.WorkShopBaseInfo workShopBaseInfo = CommonProto.WorkShopBaseInfo.newBuilder().setType(GlobalsDef.COOK_SHOP_TYPE).setLevle(workShopController.getCookLevel()).setExp(workShopController.getCookExp()).build();
PlayerInfoProto.CookFoodResponse build = PlayerInfoProto.CookFoodResponse.newBuilder().setWorkShopBaseInfo(workShopBaseInfo).setDrop(dropThing).build();
@@ -275,11 +273,7 @@ public class WorkShopLogic {
//熟练度提升
int type = sWorkShopFoundationConfig.getType();
int addExp = sWorkShopFoundationConfig.getExp()*nums;
- if(type == GlobalsDef.WORK_SHOP_TYPE){
- user.getWorkShopController().addWorkShopExp(user,addExp);
- }else if( type == GlobalsDef.COOK_SHOP_TYPE){
- user.getWorkShopController().addCookExp(addExp);
- }
+
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.WORKSHOP_FOUNDATION_RESPONSE_VALUE,null,true);
}
@@ -339,10 +333,8 @@ public class WorkShopLogic {
user.getEquipManager().addEquip(user,equip);
dropBuilder.addEquipId(CBean2Proto.getEquipProto(equip));
}
- user.getWorkShopController().addWorkShopExp(user,addExp);
user.getUserMissionManager().onGameEvent(user, GameEvent.WORKSHOP_CREATE_EQUIP,nums);
}else if( type == GlobalsDef.COOK_SHOP_TYPE){
- user.getWorkShopController().addCookExp(addExp);
Map items = new HashMap<>();
items.put(equipTid,SMysteryFoodSetting.getsMysteryFoodSetting().getFoodNum()*nums);
ItemUtil.addItem(user,items,dropBuilder,BIReason.WORKSHOP_CREATEQUIP);
@@ -373,7 +365,6 @@ public class WorkShopLogic {
clone.rebuildEquip(user.getWorkShopController().getWorkShopLevel());
equipManager.setUnDetermined(clone);
int addExp = sWorkShopRebuildConfig.getExp();
- user.getWorkShopController().addWorkShopExp(user,addExp);
PlayerInfoProto.WorkShopRebuildRespoonse build = PlayerInfoProto.WorkShopRebuildRespoonse.newBuilder().setEquip(CBean2Proto.getEquipProto(clone)).build();
MessageUtil.sendMessage(session,1, MessageTypeProto.MessageType.WORKSHOP_REBUILD_RESPONSE_VALUE,build,true);
}
@@ -439,4 +430,23 @@ public class WorkShopLogic {
}
return "";
}
+ public void workShopLevelUp(ISession session)throws Exception{
+ int uid = session.getUid();
+ User user = UserManager.getUser(uid);
+ WorkShopController controller = user.getWorkShopController();
+ int currLevel = controller.getWorkShopLevel();
+ SWorkShopSetting shopSetting = SWorkShopSetting.getsWorkShopSettingByLevel(currLevel);
+ int[][] itemInfo = shopSetting.getExp();
+ if(currLevel>=SWorkShopSetting.getMaxLevel()){
+ MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.WORKSHOP_LEVELUP_RESPONSE_VALUE,"已满级");
+ return;
+ }
+ boolean costResult = ItemUtil.itemCost(user,itemInfo,1,1);
+ if(costResult){
+ controller.setWorkShopLevel(currLevel+1);
+ MessageUtil.sendMessage(uid,1,MessageTypeProto.MessageType.WORKSHOP_LEVELUP_RESPONSE_VALUE,null,true);
+ }else{
+ MessageUtil.sendErrorResponse(session,0,MessageTypeProto.MessageType.WORKSHOP_LEVELUP_RESPONSE_VALUE,"道具不足");
+ }
+ }
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/Room.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/Room.java
index 21837b1a4..492ed630c 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/Room.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/Room.java
@@ -10,12 +10,11 @@ import com.ljsd.jieling.protocols.RoomFightProto;
import com.ljsd.jieling.protocols.RoomProto;
import com.ljsd.jieling.util.MessageUtil;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
public class Room {
private int roomId;
- private RoomPlayerInfo[] roomPlayerInfos;
+ private Map roomPlayerInfoMap;
private long gameStartTimestamp; //游戏开始时间戳
//private static long MAX_GAME_LENGTH = 2*60*1000; //2分钟
private static int MAX_GAME_LENGTH = 15*1000; //15秒测试使用
@@ -27,29 +26,25 @@ public class Room {
{
this.roomId = roomId;
this.type = type;
- roomPlayerInfos = new RoomPlayerInfo[playerArray.length];
- for(int i=0; i(2);
+ for(int uid:playerArray){
+ roomPlayerInfoMap.put(uid,new RoomPlayerInfo(uid));
}
}
private RoomPlayerInfo getPlayer(int uid){
- for(int i=0; i iterator = roomPlayerInfoMap.keySet().iterator();
+ while (iterator.hasNext()){
+ Integer uid = iterator.next();
+ if(user.getId() == uid){
//将该用户从房间中移除
- roomPlayerInfos[i] = null;
- }
- if(roomPlayerInfos[i] != null){
+ iterator.remove();
+ }else{
curUserNumber++;
}
}
@@ -67,14 +62,10 @@ public class Room {
if(user != null){
MessageUtil.sendRoomGameEndIndication(user.getId(), roomId);
}
- for(int i=0; i uids = roomPlayerInfoMap.keySet();
+ for(int uid :uids){
+ user = UserManager.getUserInMem(uid);
user.getRoomInfo().setRoomId(-1);
-
MessageUtil.sendRoomGameEndIndication(user.getId(), roomId);
}
}
@@ -99,28 +90,22 @@ public class Room {
public void startGame(){
gameStartTimestamp = System.currentTimeMillis();
- for(int i=0; i uids = roomPlayerInfoMap.keySet();
+ for(int uid : uids){
+ MessageUtil.sendRoomSyncOtherMoveIndiction(uid,iSession.getUid(),request.getTartXYsList());
}
}
- //测试使用
- public RoomPlayerInfo[] getPlayerArray()
- {
- return roomPlayerInfos;
+ public Map getRoomPlayers(){
+ return roomPlayerInfoMap;
}
+
public int getType(){
return type;
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomManager.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomManager.java
index f99dcfb7d..fada6e9d5 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomManager.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomManager.java
@@ -1,5 +1,7 @@
package com.ljsd.jieling.logic.room;
+import com.google.protobuf.GeneratedMessage;
+import com.ljsd.jieling.logic.OnlineUserManager;
import com.ljsd.jieling.logic.dao.UserManager;
import com.ljsd.jieling.logic.dao.root.User;
import com.ljsd.jieling.network.session.ISession;
@@ -7,12 +9,16 @@ import com.ljsd.jieling.protocols.CommonProto;
import com.ljsd.jieling.protocols.MessageTypeProto;
import com.ljsd.jieling.protocols.RoomFightProto;
import com.ljsd.jieling.protocols.RoomProto;
+import com.ljsd.jieling.thread.task.MinuteTask;
import com.ljsd.jieling.util.CellUtil;
import com.ljsd.jieling.util.MessageUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.*;
public class RoomManager {
+ private static final Logger LOGGER = LoggerFactory.getLogger(MinuteTask.class);
//先加入的玩家,在符合规则的情况下,要先匹配上
//value uid
private static final List matchingPlayerList = new ArrayList();
@@ -107,18 +113,22 @@ public class RoomManager {
List cells = new ArrayList<>();
List agentInfoList = new ArrayList<>();
-
+ Map roomPlayers = room.getRoomPlayers();
for(int i=0; i cells = new ArrayList<>();
- RoomPlayerInfo[] playerArray = room.getPlayerArray();
- int i=0;
+ Map roomPlayers = room.getRoomPlayers();
List agentInfoList = new ArrayList<>();
- for(RoomPlayerInfo roomPlayerInfo:playerArray) {
+ for(RoomPlayerInfo roomPlayerInfo:roomPlayers.values()) {
RoomProto.AgentInfo.Builder agentInfoBuilder = RoomProto.AgentInfo.newBuilder();
agentInfoBuilder.setPlayerUid(roomPlayerInfo.getUid())
.setCurHp(1000)
.setMaxHp(1000)
- .setCamp(i++)
- .setCurXY(CellUtil.xy2Pos(4+i,4+i));
+ .setCamp(roomPlayerInfo.getCamp())
+ .setCurXY(roomPlayerInfo.getCurPos());
agentInfoList.add(agentInfoBuilder.build());
}
MessageUtil.sendRoomInfoToPerson(iSession, room.getType(), roomId, 1, cells, agentInfoList);
@@ -191,11 +200,6 @@ public class RoomManager {
MessageUtil.sendRoomStartGameReadyResponse(iSession, responseMsgId, room.getType());
room.ready(user.getId());
}
- //测试使用
- public static List getMatchingPlayerList()
- {
- return matchingPlayerList;
- }
//客户端发起请求,获取开始游戏时的初始数据
public static synchronized void startGameRequset(ISession iSession, RoomFightProto.RoomGameStartRequest request, int responseMsgId) throws Exception {
@@ -243,5 +247,67 @@ public class RoomManager {
{
return roomMap;
}
+
+ public static void updateRoomMapEvent(ISession iSession, int triggerXY, int eventType) throws Exception {
+ User user = UserManager.getUserInMem(iSession.getUid());
+ int roomId = user.getRoomInfo().getRoomId();
+ int responseMsgId = MessageTypeProto.MessageType.ROOM_MAP_UPDATE_EVENT_RESPONSE_VALUE;
+ if(roomId == -1){
+ //没有在房间中
+ MessageUtil.sendErrorResponse(iSession, 0, responseMsgId, "没有在房间中");
+ return;
+ }
+
+ Room room = getRoomById(user.getRoomInfo().getRoomId());
+ if(room == null){
+ //房间已经销毁,如果走到这一步,说明其他地方有错了
+ MessageUtil.sendErrorResponse(iSession, 0, responseMsgId, "房间已经销毁");
+ return;
+ }
+ RoomPlayerInfo mine = room.getRoomPlayers().get(iSession.getUid());
+ mine.move(System.currentTimeMillis());
+ if(mine.getCurPos() != triggerXY){
+ LOGGER.info("the uid={},the server pos={},the client pos ={}",iSession.getUid(),mine.getCurPos(),triggerXY);
+ mine.setCurPos(triggerXY);
+ }
+
+ MessageUtil.sendMessage(iSession, 1, responseMsgId, null,true);
+ int targetUid = -1;
+ for(RoomPlayerInfo roomPlayerInfo : room.getRoomPlayers().values()){
+ int uid = roomPlayerInfo.getUid();
+ int curPos = roomPlayerInfo.getCurPos();
+ if(uid != iSession.getUid() && CellUtil.checkIsNextCell(curPos,triggerXY)){
+ RoomFightProto.RoomMapPointIndication build = RoomFightProto.RoomMapPointIndication.newBuilder().setEventType(eventType).setPlayer(uid).setTriggerXY(triggerXY).build();
+ sendRoomMapPointIndication(room.getRoomPlayers().keySet(),build,MessageTypeProto.MessageType.ROOM_MAP_POINT_INDICATION_VALUE);
+ build = RoomFightProto.RoomMapPointIndication.newBuilder().setEventType(eventType).setPlayer(iSession.getUid()).setTriggerXY(triggerXY).build();
+ sendRoomMapPointIndication(room.getRoomPlayers().keySet(),build,MessageTypeProto.MessageType.ROOM_MAP_POINT_INDICATION_VALUE);
+ targetUid = uid;
+ break;
+ }
+ }
+ if(targetUid!=-1){
+ //更新血量
+ RoomFightProto.RoomTriggerFightIndication build = RoomFightProto.RoomTriggerFightIndication.newBuilder().setFightResult(1)
+ .setBluecurHp(150)
+ .setBluePlayer(iSession.getUid())
+ .setRedcurHp(100)
+ .setRedPlayer(targetUid)
+ .build();
+ sendRoomMapPointIndication(room.getRoomPlayers().keySet(),build,MessageTypeProto.MessageType.ROOM_PLAY_HP_UPDATE_INDICATION_VALUE);
+ }
+
+
+ }
+
+ public static void sendRoomMapPointIndication( Set notifyUids,GeneratedMessage generatedMessage,int msgId){
+ for(int uid : notifyUids){
+ ISession sessionByUid = OnlineUserManager.getSessionByUid(uid);
+ if(sessionByUid == null){
+ continue;
+ }
+ MessageUtil.sendIndicationMessage(sessionByUid,1, msgId,generatedMessage,true);
+ }
+
+ }
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomPlayerInfo.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomPlayerInfo.java
index 397183b2a..a1646c9ca 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomPlayerInfo.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/room/RoomPlayerInfo.java
@@ -1,6 +1,7 @@
package com.ljsd.jieling.logic.room;
import com.ljsd.jieling.protocols.RoomFightProto;
+import com.ljsd.jieling.util.CellUtil;
import com.ljsd.jieling.util.MapPoint;
import java.util.ArrayList;
@@ -17,8 +18,8 @@ public class RoomPlayerInfo {
private int curPos;
private int camp;
private long preMoveTimestamp; //上次移动时间
- private int speed; //移动速度
- private List path; //根据目标点计算出来的移动路径
+ private int speed=500; //移动速度
+ private List path=new ArrayList<>(0); //根据目标点计算出来的移动路径
public RoomPlayerInfo(int uid) {
this.uid = uid;
@@ -27,22 +28,14 @@ public class RoomPlayerInfo {
//用户移动到新位置, 返回下一个点的坐标,用户展示客户端的转向,及模拟移动
public boolean move(List path){
- int nextXY = path.get(0); //移动时的下一个点
- if(MapPoint.getX(curPos) == MapPoint.getX(nextXY)){
- if(MapPoint.getY(curPos) != MapPoint.getY(nextXY) + 1 || MapPoint.getY(curPos) != MapPoint.getY(nextXY) -1){
- //下一个点不是相邻的格子,作弊了
- return false;
- }
+ if(!this.path.isEmpty()){
+ move(System.currentTimeMillis());
}
- if(MapPoint.getY(curPos) == MapPoint.getY(nextXY)){
- if(MapPoint.getX(curPos) != MapPoint.getX(nextXY) + 1 || MapPoint.getX(curPos) != MapPoint.getX(nextXY) -1){
- //下一个点不是相邻的格子,作弊了
- return false;
- }
+ boolean continuous = CellUtil.isContinuous(curPos, path);
+ if(continuous){
+ this.path = path;
}
-
- this.path = path;
- return true;
+ return continuous;
}
//服务器模拟移动,如果前端模拟,则不需要服务气端调用这个函数,服务器端在事件触发的时候做校验即可
@@ -60,6 +53,7 @@ public class RoomPlayerInfo {
for(int i=0; i=0){
itemProtoList.add(CBean2Proto.getItem(item,itemNum));
}
+ if (entry.getKey() == Global.STAMINA){
+ LOGGER.info("增加的=========num={}, 操作后={}, 时间={}",itemNum,user.getItemManager().getItemMap().get(Global.STAMINA).getItemNum(),user.getItemManager().getItemMap().get(Global.STAMINA).getEndingTime());
+ }
}
if (dropBuilder != null) {
dropBuilder.addAllItemlist(itemProtoList);
@@ -541,6 +546,9 @@ public class ItemUtil {
temporaryItemList.remove(userItem.getKey());
needCount = Math.abs(leftNum);
}
+ if (userItem.getKey() == Global.STAMINA){
+ LOGGER.info("消耗的=========num={}, 操作后={}, 时间={}",needCount,user.getItemManager().getItemMap().get(Global.STAMINA).getItemNum(),user.getItemManager().getItemMap().get(Global.STAMINA).getEndingTime());
+ }
}
Item myItem = itemManager.getItem(userItem.getKey());
if (null == myItem) {
@@ -679,7 +687,7 @@ public class ItemUtil {
}
continue;
}
- addCard(user, entry.getKey(),heroList);
+ addCard(user, entry.getKey(),heroList,reason);
}
}
if (reward.length() > 0) {
@@ -689,12 +697,24 @@ public class ItemUtil {
dropBuilder.addAllHero(heroList);
}
- public static void addCard(User user,int cardId,List heroList) throws Exception {
+ public static void addCard(User user,int cardId,List heroList,int reason) throws Exception {
HeroManager heroManager = user.getHeroManager();
+ PlayerManager playerInfoManager = user.getPlayerInfoManager();
int[] heroStar = SItem.getsItemMap().get(cardId).getHeroStar();
Hero hero = new Hero(user.getId(),heroStar[0],heroStar[1]);
heroManager.addHero(hero);
heroList.add(CBean2Proto.getHero(hero));
+ String message = "";
+ SCHero scHero = SCHero.getsCHero().get(hero.getTemplateId());
+ if (scHero.getNatural() >= 3) {
+ String quality = HeroLogic.getInstance().getQuality(scHero.getNatural());
+ if (reason == BIReason.COMPOS_HERO_REWARD) {
+ message = SErrorCodeEerverConfig.getI18NMessage("lamp_lottery_synthesize_content", new Object[]{playerInfoManager.getNickName(), quality, scHero.getReadingName()});
+ } else if (reason == BIReason.HERO_RANDOM) {
+ message = SErrorCodeEerverConfig.getI18NMessage("lamp_lottery_recruit_content", new Object[]{playerInfoManager.getNickName(), quality, scHero.getReadingName()});
+ }
+ ChatLogic.getInstance().sendSysChatMessage(message,Global.LUCKY_LUCK,hero.getTemplateId(),0,0,0,0,0);
+ }
user.getUserMissionManager().onGameEvent(user,GameEvent.GET_HERO,heroStar[0],heroStar[1]);
}
diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java
index 6d8f86bc3..f7da9e649 100644
--- a/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java
+++ b/serverlogic/src/main/java/com/ljsd/jieling/util/MessageUtil.java
@@ -134,7 +134,7 @@ public class MessageUtil {
}
GeneratedMessage generatedMessage = CommonProto.ErrorResponse.newBuilder().setErrCode(errorCode).setErrMsg(errMsg).build();
byte[] byteBuf = wrappedBuffer(session.getUid(), session.getToken(), session.getIndex(),
- errorCode, MessageTypeProto.MessageType.ERROR_CODE_INDICATION_VALUE, generatedMessage);
+ 0, MessageTypeProto.MessageType.ERROR_CODE_INDICATION_VALUE, generatedMessage);
session.writeAndFlush(byteBuf);
}
@@ -147,7 +147,7 @@ public class MessageUtil {
generatedMessage = CommonProto.ErrorResponse.newBuilder().setErrCode(errorCode).setErrMsg(errMsg).build();
LOGGER.error("send error msg,the uid={},the msgId={},the errMsg={}",session.getUid(),msgId,errMsg);
byte[] byteBuf = wrappedBuffer(session.getUid(), session.getToken(), session.getIndex(),
- errorCode,msgId, generatedMessage);
+ 0,msgId, generatedMessage);
session.writeAndFlush(byteBuf);
session.putBackMassageToMap(byteBuf);
}
@@ -279,9 +279,9 @@ public class MessageUtil {
builder.setServerTimestamp(System.currentTimeMillis());
sendMessage(session, 1, responseMsgId, builder.build(), true);
}
- public static void sendRoomSyncOtherMoveIndiction(int uid, List path) {
+ public static void sendRoomSyncOtherMoveIndiction(int uid, int targetUid,List path) {
RoomFightProto.RoomSyncOtherMoveIndiction.Builder builder = RoomFightProto.RoomSyncOtherMoveIndiction.newBuilder();
- builder.setUid(uid);
+ builder.setUid(targetUid);
builder.addAllTartXYs(path);
ISession sessionByUid = OnlineUserManager.getSessionByUid(uid);
if(sessionByUid!=null){