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){