commit 94e1922569873fe75e09c8de8ca56481e3cc3e53
Author: 雪风 <1213457484@qq.com>
Date: Mon Mar 3 14:50:01 2025 +0800
111
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..35410ca
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/libraries/lib.xml b/.idea/libraries/lib.xml
new file mode 100644
index 0000000..6569f26
--- /dev/null
+++ b/.idea/libraries/lib.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..53f706d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..64a71e4
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/A079.iml b/A079.iml
new file mode 100644
index 0000000..fb8e866
--- /dev/null
+++ b/A079.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lib/US_export_policy.jar b/lib/US_export_policy.jar
new file mode 100644
index 0000000..7173213
Binary files /dev/null and b/lib/US_export_policy.jar differ
diff --git a/lib/beansbinding-1.2.1.jar b/lib/beansbinding-1.2.1.jar
new file mode 100644
index 0000000..7f26dc3
Binary files /dev/null and b/lib/beansbinding-1.2.1.jar differ
diff --git a/lib/beautyeye_lnf.jar b/lib/beautyeye_lnf.jar
new file mode 100644
index 0000000..e4f8193
Binary files /dev/null and b/lib/beautyeye_lnf.jar differ
diff --git a/lib/classfinal-fatjar.jar b/lib/classfinal-fatjar.jar
new file mode 100644
index 0000000..56b97a7
Binary files /dev/null and b/lib/classfinal-fatjar.jar differ
diff --git a/lib/druid-1.0.27.jar b/lib/druid-1.0.27.jar
new file mode 100644
index 0000000..71c4981
Binary files /dev/null and b/lib/druid-1.0.27.jar differ
diff --git a/lib/fastjson-1.2.74.jar b/lib/fastjson-1.2.74.jar
new file mode 100644
index 0000000..f6048b2
Binary files /dev/null and b/lib/fastjson-1.2.74.jar differ
diff --git a/lib/hutool-all-5.8.26.jar b/lib/hutool-all-5.8.26.jar
new file mode 100644
index 0000000..d8502bb
Binary files /dev/null and b/lib/hutool-all-5.8.26.jar differ
diff --git a/lib/local_policy.jar b/lib/local_policy.jar
new file mode 100644
index 0000000..c34d036
Binary files /dev/null and b/lib/local_policy.jar differ
diff --git a/lib/mysql-connector-java-bin.jar b/lib/mysql-connector-java-bin.jar
new file mode 100644
index 0000000..af5847e
Binary files /dev/null and b/lib/mysql-connector-java-bin.jar differ
diff --git a/lib/netty-all-4.1.14.Final.jar b/lib/netty-all-4.1.14.Final.jar
new file mode 100644
index 0000000..44019f0
Binary files /dev/null and b/lib/netty-all-4.1.14.Final.jar differ
diff --git a/out/production/A079/MXDJR/BuildPack.class b/out/production/A079/MXDJR/BuildPack.class
new file mode 100644
index 0000000..0aa0362
Binary files /dev/null and b/out/production/A079/MXDJR/BuildPack.class differ
diff --git a/out/production/A079/MXDJR/ConfigObj.class b/out/production/A079/MXDJR/ConfigObj.class
new file mode 100644
index 0000000..ba39845
Binary files /dev/null and b/out/production/A079/MXDJR/ConfigObj.class differ
diff --git a/out/production/A079/MXDJR/ConfigRead.class b/out/production/A079/MXDJR/ConfigRead.class
new file mode 100644
index 0000000..97cfd28
Binary files /dev/null and b/out/production/A079/MXDJR/ConfigRead.class differ
diff --git a/out/production/A079/MXDJR/FriendMessageEventPack.class b/out/production/A079/MXDJR/FriendMessageEventPack.class
new file mode 100644
index 0000000..757d207
Binary files /dev/null and b/out/production/A079/MXDJR/FriendMessageEventPack.class differ
diff --git a/out/production/A079/MXDJR/GroupMessageEventPack.class b/out/production/A079/MXDJR/GroupMessageEventPack.class
new file mode 100644
index 0000000..8839cd9
Binary files /dev/null and b/out/production/A079/MXDJR/GroupMessageEventPack.class differ
diff --git a/out/production/A079/MXDJR/MXDJR.class b/out/production/A079/MXDJR/MXDJR.class
new file mode 100644
index 0000000..b5e2478
Binary files /dev/null and b/out/production/A079/MXDJR/MXDJR.class differ
diff --git a/out/production/A079/MXDJR/PackBase.class b/out/production/A079/MXDJR/PackBase.class
new file mode 100644
index 0000000..89ce0e0
Binary files /dev/null and b/out/production/A079/MXDJR/PackBase.class differ
diff --git a/out/production/A079/MXDJR/RobotSocket$1.class b/out/production/A079/MXDJR/RobotSocket$1.class
new file mode 100644
index 0000000..8762e3f
Binary files /dev/null and b/out/production/A079/MXDJR/RobotSocket$1.class differ
diff --git a/out/production/A079/MXDJR/RobotSocket$2.class b/out/production/A079/MXDJR/RobotSocket$2.class
new file mode 100644
index 0000000..122e992
Binary files /dev/null and b/out/production/A079/MXDJR/RobotSocket$2.class differ
diff --git a/out/production/A079/MXDJR/RobotSocket$3.class b/out/production/A079/MXDJR/RobotSocket$3.class
new file mode 100644
index 0000000..98113ff
Binary files /dev/null and b/out/production/A079/MXDJR/RobotSocket$3.class differ
diff --git a/out/production/A079/MXDJR/RobotSocket$4.class b/out/production/A079/MXDJR/RobotSocket$4.class
new file mode 100644
index 0000000..4dd4f09
Binary files /dev/null and b/out/production/A079/MXDJR/RobotSocket$4.class differ
diff --git a/out/production/A079/MXDJR/RobotSocket$5.class b/out/production/A079/MXDJR/RobotSocket$5.class
new file mode 100644
index 0000000..46b1719
Binary files /dev/null and b/out/production/A079/MXDJR/RobotSocket$5.class differ
diff --git a/out/production/A079/MXDJR/RobotSocket$6$1.class b/out/production/A079/MXDJR/RobotSocket$6$1.class
new file mode 100644
index 0000000..f37196b
Binary files /dev/null and b/out/production/A079/MXDJR/RobotSocket$6$1.class differ
diff --git a/out/production/A079/MXDJR/RobotSocket$6.class b/out/production/A079/MXDJR/RobotSocket$6.class
new file mode 100644
index 0000000..c44c039
Binary files /dev/null and b/out/production/A079/MXDJR/RobotSocket$6.class differ
diff --git a/out/production/A079/MXDJR/RobotSocket.class b/out/production/A079/MXDJR/RobotSocket.class
new file mode 100644
index 0000000..6bcbbbf
Binary files /dev/null and b/out/production/A079/MXDJR/RobotSocket.class differ
diff --git a/out/production/A079/MXDJR/RobotTask.class b/out/production/A079/MXDJR/RobotTask.class
new file mode 100644
index 0000000..048cbdf
Binary files /dev/null and b/out/production/A079/MXDJR/RobotTask.class differ
diff --git a/out/production/A079/MXDJR/SendFriendImagePack.class b/out/production/A079/MXDJR/SendFriendImagePack.class
new file mode 100644
index 0000000..e645808
Binary files /dev/null and b/out/production/A079/MXDJR/SendFriendImagePack.class differ
diff --git a/out/production/A079/MXDJR/SendFriendMessagePack.class b/out/production/A079/MXDJR/SendFriendMessagePack.class
new file mode 100644
index 0000000..2ad4135
Binary files /dev/null and b/out/production/A079/MXDJR/SendFriendMessagePack.class differ
diff --git a/out/production/A079/MXDJR/SendGroupImagePack.class b/out/production/A079/MXDJR/SendGroupImagePack.class
new file mode 100644
index 0000000..d071e46
Binary files /dev/null and b/out/production/A079/MXDJR/SendGroupImagePack.class differ
diff --git a/out/production/A079/MXDJR/SendGroupMessagePack.class b/out/production/A079/MXDJR/SendGroupMessagePack.class
new file mode 100644
index 0000000..e93a1a3
Binary files /dev/null and b/out/production/A079/MXDJR/SendGroupMessagePack.class differ
diff --git a/out/production/A079/MXDJR/SendGroupPrivateImagePack.class b/out/production/A079/MXDJR/SendGroupPrivateImagePack.class
new file mode 100644
index 0000000..8b0df62
Binary files /dev/null and b/out/production/A079/MXDJR/SendGroupPrivateImagePack.class differ
diff --git a/out/production/A079/MXDJR/SendGroupPrivateMessagePack.class b/out/production/A079/MXDJR/SendGroupPrivateMessagePack.class
new file mode 100644
index 0000000..d6a515e
Binary files /dev/null and b/out/production/A079/MXDJR/SendGroupPrivateMessagePack.class differ
diff --git a/out/production/A079/MXDJR/ServerMain.class b/out/production/A079/MXDJR/ServerMain.class
new file mode 100644
index 0000000..29fc6a7
Binary files /dev/null and b/out/production/A079/MXDJR/ServerMain.class differ
diff --git a/out/production/A079/MXDJR/StartPack.class b/out/production/A079/MXDJR/StartPack.class
new file mode 100644
index 0000000..fb75a0f
Binary files /dev/null and b/out/production/A079/MXDJR/StartPack.class differ
diff --git a/out/production/A079/MXDJR/TempMessageEventPack.class b/out/production/A079/MXDJR/TempMessageEventPack.class
new file mode 100644
index 0000000..6c61671
Binary files /dev/null and b/out/production/A079/MXDJR/TempMessageEventPack.class differ
diff --git a/out/production/A079/client/BuddyEntry.class b/out/production/A079/client/BuddyEntry.class
new file mode 100644
index 0000000..b0790cb
Binary files /dev/null and b/out/production/A079/client/BuddyEntry.class differ
diff --git a/out/production/A079/client/BuddyList$BuddyAddResult.class b/out/production/A079/client/BuddyList$BuddyAddResult.class
new file mode 100644
index 0000000..9cbebf3
Binary files /dev/null and b/out/production/A079/client/BuddyList$BuddyAddResult.class differ
diff --git a/out/production/A079/client/BuddyList$BuddyOperation.class b/out/production/A079/client/BuddyList$BuddyOperation.class
new file mode 100644
index 0000000..5550696
Binary files /dev/null and b/out/production/A079/client/BuddyList$BuddyOperation.class differ
diff --git a/out/production/A079/client/BuddyList.class b/out/production/A079/client/BuddyList.class
new file mode 100644
index 0000000..fddac39
Binary files /dev/null and b/out/production/A079/client/BuddyList.class differ
diff --git a/out/production/A079/client/ISkill.class b/out/production/A079/client/ISkill.class
new file mode 100644
index 0000000..f28c814
Binary files /dev/null and b/out/production/A079/client/ISkill.class differ
diff --git a/out/production/A079/client/ItemVac.class b/out/production/A079/client/ItemVac.class
new file mode 100644
index 0000000..617a47c
Binary files /dev/null and b/out/production/A079/client/ItemVac.class differ
diff --git a/out/production/A079/client/LoginCrypto.class b/out/production/A079/client/LoginCrypto.class
new file mode 100644
index 0000000..ca7a4b7
Binary files /dev/null and b/out/production/A079/client/LoginCrypto.class differ
diff --git a/out/production/A079/client/LoginCryptoLegacy.class b/out/production/A079/client/LoginCryptoLegacy.class
new file mode 100644
index 0000000..34f6966
Binary files /dev/null and b/out/production/A079/client/LoginCryptoLegacy.class differ
diff --git a/out/production/A079/client/MapleBeans$BeansType.class b/out/production/A079/client/MapleBeans$BeansType.class
new file mode 100644
index 0000000..3f6f725
Binary files /dev/null and b/out/production/A079/client/MapleBeans$BeansType.class differ
diff --git a/out/production/A079/client/MapleBeans.class b/out/production/A079/client/MapleBeans.class
new file mode 100644
index 0000000..9c13320
Binary files /dev/null and b/out/production/A079/client/MapleBeans.class differ
diff --git a/out/production/A079/client/MapleBuffStat.class b/out/production/A079/client/MapleBuffStat.class
new file mode 100644
index 0000000..1535e0c
Binary files /dev/null and b/out/production/A079/client/MapleBuffStat.class differ
diff --git a/out/production/A079/client/MapleBuffStatValueHolder.class b/out/production/A079/client/MapleBuffStatValueHolder.class
new file mode 100644
index 0000000..224d8d3
Binary files /dev/null and b/out/production/A079/client/MapleBuffStatValueHolder.class differ
diff --git a/out/production/A079/client/MapleCharacter$1.class b/out/production/A079/client/MapleCharacter$1.class
new file mode 100644
index 0000000..1afa75b
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$1.class differ
diff --git a/out/production/A079/client/MapleCharacter$2.class b/out/production/A079/client/MapleCharacter$2.class
new file mode 100644
index 0000000..02dbd62
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$2.class differ
diff --git a/out/production/A079/client/MapleCharacter$3.class b/out/production/A079/client/MapleCharacter$3.class
new file mode 100644
index 0000000..8bef3b6
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$3.class differ
diff --git a/out/production/A079/client/MapleCharacter$4.class b/out/production/A079/client/MapleCharacter$4.class
new file mode 100644
index 0000000..94e14fc
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$4.class differ
diff --git a/out/production/A079/client/MapleCharacter$5.class b/out/production/A079/client/MapleCharacter$5.class
new file mode 100644
index 0000000..75be01e
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$5.class differ
diff --git a/out/production/A079/client/MapleCharacter$6.class b/out/production/A079/client/MapleCharacter$6.class
new file mode 100644
index 0000000..5086d93
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$6.class differ
diff --git a/out/production/A079/client/MapleCharacter$7.class b/out/production/A079/client/MapleCharacter$7.class
new file mode 100644
index 0000000..386a1b1
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$7.class differ
diff --git a/out/production/A079/client/MapleCharacter$8.class b/out/production/A079/client/MapleCharacter$8.class
new file mode 100644
index 0000000..07031cb
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$8.class differ
diff --git a/out/production/A079/client/MapleCharacter$FameStatus.class b/out/production/A079/client/MapleCharacter$FameStatus.class
new file mode 100644
index 0000000..b07492c
Binary files /dev/null and b/out/production/A079/client/MapleCharacter$FameStatus.class differ
diff --git a/out/production/A079/client/MapleCharacter.class b/out/production/A079/client/MapleCharacter.class
new file mode 100644
index 0000000..eca3e58
Binary files /dev/null and b/out/production/A079/client/MapleCharacter.class differ
diff --git a/out/production/A079/client/MapleCharacterUtil.class b/out/production/A079/client/MapleCharacterUtil.class
new file mode 100644
index 0000000..0680d45
Binary files /dev/null and b/out/production/A079/client/MapleCharacterUtil.class differ
diff --git a/out/production/A079/client/MapleClient$1.class b/out/production/A079/client/MapleClient$1.class
new file mode 100644
index 0000000..fac8121
Binary files /dev/null and b/out/production/A079/client/MapleClient$1.class differ
diff --git a/out/production/A079/client/MapleClient$2.class b/out/production/A079/client/MapleClient$2.class
new file mode 100644
index 0000000..2a46496
Binary files /dev/null and b/out/production/A079/client/MapleClient$2.class differ
diff --git a/out/production/A079/client/MapleClient$CharNameAndId.class b/out/production/A079/client/MapleClient$CharNameAndId.class
new file mode 100644
index 0000000..d3dcb59
Binary files /dev/null and b/out/production/A079/client/MapleClient$CharNameAndId.class differ
diff --git a/out/production/A079/client/MapleClient.class b/out/production/A079/client/MapleClient.class
new file mode 100644
index 0000000..2b05f45
Binary files /dev/null and b/out/production/A079/client/MapleClient.class differ
diff --git a/out/production/A079/client/MapleCoolDownValueHolder.class b/out/production/A079/client/MapleCoolDownValueHolder.class
new file mode 100644
index 0000000..deca71d
Binary files /dev/null and b/out/production/A079/client/MapleCoolDownValueHolder.class differ
diff --git a/out/production/A079/client/MapleDisease$1.class b/out/production/A079/client/MapleDisease$1.class
new file mode 100644
index 0000000..d36b78f
Binary files /dev/null and b/out/production/A079/client/MapleDisease$1.class differ
diff --git a/out/production/A079/client/MapleDisease.class b/out/production/A079/client/MapleDisease.class
new file mode 100644
index 0000000..7b3646e
Binary files /dev/null and b/out/production/A079/client/MapleDisease.class differ
diff --git a/out/production/A079/client/MapleDiseaseValueHolder.class b/out/production/A079/client/MapleDiseaseValueHolder.class
new file mode 100644
index 0000000..06ce175
Binary files /dev/null and b/out/production/A079/client/MapleDiseaseValueHolder.class differ
diff --git a/out/production/A079/client/MapleEquipOnlyId$1.class b/out/production/A079/client/MapleEquipOnlyId$1.class
new file mode 100644
index 0000000..49b8edd
Binary files /dev/null and b/out/production/A079/client/MapleEquipOnlyId$1.class differ
diff --git a/out/production/A079/client/MapleEquipOnlyId$SingletonHolder.class b/out/production/A079/client/MapleEquipOnlyId$SingletonHolder.class
new file mode 100644
index 0000000..a61a867
Binary files /dev/null and b/out/production/A079/client/MapleEquipOnlyId$SingletonHolder.class differ
diff --git a/out/production/A079/client/MapleEquipOnlyId.class b/out/production/A079/client/MapleEquipOnlyId.class
new file mode 100644
index 0000000..519d856
Binary files /dev/null and b/out/production/A079/client/MapleEquipOnlyId.class differ
diff --git a/out/production/A079/client/MapleJob.class b/out/production/A079/client/MapleJob.class
new file mode 100644
index 0000000..671062a
Binary files /dev/null and b/out/production/A079/client/MapleJob.class differ
diff --git a/out/production/A079/client/MapleKeyLayout.class b/out/production/A079/client/MapleKeyLayout.class
new file mode 100644
index 0000000..45e1dee
Binary files /dev/null and b/out/production/A079/client/MapleKeyLayout.class differ
diff --git a/out/production/A079/client/MapleLieDetector$1.class b/out/production/A079/client/MapleLieDetector$1.class
new file mode 100644
index 0000000..c1df14a
Binary files /dev/null and b/out/production/A079/client/MapleLieDetector$1.class differ
diff --git a/out/production/A079/client/MapleLieDetector.class b/out/production/A079/client/MapleLieDetector.class
new file mode 100644
index 0000000..1720cf8
Binary files /dev/null and b/out/production/A079/client/MapleLieDetector.class differ
diff --git a/out/production/A079/client/MapleQuestStatus.class b/out/production/A079/client/MapleQuestStatus.class
new file mode 100644
index 0000000..b117d39
Binary files /dev/null and b/out/production/A079/client/MapleQuestStatus.class differ
diff --git a/out/production/A079/client/MapleStat$Temp.class b/out/production/A079/client/MapleStat$Temp.class
new file mode 100644
index 0000000..205f4cc
Binary files /dev/null and b/out/production/A079/client/MapleStat$Temp.class differ
diff --git a/out/production/A079/client/MapleStat.class b/out/production/A079/client/MapleStat.class
new file mode 100644
index 0000000..68c6661
Binary files /dev/null and b/out/production/A079/client/MapleStat.class differ
diff --git a/out/production/A079/client/MobVac.class b/out/production/A079/client/MobVac.class
new file mode 100644
index 0000000..8a0e9af
Binary files /dev/null and b/out/production/A079/client/MobVac.class differ
diff --git a/out/production/A079/client/MonsterBook.class b/out/production/A079/client/MonsterBook.class
new file mode 100644
index 0000000..fa88a42
Binary files /dev/null and b/out/production/A079/client/MonsterBook.class differ
diff --git a/out/production/A079/client/PlayerRandomStream.class b/out/production/A079/client/PlayerRandomStream.class
new file mode 100644
index 0000000..9719d56
Binary files /dev/null and b/out/production/A079/client/PlayerRandomStream.class differ
diff --git a/out/production/A079/client/PlayerStats$1.class b/out/production/A079/client/PlayerStats$1.class
new file mode 100644
index 0000000..7fc98d4
Binary files /dev/null and b/out/production/A079/client/PlayerStats$1.class differ
diff --git a/out/production/A079/client/PlayerStats.class b/out/production/A079/client/PlayerStats.class
new file mode 100644
index 0000000..3b7cb7c
Binary files /dev/null and b/out/production/A079/client/PlayerStats.class differ
diff --git a/out/production/A079/client/RockPaperScissors.class b/out/production/A079/client/RockPaperScissors.class
new file mode 100644
index 0000000..b5f7660
Binary files /dev/null and b/out/production/A079/client/RockPaperScissors.class differ
diff --git a/out/production/A079/client/Skill.class b/out/production/A079/client/Skill.class
new file mode 100644
index 0000000..81a37d0
Binary files /dev/null and b/out/production/A079/client/Skill.class differ
diff --git a/out/production/A079/client/SkillEntry.class b/out/production/A079/client/SkillEntry.class
new file mode 100644
index 0000000..2875b73
Binary files /dev/null and b/out/production/A079/client/SkillEntry.class differ
diff --git a/out/production/A079/client/SkillFactory.class b/out/production/A079/client/SkillFactory.class
new file mode 100644
index 0000000..a0a4ff3
Binary files /dev/null and b/out/production/A079/client/SkillFactory.class differ
diff --git a/out/production/A079/client/SkillMacro.class b/out/production/A079/client/SkillMacro.class
new file mode 100644
index 0000000..4ce5817
Binary files /dev/null and b/out/production/A079/client/SkillMacro.class differ
diff --git a/out/production/A079/client/SummonSkillEntry.class b/out/production/A079/client/SummonSkillEntry.class
new file mode 100644
index 0000000..db90b11
Binary files /dev/null and b/out/production/A079/client/SummonSkillEntry.class differ
diff --git a/out/production/A079/client/anticheat/CheatTracker$1.class b/out/production/A079/client/anticheat/CheatTracker$1.class
new file mode 100644
index 0000000..11709ee
Binary files /dev/null and b/out/production/A079/client/anticheat/CheatTracker$1.class differ
diff --git a/out/production/A079/client/anticheat/CheatTracker$InvalidationTask.class b/out/production/A079/client/anticheat/CheatTracker$InvalidationTask.class
new file mode 100644
index 0000000..45cdb3d
Binary files /dev/null and b/out/production/A079/client/anticheat/CheatTracker$InvalidationTask.class differ
diff --git a/out/production/A079/client/anticheat/CheatTracker.class b/out/production/A079/client/anticheat/CheatTracker.class
new file mode 100644
index 0000000..30736a4
Binary files /dev/null and b/out/production/A079/client/anticheat/CheatTracker.class differ
diff --git a/out/production/A079/client/anticheat/CheatingOffense.class b/out/production/A079/client/anticheat/CheatingOffense.class
new file mode 100644
index 0000000..06736a8
Binary files /dev/null and b/out/production/A079/client/anticheat/CheatingOffense.class differ
diff --git a/out/production/A079/client/anticheat/CheatingOffenseEntry.class b/out/production/A079/client/anticheat/CheatingOffenseEntry.class
new file mode 100644
index 0000000..942657d
Binary files /dev/null and b/out/production/A079/client/anticheat/CheatingOffenseEntry.class differ
diff --git a/out/production/A079/client/anticheat/CheatingOffensePersister$PersistingTask.class b/out/production/A079/client/anticheat/CheatingOffensePersister$PersistingTask.class
new file mode 100644
index 0000000..82e5cc7
Binary files /dev/null and b/out/production/A079/client/anticheat/CheatingOffensePersister$PersistingTask.class differ
diff --git a/out/production/A079/client/anticheat/CheatingOffensePersister.class b/out/production/A079/client/anticheat/CheatingOffensePersister.class
new file mode 100644
index 0000000..1a620d8
Binary files /dev/null and b/out/production/A079/client/anticheat/CheatingOffensePersister.class differ
diff --git a/out/production/A079/client/inventory/Equip.class b/out/production/A079/client/inventory/Equip.class
new file mode 100644
index 0000000..992b4b8
Binary files /dev/null and b/out/production/A079/client/inventory/Equip.class differ
diff --git a/out/production/A079/client/inventory/EquipAdditions$RingSet.class b/out/production/A079/client/inventory/EquipAdditions$RingSet.class
new file mode 100644
index 0000000..25acaa5
Binary files /dev/null and b/out/production/A079/client/inventory/EquipAdditions$RingSet.class differ
diff --git a/out/production/A079/client/inventory/EquipAdditions.class b/out/production/A079/client/inventory/EquipAdditions.class
new file mode 100644
index 0000000..0091bcd
Binary files /dev/null and b/out/production/A079/client/inventory/EquipAdditions.class differ
diff --git a/out/production/A079/client/inventory/IEquip$ScrollResult.class b/out/production/A079/client/inventory/IEquip$ScrollResult.class
new file mode 100644
index 0000000..5e987cc
Binary files /dev/null and b/out/production/A079/client/inventory/IEquip$ScrollResult.class differ
diff --git a/out/production/A079/client/inventory/IEquip.class b/out/production/A079/client/inventory/IEquip.class
new file mode 100644
index 0000000..f322ef0
Binary files /dev/null and b/out/production/A079/client/inventory/IEquip.class differ
diff --git a/out/production/A079/client/inventory/IItem.class b/out/production/A079/client/inventory/IItem.class
new file mode 100644
index 0000000..08bbbf3
Binary files /dev/null and b/out/production/A079/client/inventory/IItem.class differ
diff --git a/out/production/A079/client/inventory/InventoryException.class b/out/production/A079/client/inventory/InventoryException.class
new file mode 100644
index 0000000..e26dc01
Binary files /dev/null and b/out/production/A079/client/inventory/InventoryException.class differ
diff --git a/out/production/A079/client/inventory/Item.class b/out/production/A079/client/inventory/Item.class
new file mode 100644
index 0000000..9e4f116
Binary files /dev/null and b/out/production/A079/client/inventory/Item.class differ
diff --git a/out/production/A079/client/inventory/ItemFlag.class b/out/production/A079/client/inventory/ItemFlag.class
new file mode 100644
index 0000000..e01b777
Binary files /dev/null and b/out/production/A079/client/inventory/ItemFlag.class differ
diff --git a/out/production/A079/client/inventory/ItemFlag2.class b/out/production/A079/client/inventory/ItemFlag2.class
new file mode 100644
index 0000000..d58b0b6
Binary files /dev/null and b/out/production/A079/client/inventory/ItemFlag2.class differ
diff --git a/out/production/A079/client/inventory/ItemLoader.class b/out/production/A079/client/inventory/ItemLoader.class
new file mode 100644
index 0000000..776755a
Binary files /dev/null and b/out/production/A079/client/inventory/ItemLoader.class differ
diff --git a/out/production/A079/client/inventory/MapleInventory.class b/out/production/A079/client/inventory/MapleInventory.class
new file mode 100644
index 0000000..a66a788
Binary files /dev/null and b/out/production/A079/client/inventory/MapleInventory.class differ
diff --git a/out/production/A079/client/inventory/MapleInventoryIdentifier.class b/out/production/A079/client/inventory/MapleInventoryIdentifier.class
new file mode 100644
index 0000000..88741bb
Binary files /dev/null and b/out/production/A079/client/inventory/MapleInventoryIdentifier.class differ
diff --git a/out/production/A079/client/inventory/MapleInventoryType.class b/out/production/A079/client/inventory/MapleInventoryType.class
new file mode 100644
index 0000000..3a9e472
Binary files /dev/null and b/out/production/A079/client/inventory/MapleInventoryType.class differ
diff --git a/out/production/A079/client/inventory/MapleMount$1.class b/out/production/A079/client/inventory/MapleMount$1.class
new file mode 100644
index 0000000..08f2369
Binary files /dev/null and b/out/production/A079/client/inventory/MapleMount$1.class differ
diff --git a/out/production/A079/client/inventory/MapleMount.class b/out/production/A079/client/inventory/MapleMount.class
new file mode 100644
index 0000000..12f6029
Binary files /dev/null and b/out/production/A079/client/inventory/MapleMount.class differ
diff --git a/out/production/A079/client/inventory/MaplePet$PetFlag.class b/out/production/A079/client/inventory/MaplePet$PetFlag.class
new file mode 100644
index 0000000..174a675
Binary files /dev/null and b/out/production/A079/client/inventory/MaplePet$PetFlag.class differ
diff --git a/out/production/A079/client/inventory/MaplePet.class b/out/production/A079/client/inventory/MaplePet.class
new file mode 100644
index 0000000..73adbab
Binary files /dev/null and b/out/production/A079/client/inventory/MaplePet.class differ
diff --git a/out/production/A079/client/inventory/MapleRing$RingComparator.class b/out/production/A079/client/inventory/MapleRing$RingComparator.class
new file mode 100644
index 0000000..008d1f2
Binary files /dev/null and b/out/production/A079/client/inventory/MapleRing$RingComparator.class differ
diff --git a/out/production/A079/client/inventory/MapleRing.class b/out/production/A079/client/inventory/MapleRing.class
new file mode 100644
index 0000000..7018a32
Binary files /dev/null and b/out/production/A079/client/inventory/MapleRing.class differ
diff --git a/out/production/A079/client/inventory/MapleWeaponType.class b/out/production/A079/client/inventory/MapleWeaponType.class
new file mode 100644
index 0000000..e2329bf
Binary files /dev/null and b/out/production/A079/client/inventory/MapleWeaponType.class differ
diff --git a/out/production/A079/client/inventory/ModifyInventory$Types.class b/out/production/A079/client/inventory/ModifyInventory$Types.class
new file mode 100644
index 0000000..dac5367
Binary files /dev/null and b/out/production/A079/client/inventory/ModifyInventory$Types.class differ
diff --git a/out/production/A079/client/inventory/ModifyInventory.class b/out/production/A079/client/inventory/ModifyInventory.class
new file mode 100644
index 0000000..9d871b0
Binary files /dev/null and b/out/production/A079/client/inventory/ModifyInventory.class differ
diff --git a/out/production/A079/client/inventory/OnlyID$run.class b/out/production/A079/client/inventory/OnlyID$run.class
new file mode 100644
index 0000000..e0a515c
Binary files /dev/null and b/out/production/A079/client/inventory/OnlyID$run.class differ
diff --git a/out/production/A079/client/inventory/OnlyID.class b/out/production/A079/client/inventory/OnlyID.class
new file mode 100644
index 0000000..bf6347e
Binary files /dev/null and b/out/production/A079/client/inventory/OnlyID.class differ
diff --git a/out/production/A079/client/inventory/PetCommand.class b/out/production/A079/client/inventory/PetCommand.class
new file mode 100644
index 0000000..19b7b4b
Binary files /dev/null and b/out/production/A079/client/inventory/PetCommand.class differ
diff --git a/out/production/A079/client/inventory/PetDataFactory.class b/out/production/A079/client/inventory/PetDataFactory.class
new file mode 100644
index 0000000..54f571d
Binary files /dev/null and b/out/production/A079/client/inventory/PetDataFactory.class differ
diff --git a/out/production/A079/client/messages/CommandProcessor$1.class b/out/production/A079/client/messages/CommandProcessor$1.class
new file mode 100644
index 0000000..741d59a
Binary files /dev/null and b/out/production/A079/client/messages/CommandProcessor$1.class differ
diff --git a/out/production/A079/client/messages/CommandProcessor.class b/out/production/A079/client/messages/CommandProcessor.class
new file mode 100644
index 0000000..b16bff4
Binary files /dev/null and b/out/production/A079/client/messages/CommandProcessor.class differ
diff --git a/out/production/A079/client/messages/CommandProcessorUtil.class b/out/production/A079/client/messages/CommandProcessorUtil.class
new file mode 100644
index 0000000..359718d
Binary files /dev/null and b/out/production/A079/client/messages/CommandProcessorUtil.class differ
diff --git a/out/production/A079/client/messages/ConsoleCommandProcessor.class b/out/production/A079/client/messages/ConsoleCommandProcessor.class
new file mode 100644
index 0000000..93d9614
Binary files /dev/null and b/out/production/A079/client/messages/ConsoleCommandProcessor.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$CashEveryone.class b/out/production/A079/client/messages/commands/AdminCommand$CashEveryone.class
new file mode 100644
index 0000000..f548604
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$CashEveryone.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$CashMap.class b/out/production/A079/client/messages/commands/AdminCommand$CashMap.class
new file mode 100644
index 0000000..a5ab778
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$CashMap.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$CloneMe.class b/out/production/A079/client/messages/commands/AdminCommand$CloneMe.class
new file mode 100644
index 0000000..42c4663
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$CloneMe.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$DCAll.class b/out/production/A079/client/messages/commands/AdminCommand$DCAll.class
new file mode 100644
index 0000000..f666d57
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$DCAll.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$DestroyPNPC.class b/out/production/A079/client/messages/commands/AdminCommand$DestroyPNPC.class
new file mode 100644
index 0000000..1501ecd
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$DestroyPNPC.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Disease.class b/out/production/A079/client/messages/commands/AdminCommand$Disease.class
new file mode 100644
index 0000000..531f92c
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Disease.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$DisposeClones.class b/out/production/A079/client/messages/commands/AdminCommand$DisposeClones.class
new file mode 100644
index 0000000..4ddd00c
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$DisposeClones.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Drop.class b/out/production/A079/client/messages/commands/AdminCommand$Drop.class
new file mode 100644
index 0000000..a097dfd
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Drop.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Fame.class b/out/production/A079/client/messages/commands/AdminCommand$Fame.class
new file mode 100644
index 0000000..be0613b
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Fame.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$GC.class b/out/production/A079/client/messages/commands/AdminCommand$GC.class
new file mode 100644
index 0000000..4a70b6a
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$GC.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$GainCash.class b/out/production/A079/client/messages/commands/AdminCommand$GainCash.class
new file mode 100644
index 0000000..84f2b22
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$GainCash.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$GainMaplePoint.class b/out/production/A079/client/messages/commands/AdminCommand$GainMaplePoint.class
new file mode 100644
index 0000000..2b46347
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$GainMaplePoint.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$GainPoint.class b/out/production/A079/client/messages/commands/AdminCommand$GainPoint.class
new file mode 100644
index 0000000..3161bb7
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$GainPoint.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$GainVP.class b/out/production/A079/client/messages/commands/AdminCommand$GainVP.class
new file mode 100644
index 0000000..de323b5
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$GainVP.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$GodMode.class b/out/production/A079/client/messages/commands/AdminCommand$GodMode.class
new file mode 100644
index 0000000..df6c303
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$GodMode.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$HitMonsterByOID.class b/out/production/A079/client/messages/commands/AdminCommand$HitMonsterByOID.class
new file mode 100644
index 0000000..ceddeb0
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$HitMonsterByOID.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Item.class b/out/production/A079/client/messages/commands/AdminCommand$Item.class
new file mode 100644
index 0000000..8816366
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Item.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$KillMap.class b/out/production/A079/client/messages/commands/AdminCommand$KillMap.class
new file mode 100644
index 0000000..e705534
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$KillMap.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$KillMonsterByOID.class b/out/production/A079/client/messages/commands/AdminCommand$KillMonsterByOID.class
new file mode 100644
index 0000000..5ffd8e3
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$KillMonsterByOID.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$LOLCastle.class b/out/production/A079/client/messages/commands/AdminCommand$LOLCastle.class
new file mode 100644
index 0000000..4ae2bc6
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$LOLCastle.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$LockItem.class b/out/production/A079/client/messages/commands/AdminCommand$LockItem.class
new file mode 100644
index 0000000..6f2463e
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$LockItem.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$MakeOfflineP.class b/out/production/A079/client/messages/commands/AdminCommand$MakeOfflineP.class
new file mode 100644
index 0000000..8cea3bc
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$MakeOfflineP.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$MakePNPC.class b/out/production/A079/client/messages/commands/AdminCommand$MakePNPC.class
new file mode 100644
index 0000000..23a2879
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$MakePNPC.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$MesoEveryone.class b/out/production/A079/client/messages/commands/AdminCommand$MesoEveryone.class
new file mode 100644
index 0000000..6141de1
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$MesoEveryone.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$MesoMap.class b/out/production/A079/client/messages/commands/AdminCommand$MesoMap.class
new file mode 100644
index 0000000..49d726b
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$MesoMap.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$MobVac.class b/out/production/A079/client/messages/commands/AdminCommand$MobVac.class
new file mode 100644
index 0000000..887563e
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$MobVac.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Monitor.class b/out/production/A079/client/messages/commands/AdminCommand$Monitor.class
new file mode 100644
index 0000000..059abcf
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Monitor.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$NPC.class b/out/production/A079/client/messages/commands/AdminCommand$NPC.class
new file mode 100644
index 0000000..acdb7f2
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$NPC.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$PNPC.class b/out/production/A079/client/messages/commands/AdminCommand$PNPC.class
new file mode 100644
index 0000000..0450ed4
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$PNPC.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Packet.class b/out/production/A079/client/messages/commands/AdminCommand$Packet.class
new file mode 100644
index 0000000..41474da
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Packet.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$PermWeather.class b/out/production/A079/client/messages/commands/AdminCommand$PermWeather.class
new file mode 100644
index 0000000..754a02f
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$PermWeather.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$ProDrop.class b/out/production/A079/client/messages/commands/AdminCommand$ProDrop.class
new file mode 100644
index 0000000..642eba0
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$ProDrop.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$ReloadGashapon.class b/out/production/A079/client/messages/commands/AdminCommand$ReloadGashapon.class
new file mode 100644
index 0000000..ca68339
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$ReloadGashapon.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$ReloadMap.class b/out/production/A079/client/messages/commands/AdminCommand$ReloadMap.class
new file mode 100644
index 0000000..4e8290b
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$ReloadMap.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$ResetMap.class b/out/production/A079/client/messages/commands/AdminCommand$ResetMap.class
new file mode 100644
index 0000000..4b0db91
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$ResetMap.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$ResetMobs.class b/out/production/A079/client/messages/commands/AdminCommand$ResetMobs.class
new file mode 100644
index 0000000..c06711e
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$ResetMobs.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Respawn.class b/out/production/A079/client/messages/commands/AdminCommand$Respawn.class
new file mode 100644
index 0000000..456e664
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Respawn.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$SavePlayerShops.class b/out/production/A079/client/messages/commands/AdminCommand$SavePlayerShops.class
new file mode 100644
index 0000000..8b6151e
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$SavePlayerShops.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$SendAllNote.class b/out/production/A079/client/messages/commands/AdminCommand$SendAllNote.class
new file mode 100644
index 0000000..fecf533
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$SendAllNote.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$ShowTrace.class b/out/production/A079/client/messages/commands/AdminCommand$ShowTrace.class
new file mode 100644
index 0000000..e2c21dc
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$ShowTrace.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Spawn.class b/out/production/A079/client/messages/commands/AdminCommand$Spawn.class
new file mode 100644
index 0000000..3635453
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Spawn.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$StartProfiling.class b/out/production/A079/client/messages/commands/AdminCommand$StartProfiling.class
new file mode 100644
index 0000000..d8349d0
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$StartProfiling.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$StopProfiling.class b/out/production/A079/client/messages/commands/AdminCommand$StopProfiling.class
new file mode 100644
index 0000000..73363ae
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$StopProfiling.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$Threads.class b/out/production/A079/client/messages/commands/AdminCommand$Threads.class
new file mode 100644
index 0000000..ee32cf1
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$Threads.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$ToggleMegaphone.class b/out/production/A079/client/messages/commands/AdminCommand$ToggleMegaphone.class
new file mode 100644
index 0000000..5eeb6c6
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$ToggleMegaphone.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$ToggleOffense.class b/out/production/A079/client/messages/commands/AdminCommand$ToggleOffense.class
new file mode 100644
index 0000000..2bd36eb
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$ToggleOffense.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$WarpAllHere.class b/out/production/A079/client/messages/commands/AdminCommand$WarpAllHere.class
new file mode 100644
index 0000000..4a2e844
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$WarpAllHere.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$WarpPlayersTo.class b/out/production/A079/client/messages/commands/AdminCommand$WarpPlayersTo.class
new file mode 100644
index 0000000..37e6f2d
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$WarpPlayersTo.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$autoban.class b/out/production/A079/client/messages/commands/AdminCommand$autoban.class
new file mode 100644
index 0000000..eb1c59c
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$autoban.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$giveMeso.class b/out/production/A079/client/messages/commands/AdminCommand$giveMeso.class
new file mode 100644
index 0000000..831f76b
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$giveMeso.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$maxmeso.class b/out/production/A079/client/messages/commands/AdminCommand$maxmeso.class
new file mode 100644
index 0000000..ba7d35a
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$maxmeso.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$mesos.class b/out/production/A079/client/messages/commands/AdminCommand$mesos.class
new file mode 100644
index 0000000..5da21e4
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$mesos.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$serverMsg.class b/out/production/A079/client/messages/commands/AdminCommand$serverMsg.class
new file mode 100644
index 0000000..7949741
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$serverMsg.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$toggleDrop.class b/out/production/A079/client/messages/commands/AdminCommand$toggleDrop.class
new file mode 100644
index 0000000..1fff93b
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$toggleDrop.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$丢.class b/out/production/A079/client/messages/commands/AdminCommand$丢.class
new file mode 100644
index 0000000..ec7d61e
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$丢.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$临时npc.class b/out/production/A079/client/messages/commands/AdminCommand$临时npc.class
new file mode 100644
index 0000000..e470d55
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$临时npc.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$开启自动活动.class b/out/production/A079/client/messages/commands/AdminCommand$开启自动活动.class
new file mode 100644
index 0000000..228e728
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$开启自动活动.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$无敌.class b/out/production/A079/client/messages/commands/AdminCommand$无敌.class
new file mode 100644
index 0000000..b847f97
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$无敌.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$最近传送点.class b/out/production/A079/client/messages/commands/AdminCommand$最近传送点.class
new file mode 100644
index 0000000..c3dceac
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$最近传送点.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$永久npc.class b/out/production/A079/client/messages/commands/AdminCommand$永久npc.class
new file mode 100644
index 0000000..046fae2
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$永久npc.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$活动开始$1.class b/out/production/A079/client/messages/commands/AdminCommand$活动开始$1.class
new file mode 100644
index 0000000..94f6f9b
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$活动开始$1.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$活动开始.class b/out/production/A079/client/messages/commands/AdminCommand$活动开始.class
new file mode 100644
index 0000000..b29b511
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$活动开始.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$测谎所有人.class b/out/production/A079/client/messages/commands/AdminCommand$测谎所有人.class
new file mode 100644
index 0000000..b87fb7c
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$测谎所有人.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$清理内存.class b/out/production/A079/client/messages/commands/AdminCommand$清理内存.class
new file mode 100644
index 0000000..47d35a2
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$清理内存.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给FB积分.class b/out/production/A079/client/messages/commands/AdminCommand$给FB积分.class
new file mode 100644
index 0000000..2f7ea86
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给FB积分.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给地图人点数.class b/out/production/A079/client/messages/commands/AdminCommand$给地图人点数.class
new file mode 100644
index 0000000..aef044c
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给地图人点数.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给地图人红利.class b/out/production/A079/client/messages/commands/AdminCommand$给地图人红利.class
new file mode 100644
index 0000000..bcd9fe2
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给地图人红利.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给地图人金币.class b/out/production/A079/client/messages/commands/AdminCommand$给地图人金币.class
new file mode 100644
index 0000000..9871253
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给地图人金币.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给所有人点数.class b/out/production/A079/client/messages/commands/AdminCommand$给所有人点数.class
new file mode 100644
index 0000000..a326bca
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给所有人点数.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给所有人道具.class b/out/production/A079/client/messages/commands/AdminCommand$给所有人道具.class
new file mode 100644
index 0000000..a873419
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给所有人道具.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给抵用.class b/out/production/A079/client/messages/commands/AdminCommand$给抵用.class
new file mode 100644
index 0000000..bb30437
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给抵用.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给推广积分.class b/out/production/A079/client/messages/commands/AdminCommand$给推广积分.class
new file mode 100644
index 0000000..ff21943
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给推广积分.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$给点数.class b/out/production/A079/client/messages/commands/AdminCommand$给点数.class
new file mode 100644
index 0000000..1c0f817
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$给点数.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand$选择活动.class b/out/production/A079/client/messages/commands/AdminCommand$选择活动.class
new file mode 100644
index 0000000..4d3abf4
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand$选择活动.class differ
diff --git a/out/production/A079/client/messages/commands/AdminCommand.class b/out/production/A079/client/messages/commands/AdminCommand.class
new file mode 100644
index 0000000..7834f11
Binary files /dev/null and b/out/production/A079/client/messages/commands/AdminCommand.class differ
diff --git a/out/production/A079/client/messages/commands/CommandExecute$ReturnValue.class b/out/production/A079/client/messages/commands/CommandExecute$ReturnValue.class
new file mode 100644
index 0000000..cb3a465
Binary files /dev/null and b/out/production/A079/client/messages/commands/CommandExecute$ReturnValue.class differ
diff --git a/out/production/A079/client/messages/commands/CommandExecute$TradeExecute.class b/out/production/A079/client/messages/commands/CommandExecute$TradeExecute.class
new file mode 100644
index 0000000..e6ce7f7
Binary files /dev/null and b/out/production/A079/client/messages/commands/CommandExecute$TradeExecute.class differ
diff --git a/out/production/A079/client/messages/commands/CommandExecute.class b/out/production/A079/client/messages/commands/CommandExecute.class
new file mode 100644
index 0000000..87b85af
Binary files /dev/null and b/out/production/A079/client/messages/commands/CommandExecute.class differ
diff --git a/out/production/A079/client/messages/commands/CommandObject.class b/out/production/A079/client/messages/commands/CommandObject.class
new file mode 100644
index 0000000..c2d8fa8
Binary files /dev/null and b/out/production/A079/client/messages/commands/CommandObject.class differ
diff --git a/out/production/A079/client/messages/commands/ConsoleCommand.class b/out/production/A079/client/messages/commands/ConsoleCommand.class
new file mode 100644
index 0000000..dbd6125
Binary files /dev/null and b/out/production/A079/client/messages/commands/ConsoleCommand.class differ
diff --git a/out/production/A079/client/messages/commands/ConsoleCommandExecute.class b/out/production/A079/client/messages/commands/ConsoleCommandExecute.class
new file mode 100644
index 0000000..38f3906
Binary files /dev/null and b/out/production/A079/client/messages/commands/ConsoleCommandExecute.class differ
diff --git a/out/production/A079/client/messages/commands/ConsoleCommandObject.class b/out/production/A079/client/messages/commands/ConsoleCommandObject.class
new file mode 100644
index 0000000..500c580
Binary files /dev/null and b/out/production/A079/client/messages/commands/ConsoleCommandObject.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$AP.class b/out/production/A079/client/messages/commands/GMCommand$AP.class
new file mode 100644
index 0000000..d81a7a3
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$AP.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$CancelBuffs.class b/out/production/A079/client/messages/commands/GMCommand$CancelBuffs.class
new file mode 100644
index 0000000..fbfe55f
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$CancelBuffs.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ClearSkills.class b/out/production/A079/client/messages/commands/GMCommand$ClearSkills.class
new file mode 100644
index 0000000..313e342
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ClearSkills.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Clock.class b/out/production/A079/client/messages/commands/GMCommand$Clock.class
new file mode 100644
index 0000000..9467a96
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Clock.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$CompleteQuest.class b/out/production/A079/client/messages/commands/GMCommand$CompleteQuest.class
new file mode 100644
index 0000000..c98d20c
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$CompleteQuest.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$DestroyReactor.class b/out/production/A079/client/messages/commands/GMCommand$DestroyReactor.class
new file mode 100644
index 0000000..d03a64a
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$DestroyReactor.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$DropRate.class b/out/production/A079/client/messages/commands/GMCommand$DropRate.class
new file mode 100644
index 0000000..f4b38af
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$DropRate.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ExpRate.class b/out/production/A079/client/messages/commands/GMCommand$ExpRate.class
new file mode 100644
index 0000000..bda46ed
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ExpRate.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$FCompleteOther.class b/out/production/A079/client/messages/commands/GMCommand$FCompleteOther.class
new file mode 100644
index 0000000..5d8cd31
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$FCompleteOther.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$FCompleteQuest.class b/out/production/A079/client/messages/commands/GMCommand$FCompleteQuest.class
new file mode 100644
index 0000000..d854c9f
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$FCompleteQuest.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$FStartOther.class b/out/production/A079/client/messages/commands/GMCommand$FStartOther.class
new file mode 100644
index 0000000..9b83051
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$FStartOther.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$FStartQuest.class b/out/production/A079/client/messages/commands/GMCommand$FStartQuest.class
new file mode 100644
index 0000000..9a9eb70
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$FStartQuest.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$FakeRelog.class b/out/production/A079/client/messages/commands/GMCommand$FakeRelog.class
new file mode 100644
index 0000000..4cfce90
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$FakeRelog.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$GiveSP.class b/out/production/A079/client/messages/commands/GMCommand$GiveSP.class
new file mode 100644
index 0000000..844da9f
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$GiveSP.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$GiveSkill.class b/out/production/A079/client/messages/commands/GMCommand$GiveSkill.class
new file mode 100644
index 0000000..e37c62c
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$GiveSkill.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$GoTo.class b/out/production/A079/client/messages/commands/GMCommand$GoTo.class
new file mode 100644
index 0000000..3681b86
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$GoTo.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$HReactor.class b/out/production/A079/client/messages/commands/GMCommand$HReactor.class
new file mode 100644
index 0000000..140ec13
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$HReactor.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Kill.class b/out/production/A079/client/messages/commands/GMCommand$Kill.class
new file mode 100644
index 0000000..86572c0
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Kill.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$KillAll.class b/out/production/A079/client/messages/commands/GMCommand$KillAll.class
new file mode 100644
index 0000000..c9e667e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$KillAll.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$KillID.class b/out/production/A079/client/messages/commands/GMCommand$KillID.class
new file mode 100644
index 0000000..e97ed2b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$KillID.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$KillMonster.class b/out/production/A079/client/messages/commands/GMCommand$KillMonster.class
new file mode 100644
index 0000000..460067c
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$KillMonster.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Killalldrops.class b/out/production/A079/client/messages/commands/GMCommand$Killalldrops.class
new file mode 100644
index 0000000..780eac0
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Killalldrops.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Letter.class b/out/production/A079/client/messages/commands/GMCommand$Letter.class
new file mode 100644
index 0000000..af57bba
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Letter.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$LevelUp.class b/out/production/A079/client/messages/commands/GMCommand$LevelUp.class
new file mode 100644
index 0000000..36af9f7
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$LevelUp.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$LookNPCs.class b/out/production/A079/client/messages/commands/GMCommand$LookNPCs.class
new file mode 100644
index 0000000..9ea3371
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$LookNPCs.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$LookPortals.class b/out/production/A079/client/messages/commands/GMCommand$LookPortals.class
new file mode 100644
index 0000000..dabf99a
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$LookPortals.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$LookReactors.class b/out/production/A079/client/messages/commands/GMCommand$LookReactors.class
new file mode 100644
index 0000000..aa7624e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$LookReactors.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$LowHP.class b/out/production/A079/client/messages/commands/GMCommand$LowHP.class
new file mode 100644
index 0000000..93dd15a
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$LowHP.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Marry.class b/out/production/A079/client/messages/commands/GMCommand$Marry.class
new file mode 100644
index 0000000..a3697fb
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Marry.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$MaxSkills.class b/out/production/A079/client/messages/commands/GMCommand$MaxSkills.class
new file mode 100644
index 0000000..51ab4e5
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$MaxSkills.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$MesoRate.class b/out/production/A079/client/messages/commands/GMCommand$MesoRate.class
new file mode 100644
index 0000000..15e0056
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$MesoRate.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$MobDrop.class b/out/production/A079/client/messages/commands/GMCommand$MobDrop.class
new file mode 100644
index 0000000..655da22
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$MobDrop.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$MyPos.class b/out/production/A079/client/messages/commands/GMCommand$MyPos.class
new file mode 100644
index 0000000..2dddcca
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$MyPos.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$NearestPortal.class b/out/production/A079/client/messages/commands/GMCommand$NearestPortal.class
new file mode 100644
index 0000000..323e0cf
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$NearestPortal.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Notice.class b/out/production/A079/client/messages/commands/GMCommand$Notice.class
new file mode 100644
index 0000000..892903e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Notice.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$NpcNotice.class b/out/production/A079/client/messages/commands/GMCommand$NpcNotice.class
new file mode 100644
index 0000000..171fa71
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$NpcNotice.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadCS.class b/out/production/A079/client/messages/commands/GMCommand$ReloadCS.class
new file mode 100644
index 0000000..9595ec6
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadCS.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadDrops.class b/out/production/A079/client/messages/commands/GMCommand$ReloadDrops.class
new file mode 100644
index 0000000..6d5dae5
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadDrops.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadEvents.class b/out/production/A079/client/messages/commands/GMCommand$ReloadEvents.class
new file mode 100644
index 0000000..557248b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadEvents.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadFishing.class b/out/production/A079/client/messages/commands/GMCommand$ReloadFishing.class
new file mode 100644
index 0000000..20edc07
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadFishing.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadLife.class b/out/production/A079/client/messages/commands/GMCommand$ReloadLife.class
new file mode 100644
index 0000000..493b101
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadLife.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadOX.class b/out/production/A079/client/messages/commands/GMCommand$ReloadOX.class
new file mode 100644
index 0000000..6455a8d
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadOX.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadOps.class b/out/production/A079/client/messages/commands/GMCommand$ReloadOps.class
new file mode 100644
index 0000000..331489e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadOps.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadPortals.class b/out/production/A079/client/messages/commands/GMCommand$ReloadPortals.class
new file mode 100644
index 0000000..2311b55
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadPortals.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadQuests.class b/out/production/A079/client/messages/commands/GMCommand$ReloadQuests.class
new file mode 100644
index 0000000..ef95fc2
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadQuests.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ReloadShops.class b/out/production/A079/client/messages/commands/GMCommand$ReloadShops.class
new file mode 100644
index 0000000..b29efb0
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ReloadShops.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Reloadall.class b/out/production/A079/client/messages/commands/GMCommand$Reloadall.class
new file mode 100644
index 0000000..900f7e4
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Reloadall.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$RemoveDrops.class b/out/production/A079/client/messages/commands/GMCommand$RemoveDrops.class
new file mode 100644
index 0000000..0f33a2d
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$RemoveDrops.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$RemoveItem.class b/out/production/A079/client/messages/commands/GMCommand$RemoveItem.class
new file mode 100644
index 0000000..2a12917
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$RemoveItem.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$RemoveItemOff.class b/out/production/A079/client/messages/commands/GMCommand$RemoveItemOff.class
new file mode 100644
index 0000000..a59c01a
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$RemoveItemOff.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$RemoveNPCs.class b/out/production/A079/client/messages/commands/GMCommand$RemoveNPCs.class
new file mode 100644
index 0000000..ceca024
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$RemoveNPCs.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ResetQuest.class b/out/production/A079/client/messages/commands/GMCommand$ResetQuest.class
new file mode 100644
index 0000000..1cd4624
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ResetQuest.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ResetReactors.class b/out/production/A079/client/messages/commands/GMCommand$ResetReactors.class
new file mode 100644
index 0000000..9b2debb
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ResetReactors.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SP.class b/out/production/A079/client/messages/commands/GMCommand$SP.class
new file mode 100644
index 0000000..555c856
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SP.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SaveAll.class b/out/production/A079/client/messages/commands/GMCommand$SaveAll.class
new file mode 100644
index 0000000..1d34abd
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SaveAll.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Say.class b/out/production/A079/client/messages/commands/GMCommand$Say.class
new file mode 100644
index 0000000..196e67e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Say.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SetReactor.class b/out/production/A079/client/messages/commands/GMCommand$SetReactor.class
new file mode 100644
index 0000000..da5de1c
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SetReactor.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Shop.class b/out/production/A079/client/messages/commands/GMCommand$Shop.class
new file mode 100644
index 0000000..5b266b1
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Shop.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Shutdown.class b/out/production/A079/client/messages/commands/GMCommand$Shutdown.class
new file mode 100644
index 0000000..661c0c1
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Shutdown.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ShutdownTime$1.class b/out/production/A079/client/messages/commands/GMCommand$ShutdownTime$1.class
new file mode 100644
index 0000000..e828bdd
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ShutdownTime$1.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$ShutdownTime.class b/out/production/A079/client/messages/commands/GMCommand$ShutdownTime.class
new file mode 100644
index 0000000..dbb3c32
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$ShutdownTime.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Skill.class b/out/production/A079/client/messages/commands/GMCommand$Skill.class
new file mode 100644
index 0000000..78ee47e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Skill.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Song.class b/out/production/A079/client/messages/commands/GMCommand$Song.class
new file mode 100644
index 0000000..a0ef997
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Song.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SpawnDebug.class b/out/production/A079/client/messages/commands/GMCommand$SpawnDebug.class
new file mode 100644
index 0000000..8501c1e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SpawnDebug.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SpawnReactor.class b/out/production/A079/client/messages/commands/GMCommand$SpawnReactor.class
new file mode 100644
index 0000000..08948bf
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SpawnReactor.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Speak.class b/out/production/A079/client/messages/commands/GMCommand$Speak.class
new file mode 100644
index 0000000..4e5f129
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Speak.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SpeakChannel.class b/out/production/A079/client/messages/commands/GMCommand$SpeakChannel.class
new file mode 100644
index 0000000..50ca62d
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SpeakChannel.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SpeakMap.class b/out/production/A079/client/messages/commands/GMCommand$SpeakMap.class
new file mode 100644
index 0000000..7f8b93a
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SpeakMap.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SpeakMega.class b/out/production/A079/client/messages/commands/GMCommand$SpeakMega.class
new file mode 100644
index 0000000..e9bc94b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SpeakMega.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$SpeakWorld.class b/out/production/A079/client/messages/commands/GMCommand$SpeakWorld.class
new file mode 100644
index 0000000..be133e4
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$SpeakWorld.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$StartQuest.class b/out/production/A079/client/messages/commands/GMCommand$StartQuest.class
new file mode 100644
index 0000000..a8472fb
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$StartQuest.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$TempBan.class b/out/production/A079/client/messages/commands/GMCommand$TempBan.class
new file mode 100644
index 0000000..3466d16
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$TempBan.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$UnbanIP.class b/out/production/A079/client/messages/commands/GMCommand$UnbanIP.class
new file mode 100644
index 0000000..1567412
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$UnbanIP.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$UnlockInv.class b/out/production/A079/client/messages/commands/GMCommand$UnlockInv.class
new file mode 100644
index 0000000..e5e3b88
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$UnlockInv.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$UpdateMap.class b/out/production/A079/client/messages/commands/GMCommand$UpdateMap.class
new file mode 100644
index 0000000..40c4257
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$UpdateMap.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Y.class b/out/production/A079/client/messages/commands/GMCommand$Y.class
new file mode 100644
index 0000000..b66dd39
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Y.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$Yellow.class b/out/production/A079/client/messages/commands/GMCommand$Yellow.class
new file mode 100644
index 0000000..a9f97b6
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$Yellow.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$autoreg.class b/out/production/A079/client/messages/commands/GMCommand$autoreg.class
new file mode 100644
index 0000000..1ad3214
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$autoreg.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$cleardrops.class b/out/production/A079/client/messages/commands/GMCommand$cleardrops.class
new file mode 100644
index 0000000..39a2469
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$cleardrops.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$copyAll.class b/out/production/A079/client/messages/commands/GMCommand$copyAll.class
new file mode 100644
index 0000000..429e3eb
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$copyAll.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$copyInv.class b/out/production/A079/client/messages/commands/GMCommand$copyInv.class
new file mode 100644
index 0000000..ca9ddcd
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$copyInv.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$discounied.class b/out/production/A079/client/messages/commands/GMCommand$discounied.class
new file mode 100644
index 0000000..9b019de
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$discounied.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$fh.class b/out/production/A079/client/messages/commands/GMCommand$fh.class
new file mode 100644
index 0000000..28356c2
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$fh.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$log.class b/out/production/A079/client/messages/commands/GMCommand$log.class
new file mode 100644
index 0000000..a1347f9
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$log.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$logindoor.class b/out/production/A079/client/messages/commands/GMCommand$logindoor.class
new file mode 100644
index 0000000..59be71a
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$logindoor.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$nmgb.class b/out/production/A079/client/messages/commands/GMCommand$nmgb.class
new file mode 100644
index 0000000..ffc4425
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$nmgb.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$opennpc.class b/out/production/A079/client/messages/commands/GMCommand$opennpc.class
new file mode 100644
index 0000000..57f9776
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$opennpc.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$pvp.class b/out/production/A079/client/messages/commands/GMCommand$pvp.class
new file mode 100644
index 0000000..1e001ef
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$pvp.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$setRate.class b/out/production/A079/client/messages/commands/GMCommand$setRate.class
new file mode 100644
index 0000000..c7e6f36
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$setRate.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$spmap.class b/out/production/A079/client/messages/commands/GMCommand$spmap.class
new file mode 100644
index 0000000..3655a97
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$spmap.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$丟弃物品讯息.class b/out/production/A079/client/messages/commands/GMCommand$丟弃物品讯息.class
new file mode 100644
index 0000000..c9739cf
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$丟弃物品讯息.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$人数灌水百分比.class b/out/production/A079/client/messages/commands/GMCommand$人数灌水百分比.class
new file mode 100644
index 0000000..4b84257
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$人数灌水百分比.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$修改人气商品.class b/out/production/A079/client/messages/commands/GMCommand$修改人气商品.class
new file mode 100644
index 0000000..8127a4c
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$修改人气商品.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$公告.class b/out/production/A079/client/messages/commands/GMCommand$公告.class
new file mode 100644
index 0000000..b129ad5
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$公告.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$关鍵时刻$1.class b/out/production/A079/client/messages/commands/GMCommand$关鍵时刻$1.class
new file mode 100644
index 0000000..cdd56dc
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$关鍵时刻$1.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$关鍵时刻.class b/out/production/A079/client/messages/commands/GMCommand$关鍵时刻.class
new file mode 100644
index 0000000..dcc89cf
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$关鍵时刻.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$关闭服务器.class b/out/production/A079/client/messages/commands/GMCommand$关闭服务器.class
new file mode 100644
index 0000000..7804b7b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$关闭服务器.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$关闭服务器时间.class b/out/production/A079/client/messages/commands/GMCommand$关闭服务器时间.class
new file mode 100644
index 0000000..c340af9
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$关闭服务器时间.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$关闭蘑菇活动.class b/out/production/A079/client/messages/commands/GMCommand$关闭蘑菇活动.class
new file mode 100644
index 0000000..ab932fb
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$关闭蘑菇活动.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$分享奖励.class b/out/production/A079/client/messages/commands/GMCommand$分享奖励.class
new file mode 100644
index 0000000..cce02b2
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$分享奖励.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$刷新地图.class b/out/production/A079/client/messages/commands/GMCommand$刷新地图.class
new file mode 100644
index 0000000..6ccc4d8
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$刷新地图.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$刷新地图1.class b/out/production/A079/client/messages/commands/GMCommand$刷新地图1.class
new file mode 100644
index 0000000..26388cb
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$刷新地图1.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$加入公会.class b/out/production/A079/client/messages/commands/GMCommand$加入公会.class
new file mode 100644
index 0000000..d0ce068
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$加入公会.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$匿名广播.class b/out/production/A079/client/messages/commands/GMCommand$匿名广播.class
new file mode 100644
index 0000000..071b91d
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$匿名广播.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$升级.class b/out/production/A079/client/messages/commands/GMCommand$升级.class
new file mode 100644
index 0000000..160b6bb
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$升级.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$召唤怪物.class b/out/production/A079/client/messages/commands/GMCommand$召唤怪物.class
new file mode 100644
index 0000000..78645cd
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$召唤怪物.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$启动蘑菇活动.class b/out/production/A079/client/messages/commands/GMCommand$启动蘑菇活动.class
new file mode 100644
index 0000000..aa499e1
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$启动蘑菇活动.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$商城打折.class b/out/production/A079/client/messages/commands/GMCommand$商城打折.class
new file mode 100644
index 0000000..da1ac70
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$商城打折.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$处理洗道具.class b/out/production/A079/client/messages/commands/GMCommand$处理洗道具.class
new file mode 100644
index 0000000..172b98b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$处理洗道具.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$复活.class b/out/production/A079/client/messages/commands/GMCommand$复活.class
new file mode 100644
index 0000000..20f0547
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$复活.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$头頂公告.class b/out/production/A079/client/messages/commands/GMCommand$头頂公告.class
new file mode 100644
index 0000000..bd51d74
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$头頂公告.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$定时测谎.class b/out/production/A079/client/messages/commands/GMCommand$定时测谎.class
new file mode 100644
index 0000000..bfeaca1
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$定时测谎.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$封包输出.class b/out/production/A079/client/messages/commands/GMCommand$封包输出.class
new file mode 100644
index 0000000..f1dfb3c
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$封包输出.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$掉宝倍率.class b/out/production/A079/client/messages/commands/GMCommand$掉宝倍率.class
new file mode 100644
index 0000000..b0c9bba
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$掉宝倍率.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$推文.class b/out/production/A079/client/messages/commands/GMCommand$推文.class
new file mode 100644
index 0000000..562de82
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$推文.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$改名字.class b/out/production/A079/client/messages/commands/GMCommand$改名字.class
new file mode 100644
index 0000000..7b97212
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$改名字.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$文件封包.class b/out/production/A079/client/messages/commands/GMCommand$文件封包.class
new file mode 100644
index 0000000..e69220f
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$文件封包.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$无延迟讯息.class b/out/production/A079/client/messages/commands/GMCommand$无延迟讯息.class
new file mode 100644
index 0000000..b74cfac
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$无延迟讯息.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$查看当前地图信息.class b/out/production/A079/client/messages/commands/GMCommand$查看当前地图信息.class
new file mode 100644
index 0000000..1f3405b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$查看当前地图信息.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$查询洗道具.class b/out/production/A079/client/messages/commands/GMCommand$查询洗道具.class
new file mode 100644
index 0000000..3be132b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$查询洗道具.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$测谎玩家.class b/out/production/A079/client/messages/commands/GMCommand$测谎玩家.class
new file mode 100644
index 0000000..f20e892
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$测谎玩家.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$添加aclog.class b/out/production/A079/client/messages/commands/GMCommand$添加aclog.class
new file mode 100644
index 0000000..1f65f25
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$添加aclog.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$添加危险账号.class b/out/production/A079/client/messages/commands/GMCommand$添加危险账号.class
new file mode 100644
index 0000000..df7a49e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$添加危险账号.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$添加角色危险IP.class b/out/production/A079/client/messages/commands/GMCommand$添加角色危险IP.class
new file mode 100644
index 0000000..577686a
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$添加角色危险IP.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$清怪.class b/out/production/A079/client/messages/commands/GMCommand$清怪.class
new file mode 100644
index 0000000..a9025a8
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$清怪.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$清除地面道具.class b/out/production/A079/client/messages/commands/GMCommand$清除地面道具.class
new file mode 100644
index 0000000..0c8b39d
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$清除地面道具.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$爆率.class b/out/production/A079/client/messages/commands/GMCommand$爆率.class
new file mode 100644
index 0000000..dfe0ada
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$爆率.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$禁止使用玩家商店.class b/out/production/A079/client/messages/commands/GMCommand$禁止使用玩家商店.class
new file mode 100644
index 0000000..b909887
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$禁止使用玩家商店.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$禁止使用精灵商店.class b/out/production/A079/client/messages/commands/GMCommand$禁止使用精灵商店.class
new file mode 100644
index 0000000..c88a7d2
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$禁止使用精灵商店.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$禁止玩家使用.class b/out/production/A079/client/messages/commands/GMCommand$禁止玩家使用.class
new file mode 100644
index 0000000..20f1b33
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$禁止玩家使用.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$离婚.class b/out/production/A079/client/messages/commands/GMCommand$离婚.class
new file mode 100644
index 0000000..3f6b017
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$离婚.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$经验倍率.class b/out/production/A079/client/messages/commands/GMCommand$经验倍率.class
new file mode 100644
index 0000000..6a84abe
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$经验倍率.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$补领红利.class b/out/production/A079/client/messages/commands/GMCommand$补领红利.class
new file mode 100644
index 0000000..a0bef29
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$补领红利.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$补领赞助.class b/out/production/A079/client/messages/commands/GMCommand$补领赞助.class
new file mode 100644
index 0000000..6e0eec0
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$补领赞助.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$角色封包输出.class b/out/production/A079/client/messages/commands/GMCommand$角色封包输出.class
new file mode 100644
index 0000000..6135b41
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$角色封包输出.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$重置少林脚本.class b/out/production/A079/client/messages/commands/GMCommand$重置少林脚本.class
new file mode 100644
index 0000000..4ff2048
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$重置少林脚本.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$重载捉鬼任务.class b/out/production/A079/client/messages/commands/GMCommand$重载捉鬼任务.class
new file mode 100644
index 0000000..c7b2cc4
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$重载捉鬼任务.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$金币倍率.class b/out/production/A079/client/messages/commands/GMCommand$金币倍率.class
new file mode 100644
index 0000000..1c205e8
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$金币倍率.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$金币总量.class b/out/production/A079/client/messages/commands/GMCommand$金币总量.class
new file mode 100644
index 0000000..fde2a22
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$金币总量.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$频道掉线测试.class b/out/production/A079/client/messages/commands/GMCommand$频道掉线测试.class
new file mode 100644
index 0000000..36a3a58
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$频道掉线测试.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$高级检索.class b/out/production/A079/client/messages/commands/GMCommand$高级检索.class
new file mode 100644
index 0000000..8daf309
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$高级检索.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand$龙王地图重制.class b/out/production/A079/client/messages/commands/GMCommand$龙王地图重制.class
new file mode 100644
index 0000000..b52d346
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand$龙王地图重制.class differ
diff --git a/out/production/A079/client/messages/commands/GMCommand.class b/out/production/A079/client/messages/commands/GMCommand.class
new file mode 100644
index 0000000..773454b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GMCommand.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$BanCommand.class b/out/production/A079/client/messages/commands/GodCommand$BanCommand.class
new file mode 100644
index 0000000..1f2e22e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$BanCommand.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$Buff.class b/out/production/A079/client/messages/commands/GodCommand$Buff.class
new file mode 100644
index 0000000..a6db84e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$Buff.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$Dex.class b/out/production/A079/client/messages/commands/GodCommand$Dex.class
new file mode 100644
index 0000000..9a54c1e
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$Dex.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$HP.class b/out/production/A079/client/messages/commands/GodCommand$HP.class
new file mode 100644
index 0000000..f0ac4e7
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$HP.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$Int.class b/out/production/A079/client/messages/commands/GodCommand$Int.class
new file mode 100644
index 0000000..179c210
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$Int.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$Job.class b/out/production/A079/client/messages/commands/GodCommand$Job.class
new file mode 100644
index 0000000..8e15cd3
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$Job.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$Level.class b/out/production/A079/client/messages/commands/GodCommand$Level.class
new file mode 100644
index 0000000..9cfc959
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$Level.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$Luk.class b/out/production/A079/client/messages/commands/GodCommand$Luk.class
new file mode 100644
index 0000000..7717786
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$Luk.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$MP.class b/out/production/A079/client/messages/commands/GodCommand$MP.class
new file mode 100644
index 0000000..1749c25
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$MP.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$Maxstats.class b/out/production/A079/client/messages/commands/GodCommand$Maxstats.class
new file mode 100644
index 0000000..53f7008
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$Maxstats.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$MinStats.class b/out/production/A079/client/messages/commands/GodCommand$MinStats.class
new file mode 100644
index 0000000..596ce04
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$MinStats.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$Str.class b/out/production/A079/client/messages/commands/GodCommand$Str.class
new file mode 100644
index 0000000..9f248aa
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$Str.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$face.class b/out/production/A079/client/messages/commands/GodCommand$face.class
new file mode 100644
index 0000000..c6dc00b
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$face.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$hair.class b/out/production/A079/client/messages/commands/GodCommand$hair.class
new file mode 100644
index 0000000..116f37a
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$hair.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand$无敌.class b/out/production/A079/client/messages/commands/GodCommand$无敌.class
new file mode 100644
index 0000000..9349e77
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand$无敌.class differ
diff --git a/out/production/A079/client/messages/commands/GodCommand.class b/out/production/A079/client/messages/commands/GodCommand.class
new file mode 100644
index 0000000..d1d6923
Binary files /dev/null and b/out/production/A079/client/messages/commands/GodCommand.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$CC.class b/out/production/A079/client/messages/commands/InternCommand$CC.class
new file mode 100644
index 0000000..56f73e2
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$CC.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$ChangeChannel.class b/out/production/A079/client/messages/commands/InternCommand$ChangeChannel.class
new file mode 100644
index 0000000..674237a
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$ChangeChannel.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$CharInfo.class b/out/production/A079/client/messages/commands/InternCommand$CharInfo.class
new file mode 100644
index 0000000..e8a5197
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$CharInfo.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$Cheaters.class b/out/production/A079/client/messages/commands/InternCommand$Cheaters.class
new file mode 100644
index 0000000..c04908a
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$Cheaters.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$CheckGash.class b/out/production/A079/client/messages/commands/InternCommand$CheckGash.class
new file mode 100644
index 0000000..c6002a6
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$CheckGash.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$Connected.class b/out/production/A079/client/messages/commands/InternCommand$Connected.class
new file mode 100644
index 0000000..ce897e1
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$Connected.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$Debug.class b/out/production/A079/client/messages/commands/InternCommand$Debug.class
new file mode 100644
index 0000000..ca452d2
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$Debug.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$HellBan.class b/out/production/A079/client/messages/commands/InternCommand$HellBan.class
new file mode 100644
index 0000000..c2a2006
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$HellBan.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$ItemCheck.class b/out/production/A079/client/messages/commands/InternCommand$ItemCheck.class
new file mode 100644
index 0000000..9868cd0
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$ItemCheck.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$Map.class b/out/production/A079/client/messages/commands/InternCommand$Map.class
new file mode 100644
index 0000000..6bfcd39
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$Map.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$Mute.class b/out/production/A079/client/messages/commands/InternCommand$Mute.class
new file mode 100644
index 0000000..20d2789
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$Mute.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$MuteMap.class b/out/production/A079/client/messages/commands/InternCommand$MuteMap.class
new file mode 100644
index 0000000..241dbd9
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$MuteMap.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$PlayerStats.class b/out/production/A079/client/messages/commands/InternCommand$PlayerStats.class
new file mode 100644
index 0000000..38c7647
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$PlayerStats.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$WarpMap.class b/out/production/A079/client/messages/commands/InternCommand$WarpMap.class
new file mode 100644
index 0000000..6333e47
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$WarpMap.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$closemap.class b/out/production/A079/client/messages/commands/InternCommand$closemap.class
new file mode 100644
index 0000000..ae32b4c
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$closemap.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$openmap.class b/out/production/A079/client/messages/commands/InternCommand$openmap.class
new file mode 100644
index 0000000..19f1421
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$openmap.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$spy.class b/out/production/A079/client/messages/commands/InternCommand$spy.class
new file mode 100644
index 0000000..87df9a2
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$spy.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$spyid.class b/out/production/A079/client/messages/commands/InternCommand$spyid.class
new file mode 100644
index 0000000..4a42db1
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$spyid.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$whoishere.class b/out/production/A079/client/messages/commands/InternCommand$whoishere.class
new file mode 100644
index 0000000..15b8b61
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$whoishere.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$发勋章.class b/out/production/A079/client/messages/commands/InternCommand$发勋章.class
new file mode 100644
index 0000000..ef2b82d
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$发勋章.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$查看玩家状态.class b/out/production/A079/client/messages/commands/InternCommand$查看玩家状态.class
new file mode 100644
index 0000000..3760556
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$查看玩家状态.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$生死活动.class b/out/production/A079/client/messages/commands/InternCommand$生死活动.class
new file mode 100644
index 0000000..3a5b464
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$生死活动.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand$角色讯息.class b/out/production/A079/client/messages/commands/InternCommand$角色讯息.class
new file mode 100644
index 0000000..fa41d6b
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand$角色讯息.class differ
diff --git a/out/production/A079/client/messages/commands/InternCommand.class b/out/production/A079/client/messages/commands/InternCommand.class
new file mode 100644
index 0000000..a922655
Binary files /dev/null and b/out/production/A079/client/messages/commands/InternCommand.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$1.class b/out/production/A079/client/messages/commands/PlayerCommand$1.class
new file mode 100644
index 0000000..b5f58f3
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$1.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$CGM.class b/out/production/A079/client/messages/commands/PlayerCommand$CGM.class
new file mode 100644
index 0000000..421a290
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$CGM.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$DistributeStatCommands.class b/out/production/A079/client/messages/commands/PlayerCommand$DistributeStatCommands.class
new file mode 100644
index 0000000..e3b2822
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$DistributeStatCommands.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$DropCash.class b/out/production/A079/client/messages/commands/PlayerCommand$DropCash.class
new file mode 100644
index 0000000..f6068fe
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$DropCash.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$Gashponmega.class b/out/production/A079/client/messages/commands/PlayerCommand$Gashponmega.class
new file mode 100644
index 0000000..8972d80
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$Gashponmega.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$Mapdrop.class b/out/production/A079/client/messages/commands/PlayerCommand$Mapdrop.class
new file mode 100644
index 0000000..2b63ccb
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$Mapdrop.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$Mobdrop.class b/out/production/A079/client/messages/commands/PlayerCommand$Mobdrop.class
new file mode 100644
index 0000000..f99b6d2
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$Mobdrop.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$OpenNPCCommand.class b/out/production/A079/client/messages/commands/PlayerCommand$OpenNPCCommand.class
new file mode 100644
index 0000000..49515f6
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$OpenNPCCommand.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$TSmega.class b/out/production/A079/client/messages/commands/PlayerCommand$TSmega.class
new file mode 100644
index 0000000..17a1028
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$TSmega.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$ea.class b/out/production/A079/client/messages/commands/PlayerCommand$ea.class
new file mode 100644
index 0000000..6340fda
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$ea.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$event.class b/out/production/A079/client/messages/commands/PlayerCommand$event.class
new file mode 100644
index 0000000..5489bdc
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$event.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$expfix.class b/out/production/A079/client/messages/commands/PlayerCommand$expfix.class
new file mode 100644
index 0000000..6b1f2eb
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$expfix.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$help.class b/out/production/A079/client/messages/commands/PlayerCommand$help.class
new file mode 100644
index 0000000..030c357
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$help.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$jcds.class b/out/production/A079/client/messages/commands/PlayerCommand$jcds.class
new file mode 100644
index 0000000..0e3bad5
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$jcds.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$jk_hm.class b/out/production/A079/client/messages/commands/PlayerCommand$jk_hm.class
new file mode 100644
index 0000000..3dc005f
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$jk_hm.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$jkzd.class b/out/production/A079/client/messages/commands/PlayerCommand$jkzd.class
new file mode 100644
index 0000000..dd30ba9
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$jkzd.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$mob.class b/out/production/A079/client/messages/commands/PlayerCommand$mob.class
new file mode 100644
index 0000000..e1543e5
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$mob.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$丟弃点装.class b/out/production/A079/client/messages/commands/PlayerCommand$丟弃点装.class
new file mode 100644
index 0000000..f2d92a4
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$丟弃点装.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$丟装.class b/out/production/A079/client/messages/commands/PlayerCommand$丟装.class
new file mode 100644
index 0000000..34582f3
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$丟装.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$全局爆率.class b/out/production/A079/client/messages/commands/PlayerCommand$全局爆率.class
new file mode 100644
index 0000000..ddbbb3b
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$全局爆率.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$刷钱模式.class b/out/production/A079/client/messages/commands/PlayerCommand$刷钱模式.class
new file mode 100644
index 0000000..d964aaa
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$刷钱模式.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$副本拉人$1.class b/out/production/A079/client/messages/commands/PlayerCommand$副本拉人$1.class
new file mode 100644
index 0000000..8f3acd7
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$副本拉人$1.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$副本拉人.class b/out/production/A079/client/messages/commands/PlayerCommand$副本拉人.class
new file mode 100644
index 0000000..68b4675
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$副本拉人.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$力量.class b/out/production/A079/client/messages/commands/PlayerCommand$力量.class
new file mode 100644
index 0000000..8497bc3
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$力量.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$在线点数.class b/out/production/A079/client/messages/commands/PlayerCommand$在线点数.class
new file mode 100644
index 0000000..a46389a
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$在线点数.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$帮助.class b/out/production/A079/client/messages/commands/PlayerCommand$帮助.class
new file mode 100644
index 0000000..31278b0
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$帮助.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$怪物.class b/out/production/A079/client/messages/commands/PlayerCommand$怪物.class
new file mode 100644
index 0000000..e7506a6
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$怪物.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$敏捷.class b/out/production/A079/client/messages/commands/PlayerCommand$敏捷.class
new file mode 100644
index 0000000..90f17d1
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$敏捷.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$智力.class b/out/production/A079/client/messages/commands/PlayerCommand$智力.class
new file mode 100644
index 0000000..53dd82f
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$智力.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$查看.class b/out/production/A079/client/messages/commands/PlayerCommand$查看.class
new file mode 100644
index 0000000..b968a63
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$查看.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$清除道具.class b/out/production/A079/client/messages/commands/PlayerCommand$清除道具.class
new file mode 100644
index 0000000..798103c
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$清除道具.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$爆率.class b/out/production/A079/client/messages/commands/PlayerCommand$爆率.class
new file mode 100644
index 0000000..35a3ba4
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$爆率.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$解卡.class b/out/production/A079/client/messages/commands/PlayerCommand$解卡.class
new file mode 100644
index 0000000..d10d0ba
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$解卡.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$解卡组队.class b/out/production/A079/client/messages/commands/PlayerCommand$解卡组队.class
new file mode 100644
index 0000000..bf13a9b
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$解卡组队.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand$运气.class b/out/production/A079/client/messages/commands/PlayerCommand$运气.class
new file mode 100644
index 0000000..286d8fa
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand$运气.class differ
diff --git a/out/production/A079/client/messages/commands/PlayerCommand.class b/out/production/A079/client/messages/commands/PlayerCommand.class
new file mode 100644
index 0000000..b333f9c
Binary files /dev/null and b/out/production/A079/client/messages/commands/PlayerCommand.class differ
diff --git a/out/production/A079/client/messages/commands/PracticerCommand$Ban.class b/out/production/A079/client/messages/commands/PracticerCommand$Ban.class
new file mode 100644
index 0000000..00cd7af
Binary files /dev/null and b/out/production/A079/client/messages/commands/PracticerCommand$Ban.class differ
diff --git a/out/production/A079/client/messages/commands/PracticerCommand$Warp.class b/out/production/A079/client/messages/commands/PracticerCommand$Warp.class
new file mode 100644
index 0000000..3398295
Binary files /dev/null and b/out/production/A079/client/messages/commands/PracticerCommand$Warp.class differ
diff --git a/out/production/A079/client/messages/commands/PracticerCommand$WarpHere.class b/out/production/A079/client/messages/commands/PracticerCommand$WarpHere.class
new file mode 100644
index 0000000..b3f3824
Binary files /dev/null and b/out/production/A079/client/messages/commands/PracticerCommand$WarpHere.class differ
diff --git a/out/production/A079/client/messages/commands/PracticerCommand$register.class b/out/production/A079/client/messages/commands/PracticerCommand$register.class
new file mode 100644
index 0000000..03bdb62
Binary files /dev/null and b/out/production/A079/client/messages/commands/PracticerCommand$register.class differ
diff --git a/out/production/A079/client/messages/commands/PracticerCommand$注册.class b/out/production/A079/client/messages/commands/PracticerCommand$注册.class
new file mode 100644
index 0000000..4bf111e
Binary files /dev/null and b/out/production/A079/client/messages/commands/PracticerCommand$注册.class differ
diff --git a/out/production/A079/client/messages/commands/PracticerCommand$线上玩家.class b/out/production/A079/client/messages/commands/PracticerCommand$线上玩家.class
new file mode 100644
index 0000000..52d6baa
Binary files /dev/null and b/out/production/A079/client/messages/commands/PracticerCommand$线上玩家.class differ
diff --git a/out/production/A079/client/messages/commands/PracticerCommand.class b/out/production/A079/client/messages/commands/PracticerCommand.class
new file mode 100644
index 0000000..a73343a
Binary files /dev/null and b/out/production/A079/client/messages/commands/PracticerCommand.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$Ban.class b/out/production/A079/client/messages/commands/SkilledCommand$Ban.class
new file mode 100644
index 0000000..532f728
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$Ban.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$BanID.class b/out/production/A079/client/messages/commands/SkilledCommand$BanID.class
new file mode 100644
index 0000000..cb46a00
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$BanID.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$BanStatus.class b/out/production/A079/client/messages/commands/SkilledCommand$BanStatus.class
new file mode 100644
index 0000000..f06ad1a
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$BanStatus.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$CnGM.class b/out/production/A079/client/messages/commands/SkilledCommand$CnGM.class
new file mode 100644
index 0000000..1cb98cb
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$CnGM.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$DC.class b/out/production/A079/client/messages/commands/SkilledCommand$DC.class
new file mode 100644
index 0000000..069c981
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$DC.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$DCID.class b/out/production/A079/client/messages/commands/SkilledCommand$DCID.class
new file mode 100644
index 0000000..b35677b
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$DCID.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$FakeReport.class b/out/production/A079/client/messages/commands/SkilledCommand$FakeReport.class
new file mode 100644
index 0000000..53f4c43
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$FakeReport.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$Heal.class b/out/production/A079/client/messages/commands/SkilledCommand$Heal.class
new file mode 100644
index 0000000..2b9dea6
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$Heal.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$HealMap.class b/out/production/A079/client/messages/commands/SkilledCommand$HealMap.class
new file mode 100644
index 0000000..ac51d8c
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$HealMap.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$Hide.class b/out/production/A079/client/messages/commands/SkilledCommand$Hide.class
new file mode 100644
index 0000000..367c654
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$Hide.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$UnBan.class b/out/production/A079/client/messages/commands/SkilledCommand$UnBan.class
new file mode 100644
index 0000000..2ea3c42
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$UnBan.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$UnHellBan.class b/out/production/A079/client/messages/commands/SkilledCommand$UnHellBan.class
new file mode 100644
index 0000000..4b8a61d
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$UnHellBan.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$UnHide.class b/out/production/A079/client/messages/commands/SkilledCommand$UnHide.class
new file mode 100644
index 0000000..d402095
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$UnHide.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$WarpID.class b/out/production/A079/client/messages/commands/SkilledCommand$WarpID.class
new file mode 100644
index 0000000..4ceb158
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$WarpID.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$WarpT.class b/out/production/A079/client/messages/commands/SkilledCommand$WarpT.class
new file mode 100644
index 0000000..6ba4786
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$WarpT.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$WhereAmI.class b/out/production/A079/client/messages/commands/SkilledCommand$WhereAmI.class
new file mode 100644
index 0000000..75bb4c6
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$WhereAmI.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$Whoshere.class b/out/production/A079/client/messages/commands/SkilledCommand$Whoshere.class
new file mode 100644
index 0000000..66220a6
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$Whoshere.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$banMac.class b/out/production/A079/client/messages/commands/SkilledCommand$banMac.class
new file mode 100644
index 0000000..65eea1d
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$banMac.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$online.class b/out/production/A079/client/messages/commands/SkilledCommand$online.class
new file mode 100644
index 0000000..ceda618
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$online.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$onlineGM.class b/out/production/A079/client/messages/commands/SkilledCommand$onlineGM.class
new file mode 100644
index 0000000..2e6b979
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$onlineGM.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$个人公告.class b/out/production/A079/client/messages/commands/SkilledCommand$个人公告.class
new file mode 100644
index 0000000..aa92aee
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$个人公告.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$全频道地图人数.class b/out/production/A079/client/messages/commands/SkilledCommand$全频道地图人数.class
new file mode 100644
index 0000000..40ff145
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$全频道地图人数.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$公会聊天.class b/out/production/A079/client/messages/commands/SkilledCommand$公会聊天.class
new file mode 100644
index 0000000..f5a7ad4
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$公会聊天.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$卡登处理.class b/out/production/A079/client/messages/commands/SkilledCommand$卡登处理.class
new file mode 100644
index 0000000..cce58f4
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$卡登处理.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$吸怪自动传送.class b/out/production/A079/client/messages/commands/SkilledCommand$吸怪自动传送.class
new file mode 100644
index 0000000..dfe05da
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$吸怪自动传送.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$吸怪讯息.class b/out/production/A079/client/messages/commands/SkilledCommand$吸怪讯息.class
new file mode 100644
index 0000000..a5059ab
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$吸怪讯息.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$商城DC.class b/out/production/A079/client/messages/commands/SkilledCommand$商城DC.class
new file mode 100644
index 0000000..0a25699
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$商城DC.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$商城DC2.class b/out/production/A079/client/messages/commands/SkilledCommand$商城DC2.class
new file mode 100644
index 0000000..c1379ba
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$商城DC2.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$好友聊天.class b/out/production/A079/client/messages/commands/SkilledCommand$好友聊天.class
new file mode 100644
index 0000000..8365542
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$好友聊天.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$特殊DC.class b/out/production/A079/client/messages/commands/SkilledCommand$特殊DC.class
new file mode 100644
index 0000000..fb40e1f
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$特殊DC.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$特殊商城DC.class b/out/production/A079/client/messages/commands/SkilledCommand$特殊商城DC.class
new file mode 100644
index 0000000..4064673
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$特殊商城DC.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$特殊商城DC2.class b/out/production/A079/client/messages/commands/SkilledCommand$特殊商城DC2.class
new file mode 100644
index 0000000..ffe380a
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$特殊商城DC2.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$特殊频道DC.class b/out/production/A079/client/messages/commands/SkilledCommand$特殊频道DC.class
new file mode 100644
index 0000000..bd1a987
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$特殊频道DC.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$玩家密语.class b/out/production/A079/client/messages/commands/SkilledCommand$玩家密语.class
new file mode 100644
index 0000000..16765f8
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$玩家密语.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$玩家私聊.class b/out/production/A079/client/messages/commands/SkilledCommand$玩家私聊.class
new file mode 100644
index 0000000..e81d56e
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$玩家私聊.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$精灵商人讯息.class b/out/production/A079/client/messages/commands/SkilledCommand$精灵商人讯息.class
new file mode 100644
index 0000000..c78f276
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$精灵商人讯息.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$联盟聊天.class b/out/production/A079/client/messages/commands/SkilledCommand$联盟聊天.class
new file mode 100644
index 0000000..51c56eb
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$联盟聊天.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$队伍聊天.class b/out/production/A079/client/messages/commands/SkilledCommand$队伍聊天.class
new file mode 100644
index 0000000..57ccff8
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$队伍聊天.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$频道DC.class b/out/production/A079/client/messages/commands/SkilledCommand$频道DC.class
new file mode 100644
index 0000000..f362c66
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$频道DC.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand$黑单.class b/out/production/A079/client/messages/commands/SkilledCommand$黑单.class
new file mode 100644
index 0000000..c51b213
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand$黑单.class differ
diff --git a/out/production/A079/client/messages/commands/SkilledCommand.class b/out/production/A079/client/messages/commands/SkilledCommand.class
new file mode 100644
index 0000000..ced2126
Binary files /dev/null and b/out/production/A079/client/messages/commands/SkilledCommand.class differ
diff --git a/out/production/A079/client/messages/commands/vip/Vip1Command.class b/out/production/A079/client/messages/commands/vip/Vip1Command.class
new file mode 100644
index 0000000..0095d3e
Binary files /dev/null and b/out/production/A079/client/messages/commands/vip/Vip1Command.class differ
diff --git a/out/production/A079/client/messages/commands/vip/Vip2Command.class b/out/production/A079/client/messages/commands/vip/Vip2Command.class
new file mode 100644
index 0000000..0a99912
Binary files /dev/null and b/out/production/A079/client/messages/commands/vip/Vip2Command.class differ
diff --git a/out/production/A079/client/messages/commands/vip/Vip3Command.class b/out/production/A079/client/messages/commands/vip/Vip3Command.class
new file mode 100644
index 0000000..3819baf
Binary files /dev/null and b/out/production/A079/client/messages/commands/vip/Vip3Command.class differ
diff --git a/out/production/A079/client/messages/commands/vip/Vip4Command.class b/out/production/A079/client/messages/commands/vip/Vip4Command.class
new file mode 100644
index 0000000..da00ca2
Binary files /dev/null and b/out/production/A079/client/messages/commands/vip/Vip4Command.class differ
diff --git a/out/production/A079/client/messages/commands/vip/Vip5Command.class b/out/production/A079/client/messages/commands/vip/Vip5Command.class
new file mode 100644
index 0000000..630fb66
Binary files /dev/null and b/out/production/A079/client/messages/commands/vip/Vip5Command.class differ
diff --git a/out/production/A079/client/status/MonsterStatus$1.class b/out/production/A079/client/status/MonsterStatus$1.class
new file mode 100644
index 0000000..06401e4
Binary files /dev/null and b/out/production/A079/client/status/MonsterStatus$1.class differ
diff --git a/out/production/A079/client/status/MonsterStatus.class b/out/production/A079/client/status/MonsterStatus.class
new file mode 100644
index 0000000..41b7254
Binary files /dev/null and b/out/production/A079/client/status/MonsterStatus.class differ
diff --git a/out/production/A079/client/status/MonsterStatusEffect$1.class b/out/production/A079/client/status/MonsterStatusEffect$1.class
new file mode 100644
index 0000000..c161327
Binary files /dev/null and b/out/production/A079/client/status/MonsterStatusEffect$1.class differ
diff --git a/out/production/A079/client/status/MonsterStatusEffect$2.class b/out/production/A079/client/status/MonsterStatusEffect$2.class
new file mode 100644
index 0000000..7857f75
Binary files /dev/null and b/out/production/A079/client/status/MonsterStatusEffect$2.class differ
diff --git a/out/production/A079/client/status/MonsterStatusEffect.class b/out/production/A079/client/status/MonsterStatusEffect.class
new file mode 100644
index 0000000..e8856d3
Binary files /dev/null and b/out/production/A079/client/status/MonsterStatusEffect.class differ
diff --git a/out/production/A079/constants/AuthServerNamecpu.class b/out/production/A079/constants/AuthServerNamecpu.class
new file mode 100644
index 0000000..2f78df4
Binary files /dev/null and b/out/production/A079/constants/AuthServerNamecpu.class differ
diff --git a/out/production/A079/constants/Balloon.class b/out/production/A079/constants/Balloon.class
new file mode 100644
index 0000000..1f49d19
Binary files /dev/null and b/out/production/A079/constants/Balloon.class differ
diff --git a/out/production/A079/constants/BeansConstants.class b/out/production/A079/constants/BeansConstants.class
new file mode 100644
index 0000000..b3eaba6
Binary files /dev/null and b/out/production/A079/constants/BeansConstants.class differ
diff --git a/out/production/A079/constants/GameConstants$1.class b/out/production/A079/constants/GameConstants$1.class
new file mode 100644
index 0000000..04a5f19
Binary files /dev/null and b/out/production/A079/constants/GameConstants$1.class differ
diff --git a/out/production/A079/constants/GameConstants.class b/out/production/A079/constants/GameConstants.class
new file mode 100644
index 0000000..79c4bbf
Binary files /dev/null and b/out/production/A079/constants/GameConstants.class differ
diff --git a/out/production/A079/constants/ItemConstants$伤害字型.class b/out/production/A079/constants/ItemConstants$伤害字型.class
new file mode 100644
index 0000000..d22e8de
Binary files /dev/null and b/out/production/A079/constants/ItemConstants$伤害字型.class differ
diff --git a/out/production/A079/constants/ItemConstants$卷轴.class b/out/production/A079/constants/ItemConstants$卷轴.class
new file mode 100644
index 0000000..5dc1032
Binary files /dev/null and b/out/production/A079/constants/ItemConstants$卷轴.class differ
diff --git a/out/production/A079/constants/ItemConstants$套装.class b/out/production/A079/constants/ItemConstants$套装.class
new file mode 100644
index 0000000..e6f89d5
Binary files /dev/null and b/out/production/A079/constants/ItemConstants$套装.class differ
diff --git a/out/production/A079/constants/ItemConstants$类型.class b/out/production/A079/constants/ItemConstants$类型.class
new file mode 100644
index 0000000..5d5173c
Binary files /dev/null and b/out/production/A079/constants/ItemConstants$类型.class differ
diff --git a/out/production/A079/constants/ItemConstants.class b/out/production/A079/constants/ItemConstants.class
new file mode 100644
index 0000000..7b6c7d4
Binary files /dev/null and b/out/production/A079/constants/ItemConstants.class differ
diff --git a/out/production/A079/constants/JobConstants$LoginJob.class b/out/production/A079/constants/JobConstants$LoginJob.class
new file mode 100644
index 0000000..17f471b
Binary files /dev/null and b/out/production/A079/constants/JobConstants$LoginJob.class differ
diff --git a/out/production/A079/constants/JobConstants.class b/out/production/A079/constants/JobConstants.class
new file mode 100644
index 0000000..4147ef1
Binary files /dev/null and b/out/production/A079/constants/JobConstants.class differ
diff --git a/out/production/A079/constants/MapConstants.class b/out/production/A079/constants/MapConstants.class
new file mode 100644
index 0000000..8992b9e
Binary files /dev/null and b/out/production/A079/constants/MapConstants.class differ
diff --git a/out/production/A079/constants/MoonlightRevamp.class b/out/production/A079/constants/MoonlightRevamp.class
new file mode 100644
index 0000000..e2e82f6
Binary files /dev/null and b/out/production/A079/constants/MoonlightRevamp.class differ
diff --git a/out/production/A079/constants/OtherSettings.class b/out/production/A079/constants/OtherSettings.class
new file mode 100644
index 0000000..7ab9583
Binary files /dev/null and b/out/production/A079/constants/OtherSettings.class differ
diff --git a/out/production/A079/constants/PiPiConfig$1.class b/out/production/A079/constants/PiPiConfig$1.class
new file mode 100644
index 0000000..0efa008
Binary files /dev/null and b/out/production/A079/constants/PiPiConfig$1.class differ
diff --git a/out/production/A079/constants/PiPiConfig.class b/out/production/A079/constants/PiPiConfig.class
new file mode 100644
index 0000000..a2eea2e
Binary files /dev/null and b/out/production/A079/constants/PiPiConfig.class differ
diff --git a/out/production/A079/constants/ScriptType.class b/out/production/A079/constants/ScriptType.class
new file mode 100644
index 0000000..61132e1
Binary files /dev/null and b/out/production/A079/constants/ScriptType.class differ
diff --git a/out/production/A079/constants/ServerConfig.class b/out/production/A079/constants/ServerConfig.class
new file mode 100644
index 0000000..4ec8bb2
Binary files /dev/null and b/out/production/A079/constants/ServerConfig.class differ
diff --git a/out/production/A079/constants/ServerConstants$CommandType.class b/out/production/A079/constants/ServerConstants$CommandType.class
new file mode 100644
index 0000000..613a99d
Binary files /dev/null and b/out/production/A079/constants/ServerConstants$CommandType.class differ
diff --git a/out/production/A079/constants/ServerConstants$MapleType.class b/out/production/A079/constants/ServerConstants$MapleType.class
new file mode 100644
index 0000000..db98ed1
Binary files /dev/null and b/out/production/A079/constants/ServerConstants$MapleType.class differ
diff --git a/out/production/A079/constants/ServerConstants$PlayerGMRank.class b/out/production/A079/constants/ServerConstants$PlayerGMRank.class
new file mode 100644
index 0000000..e172dbe
Binary files /dev/null and b/out/production/A079/constants/ServerConstants$PlayerGMRank.class differ
diff --git a/out/production/A079/constants/ServerConstants.class b/out/production/A079/constants/ServerConstants.class
new file mode 100644
index 0000000..3217baa
Binary files /dev/null and b/out/production/A079/constants/ServerConstants.class differ
diff --git a/out/production/A079/constants/SkillConstants.class b/out/production/A079/constants/SkillConstants.class
new file mode 100644
index 0000000..76ab2c6
Binary files /dev/null and b/out/production/A079/constants/SkillConstants.class differ
diff --git a/out/production/A079/constants/SkillType$GM.class b/out/production/A079/constants/SkillType$GM.class
new file mode 100644
index 0000000..095acd8
Binary files /dev/null and b/out/production/A079/constants/SkillType$GM.class differ
diff --git a/out/production/A079/constants/SkillType$主教.class b/out/production/A079/constants/SkillType$主教.class
new file mode 100644
index 0000000..e24fc80
Binary files /dev/null and b/out/production/A079/constants/SkillType$主教.class differ
diff --git a/out/production/A079/constants/SkillType$传说.class b/out/production/A079/constants/SkillType$传说.class
new file mode 100644
index 0000000..0130ccf
Binary files /dev/null and b/out/production/A079/constants/SkillType$传说.class differ
diff --git a/out/production/A079/constants/SkillType$侠客.class b/out/production/A079/constants/SkillType$侠客.class
new file mode 100644
index 0000000..17be531
Binary files /dev/null and b/out/production/A079/constants/SkillType$侠客.class differ
diff --git a/out/production/A079/constants/SkillType$侠盗.class b/out/production/A079/constants/SkillType$侠盗.class
new file mode 100644
index 0000000..8b345c9
Binary files /dev/null and b/out/production/A079/constants/SkillType$侠盗.class differ
diff --git a/out/production/A079/constants/SkillType$冒险之技.class b/out/production/A079/constants/SkillType$冒险之技.class
new file mode 100644
index 0000000..50f50c1
Binary files /dev/null and b/out/production/A079/constants/SkillType$冒险之技.class differ
diff --git a/out/production/A079/constants/SkillType$冰毒巫师.class b/out/production/A079/constants/SkillType$冰毒巫师.class
new file mode 100644
index 0000000..5379e1e
Binary files /dev/null and b/out/production/A079/constants/SkillType$冰毒巫师.class differ
diff --git a/out/production/A079/constants/SkillType$冰雷法师.class b/out/production/A079/constants/SkillType$冰雷法师.class
new file mode 100644
index 0000000..7b4bbf4
Binary files /dev/null and b/out/production/A079/constants/SkillType$冰雷法师.class differ
diff --git a/out/production/A079/constants/SkillType$冰雷魔导士.class b/out/production/A079/constants/SkillType$冰雷魔导士.class
new file mode 100644
index 0000000..78b61fb
Binary files /dev/null and b/out/production/A079/constants/SkillType$冰雷魔导士.class differ
diff --git a/out/production/A079/constants/SkillType$冲锋队长.class b/out/production/A079/constants/SkillType$冲锋队长.class
new file mode 100644
index 0000000..d585438
Binary files /dev/null and b/out/production/A079/constants/SkillType$冲锋队长.class differ
diff --git a/out/production/A079/constants/SkillType$准骑士.class b/out/production/A079/constants/SkillType$准骑士.class
new file mode 100644
index 0000000..83a3db6
Binary files /dev/null and b/out/production/A079/constants/SkillType$准骑士.class differ
diff --git a/out/production/A079/constants/SkillType$刺客.class b/out/production/A079/constants/SkillType$刺客.class
new file mode 100644
index 0000000..ebaa7d5
Binary files /dev/null and b/out/production/A079/constants/SkillType$刺客.class differ
diff --git a/out/production/A079/constants/SkillType$剑客.class b/out/production/A079/constants/SkillType$剑客.class
new file mode 100644
index 0000000..dea07f3
Binary files /dev/null and b/out/production/A079/constants/SkillType$剑客.class differ
diff --git a/out/production/A079/constants/SkillType$勇士.class b/out/production/A079/constants/SkillType$勇士.class
new file mode 100644
index 0000000..6445a27
Binary files /dev/null and b/out/production/A079/constants/SkillType$勇士.class differ
diff --git a/out/production/A079/constants/SkillType$圣骑士.class b/out/production/A079/constants/SkillType$圣骑士.class
new file mode 100644
index 0000000..9335c68
Binary files /dev/null and b/out/production/A079/constants/SkillType$圣骑士.class differ
diff --git a/out/production/A079/constants/SkillType$夜使者.class b/out/production/A079/constants/SkillType$夜使者.class
new file mode 100644
index 0000000..27c54a4
Binary files /dev/null and b/out/production/A079/constants/SkillType$夜使者.class differ
diff --git a/out/production/A079/constants/SkillType$夜行者1.class b/out/production/A079/constants/SkillType$夜行者1.class
new file mode 100644
index 0000000..0da3c67
Binary files /dev/null and b/out/production/A079/constants/SkillType$夜行者1.class differ
diff --git a/out/production/A079/constants/SkillType$夜行者2.class b/out/production/A079/constants/SkillType$夜行者2.class
new file mode 100644
index 0000000..ff0edb3
Binary files /dev/null and b/out/production/A079/constants/SkillType$夜行者2.class differ
diff --git a/out/production/A079/constants/SkillType$夜行者3.class b/out/production/A079/constants/SkillType$夜行者3.class
new file mode 100644
index 0000000..8157a3b
Binary files /dev/null and b/out/production/A079/constants/SkillType$夜行者3.class differ
diff --git a/out/production/A079/constants/SkillType$大副.class b/out/production/A079/constants/SkillType$大副.class
new file mode 100644
index 0000000..39a2f72
Binary files /dev/null and b/out/production/A079/constants/SkillType$大副.class differ
diff --git a/out/production/A079/constants/SkillType$奇袭者1.class b/out/production/A079/constants/SkillType$奇袭者1.class
new file mode 100644
index 0000000..98ff178
Binary files /dev/null and b/out/production/A079/constants/SkillType$奇袭者1.class differ
diff --git a/out/production/A079/constants/SkillType$奇袭者2.class b/out/production/A079/constants/SkillType$奇袭者2.class
new file mode 100644
index 0000000..ffd0d17
Binary files /dev/null and b/out/production/A079/constants/SkillType$奇袭者2.class differ
diff --git a/out/production/A079/constants/SkillType$奇袭者3.class b/out/production/A079/constants/SkillType$奇袭者3.class
new file mode 100644
index 0000000..212a0b0
Binary files /dev/null and b/out/production/A079/constants/SkillType$奇袭者3.class differ
diff --git a/out/production/A079/constants/SkillType$弓箭手.class b/out/production/A079/constants/SkillType$弓箭手.class
new file mode 100644
index 0000000..be71d18
Binary files /dev/null and b/out/production/A079/constants/SkillType$弓箭手.class differ
diff --git a/out/production/A079/constants/SkillType$弩弓手.class b/out/production/A079/constants/SkillType$弩弓手.class
new file mode 100644
index 0000000..4c50aed
Binary files /dev/null and b/out/production/A079/constants/SkillType$弩弓手.class differ
diff --git a/out/production/A079/constants/SkillType$战士.class b/out/production/A079/constants/SkillType$战士.class
new file mode 100644
index 0000000..ecc2fa2
Binary files /dev/null and b/out/production/A079/constants/SkillType$战士.class differ
diff --git a/out/production/A079/constants/SkillType$战神1.class b/out/production/A079/constants/SkillType$战神1.class
new file mode 100644
index 0000000..e4afa3f
Binary files /dev/null and b/out/production/A079/constants/SkillType$战神1.class differ
diff --git a/out/production/A079/constants/SkillType$战神2.class b/out/production/A079/constants/SkillType$战神2.class
new file mode 100644
index 0000000..205e608
Binary files /dev/null and b/out/production/A079/constants/SkillType$战神2.class differ
diff --git a/out/production/A079/constants/SkillType$战神3.class b/out/production/A079/constants/SkillType$战神3.class
new file mode 100644
index 0000000..dd654a4
Binary files /dev/null and b/out/production/A079/constants/SkillType$战神3.class differ
diff --git a/out/production/A079/constants/SkillType$战神4.class b/out/production/A079/constants/SkillType$战神4.class
new file mode 100644
index 0000000..94f5417
Binary files /dev/null and b/out/production/A079/constants/SkillType$战神4.class differ
diff --git a/out/production/A079/constants/SkillType$拳手.class b/out/production/A079/constants/SkillType$拳手.class
new file mode 100644
index 0000000..81473f9
Binary files /dev/null and b/out/production/A079/constants/SkillType$拳手.class differ
diff --git a/out/production/A079/constants/SkillType$斗士.class b/out/production/A079/constants/SkillType$斗士.class
new file mode 100644
index 0000000..4127ccb
Binary files /dev/null and b/out/production/A079/constants/SkillType$斗士.class differ
diff --git a/out/production/A079/constants/SkillType$无影人.class b/out/production/A079/constants/SkillType$无影人.class
new file mode 100644
index 0000000..3416a91
Binary files /dev/null and b/out/production/A079/constants/SkillType$无影人.class differ
diff --git a/out/production/A079/constants/SkillType$枪战士.class b/out/production/A079/constants/SkillType$枪战士.class
new file mode 100644
index 0000000..916255d
Binary files /dev/null and b/out/production/A079/constants/SkillType$枪战士.class differ
diff --git a/out/production/A079/constants/SkillType$海盜.class b/out/production/A079/constants/SkillType$海盜.class
new file mode 100644
index 0000000..54e0c9e
Binary files /dev/null and b/out/production/A079/constants/SkillType$海盜.class differ
diff --git a/out/production/A079/constants/SkillType$游侠.class b/out/production/A079/constants/SkillType$游侠.class
new file mode 100644
index 0000000..dc7c377
Binary files /dev/null and b/out/production/A079/constants/SkillType$游侠.class differ
diff --git a/out/production/A079/constants/SkillType$游俠.class b/out/production/A079/constants/SkillType$游俠.class
new file mode 100644
index 0000000..f4ccdd7
Binary files /dev/null and b/out/production/A079/constants/SkillType$游俠.class differ
diff --git a/out/production/A079/constants/SkillType$火枪手.class b/out/production/A079/constants/SkillType$火枪手.class
new file mode 100644
index 0000000..a682703
Binary files /dev/null and b/out/production/A079/constants/SkillType$火枪手.class differ
diff --git a/out/production/A079/constants/SkillType$火毒巫师.class b/out/production/A079/constants/SkillType$火毒巫师.class
new file mode 100644
index 0000000..04d7323
Binary files /dev/null and b/out/production/A079/constants/SkillType$火毒巫师.class differ
diff --git a/out/production/A079/constants/SkillType$火毒法师.class b/out/production/A079/constants/SkillType$火毒法师.class
new file mode 100644
index 0000000..8c44cca
Binary files /dev/null and b/out/production/A079/constants/SkillType$火毒法师.class differ
diff --git a/out/production/A079/constants/SkillType$火毒魔导士.class b/out/production/A079/constants/SkillType$火毒魔导士.class
new file mode 100644
index 0000000..220f981
Binary files /dev/null and b/out/production/A079/constants/SkillType$火毒魔导士.class differ
diff --git a/out/production/A079/constants/SkillType$炎术士1.class b/out/production/A079/constants/SkillType$炎术士1.class
new file mode 100644
index 0000000..5782585
Binary files /dev/null and b/out/production/A079/constants/SkillType$炎术士1.class differ
diff --git a/out/production/A079/constants/SkillType$炎术士2.class b/out/production/A079/constants/SkillType$炎术士2.class
new file mode 100644
index 0000000..975725d
Binary files /dev/null and b/out/production/A079/constants/SkillType$炎术士2.class differ
diff --git a/out/production/A079/constants/SkillType$炎术士3.class b/out/production/A079/constants/SkillType$炎术士3.class
new file mode 100644
index 0000000..8372e15
Binary files /dev/null and b/out/production/A079/constants/SkillType$炎术士3.class differ
diff --git a/out/production/A079/constants/SkillType$牧师.class b/out/production/A079/constants/SkillType$牧师.class
new file mode 100644
index 0000000..874aced
Binary files /dev/null and b/out/production/A079/constants/SkillType$牧师.class differ
diff --git a/out/production/A079/constants/SkillType$独行客.class b/out/production/A079/constants/SkillType$独行客.class
new file mode 100644
index 0000000..afce90e
Binary files /dev/null and b/out/production/A079/constants/SkillType$独行客.class differ
diff --git a/out/production/A079/constants/SkillType$猎人.class b/out/production/A079/constants/SkillType$猎人.class
new file mode 100644
index 0000000..b6d4b41
Binary files /dev/null and b/out/production/A079/constants/SkillType$猎人.class differ
diff --git a/out/production/A079/constants/SkillType$盜贼.class b/out/production/A079/constants/SkillType$盜贼.class
new file mode 100644
index 0000000..d5e9ab9
Binary files /dev/null and b/out/production/A079/constants/SkillType$盜贼.class differ
diff --git a/out/production/A079/constants/SkillType$神射手.class b/out/production/A079/constants/SkillType$神射手.class
new file mode 100644
index 0000000..da6fac3
Binary files /dev/null and b/out/production/A079/constants/SkillType$神射手.class differ
diff --git a/out/production/A079/constants/SkillType$祭师.class b/out/production/A079/constants/SkillType$祭师.class
new file mode 100644
index 0000000..f349154
Binary files /dev/null and b/out/production/A079/constants/SkillType$祭师.class differ
diff --git a/out/production/A079/constants/SkillType$管理者.class b/out/production/A079/constants/SkillType$管理者.class
new file mode 100644
index 0000000..eb79eca
Binary files /dev/null and b/out/production/A079/constants/SkillType$管理者.class differ
diff --git a/out/production/A079/constants/SkillType$箭神.class b/out/production/A079/constants/SkillType$箭神.class
new file mode 100644
index 0000000..d7ec096
Binary files /dev/null and b/out/production/A079/constants/SkillType$箭神.class differ
diff --git a/out/production/A079/constants/SkillType$船长.class b/out/production/A079/constants/SkillType$船长.class
new file mode 100644
index 0000000..f05df45
Binary files /dev/null and b/out/production/A079/constants/SkillType$船长.class differ
diff --git a/out/production/A079/constants/SkillType$英雄.class b/out/production/A079/constants/SkillType$英雄.class
new file mode 100644
index 0000000..e6f0795
Binary files /dev/null and b/out/production/A079/constants/SkillType$英雄.class differ
diff --git a/out/production/A079/constants/SkillType$贵族.class b/out/production/A079/constants/SkillType$贵族.class
new file mode 100644
index 0000000..a64cd61
Binary files /dev/null and b/out/production/A079/constants/SkillType$贵族.class differ
diff --git a/out/production/A079/constants/SkillType$风灵使者1.class b/out/production/A079/constants/SkillType$风灵使者1.class
new file mode 100644
index 0000000..199c3d9
Binary files /dev/null and b/out/production/A079/constants/SkillType$风灵使者1.class differ
diff --git a/out/production/A079/constants/SkillType$风灵使者2.class b/out/production/A079/constants/SkillType$风灵使者2.class
new file mode 100644
index 0000000..d22bc4b
Binary files /dev/null and b/out/production/A079/constants/SkillType$风灵使者2.class differ
diff --git a/out/production/A079/constants/SkillType$风灵使者3.class b/out/production/A079/constants/SkillType$风灵使者3.class
new file mode 100644
index 0000000..5835cb1
Binary files /dev/null and b/out/production/A079/constants/SkillType$风灵使者3.class differ
diff --git a/out/production/A079/constants/SkillType$骑士.class b/out/production/A079/constants/SkillType$骑士.class
new file mode 100644
index 0000000..19b5b7b
Binary files /dev/null and b/out/production/A079/constants/SkillType$骑士.class differ
diff --git a/out/production/A079/constants/SkillType$魂骑士1.class b/out/production/A079/constants/SkillType$魂骑士1.class
new file mode 100644
index 0000000..5512741
Binary files /dev/null and b/out/production/A079/constants/SkillType$魂骑士1.class differ
diff --git a/out/production/A079/constants/SkillType$魂骑士2.class b/out/production/A079/constants/SkillType$魂骑士2.class
new file mode 100644
index 0000000..c8b4de6
Binary files /dev/null and b/out/production/A079/constants/SkillType$魂骑士2.class differ
diff --git a/out/production/A079/constants/SkillType$魂骑士3.class b/out/production/A079/constants/SkillType$魂骑士3.class
new file mode 100644
index 0000000..b8f0a64
Binary files /dev/null and b/out/production/A079/constants/SkillType$魂骑士3.class differ
diff --git a/out/production/A079/constants/SkillType$魔法师.class b/out/production/A079/constants/SkillType$魔法师.class
new file mode 100644
index 0000000..d8d2570
Binary files /dev/null and b/out/production/A079/constants/SkillType$魔法师.class differ
diff --git a/out/production/A079/constants/SkillType$黑骑士.class b/out/production/A079/constants/SkillType$黑骑士.class
new file mode 100644
index 0000000..e0cfc3d
Binary files /dev/null and b/out/production/A079/constants/SkillType$黑骑士.class differ
diff --git a/out/production/A079/constants/SkillType$龙骑士.class b/out/production/A079/constants/SkillType$龙骑士.class
new file mode 100644
index 0000000..994e5ea
Binary files /dev/null and b/out/production/A079/constants/SkillType$龙骑士.class differ
diff --git a/out/production/A079/constants/SkillType.class b/out/production/A079/constants/SkillType.class
new file mode 100644
index 0000000..8f66746
Binary files /dev/null and b/out/production/A079/constants/SkillType.class differ
diff --git a/out/production/A079/constants/WorldConstants$Option.class b/out/production/A079/constants/WorldConstants$Option.class
new file mode 100644
index 0000000..3bbb365
Binary files /dev/null and b/out/production/A079/constants/WorldConstants$Option.class differ
diff --git a/out/production/A079/constants/WorldConstants$TespiaWorldOption.class b/out/production/A079/constants/WorldConstants$TespiaWorldOption.class
new file mode 100644
index 0000000..e1c18c0
Binary files /dev/null and b/out/production/A079/constants/WorldConstants$TespiaWorldOption.class differ
diff --git a/out/production/A079/constants/WorldConstants$WorldOption.class b/out/production/A079/constants/WorldConstants$WorldOption.class
new file mode 100644
index 0000000..8440c7d
Binary files /dev/null and b/out/production/A079/constants/WorldConstants$WorldOption.class differ
diff --git a/out/production/A079/constants/WorldConstants.class b/out/production/A079/constants/WorldConstants.class
new file mode 100644
index 0000000..3ac2a8c
Binary files /dev/null and b/out/production/A079/constants/WorldConstants.class differ
diff --git a/out/production/A079/constants/tz_model.class b/out/production/A079/constants/tz_model.class
new file mode 100644
index 0000000..01ea2d5
Binary files /dev/null and b/out/production/A079/constants/tz_model.class differ
diff --git a/out/production/A079/constants/tzjc.class b/out/production/A079/constants/tzjc.class
new file mode 100644
index 0000000..5d0b020
Binary files /dev/null and b/out/production/A079/constants/tzjc.class differ
diff --git a/out/production/A079/database/DBConPool$1.class b/out/production/A079/database/DBConPool$1.class
new file mode 100644
index 0000000..154efa3
Binary files /dev/null and b/out/production/A079/database/DBConPool$1.class differ
diff --git a/out/production/A079/database/DBConPool$InstanceHolder.class b/out/production/A079/database/DBConPool$InstanceHolder.class
new file mode 100644
index 0000000..4ea17c5
Binary files /dev/null and b/out/production/A079/database/DBConPool$InstanceHolder.class differ
diff --git a/out/production/A079/database/DBConPool.class b/out/production/A079/database/DBConPool.class
new file mode 100644
index 0000000..1c6f7f2
Binary files /dev/null and b/out/production/A079/database/DBConPool.class differ
diff --git a/out/production/A079/database/DatabaseException.class b/out/production/A079/database/DatabaseException.class
new file mode 100644
index 0000000..ab35bb0
Binary files /dev/null and b/out/production/A079/database/DatabaseException.class differ
diff --git a/out/production/A079/database/DatabaseScriptAPI.class b/out/production/A079/database/DatabaseScriptAPI.class
new file mode 100644
index 0000000..114842e
Binary files /dev/null and b/out/production/A079/database/DatabaseScriptAPI.class differ
diff --git a/out/production/A079/folder-alias.json b/out/production/A079/folder-alias.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/out/production/A079/folder-alias.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/out/production/A079/gui/Icon.png b/out/production/A079/gui/Icon.png
new file mode 100644
index 0000000..a0057f2
Binary files /dev/null and b/out/production/A079/gui/Icon.png differ
diff --git a/out/production/A079/gui/Start$1.class b/out/production/A079/gui/Start$1.class
new file mode 100644
index 0000000..b269faf
Binary files /dev/null and b/out/production/A079/gui/Start$1.class differ
diff --git a/out/production/A079/gui/Start$2.class b/out/production/A079/gui/Start$2.class
new file mode 100644
index 0000000..6f1bd2f
Binary files /dev/null and b/out/production/A079/gui/Start$2.class differ
diff --git a/out/production/A079/gui/Start$3.class b/out/production/A079/gui/Start$3.class
new file mode 100644
index 0000000..b77721d
Binary files /dev/null and b/out/production/A079/gui/Start$3.class differ
diff --git a/out/production/A079/gui/Start$4.class b/out/production/A079/gui/Start$4.class
new file mode 100644
index 0000000..f854541
Binary files /dev/null and b/out/production/A079/gui/Start$4.class differ
diff --git a/out/production/A079/gui/Start$5.class b/out/production/A079/gui/Start$5.class
new file mode 100644
index 0000000..5e4851b
Binary files /dev/null and b/out/production/A079/gui/Start$5.class differ
diff --git a/out/production/A079/gui/Start$6.class b/out/production/A079/gui/Start$6.class
new file mode 100644
index 0000000..51d7403
Binary files /dev/null and b/out/production/A079/gui/Start$6.class differ
diff --git a/out/production/A079/gui/Start.class b/out/production/A079/gui/Start.class
new file mode 100644
index 0000000..adef0f4
Binary files /dev/null and b/out/production/A079/gui/Start.class differ
diff --git a/out/production/A079/gui/jyhss$jyhwpss.class b/out/production/A079/gui/jyhss$jyhwpss.class
new file mode 100644
index 0000000..561a457
Binary files /dev/null and b/out/production/A079/gui/jyhss$jyhwpss.class differ
diff --git a/out/production/A079/gui/jyhss.class b/out/production/A079/gui/jyhss.class
new file mode 100644
index 0000000..74eb4d6
Binary files /dev/null and b/out/production/A079/gui/jyhss.class differ
diff --git a/out/production/A079/gui/ppStream$1.class b/out/production/A079/gui/ppStream$1.class
new file mode 100644
index 0000000..90bdeae
Binary files /dev/null and b/out/production/A079/gui/ppStream$1.class differ
diff --git a/out/production/A079/gui/ppStream.class b/out/production/A079/gui/ppStream.class
new file mode 100644
index 0000000..643dfa0
Binary files /dev/null and b/out/production/A079/gui/ppStream.class differ
diff --git a/out/production/A079/gui/ppms$1.class b/out/production/A079/gui/ppms$1.class
new file mode 100644
index 0000000..af1c4ad
Binary files /dev/null and b/out/production/A079/gui/ppms$1.class differ
diff --git a/out/production/A079/gui/ppms$10.class b/out/production/A079/gui/ppms$10.class
new file mode 100644
index 0000000..46b822c
Binary files /dev/null and b/out/production/A079/gui/ppms$10.class differ
diff --git a/out/production/A079/gui/ppms$100.class b/out/production/A079/gui/ppms$100.class
new file mode 100644
index 0000000..688b36b
Binary files /dev/null and b/out/production/A079/gui/ppms$100.class differ
diff --git a/out/production/A079/gui/ppms$101.class b/out/production/A079/gui/ppms$101.class
new file mode 100644
index 0000000..7540b3e
Binary files /dev/null and b/out/production/A079/gui/ppms$101.class differ
diff --git a/out/production/A079/gui/ppms$102.class b/out/production/A079/gui/ppms$102.class
new file mode 100644
index 0000000..5664dde
Binary files /dev/null and b/out/production/A079/gui/ppms$102.class differ
diff --git a/out/production/A079/gui/ppms$103.class b/out/production/A079/gui/ppms$103.class
new file mode 100644
index 0000000..1491f68
Binary files /dev/null and b/out/production/A079/gui/ppms$103.class differ
diff --git a/out/production/A079/gui/ppms$104.class b/out/production/A079/gui/ppms$104.class
new file mode 100644
index 0000000..28803e6
Binary files /dev/null and b/out/production/A079/gui/ppms$104.class differ
diff --git a/out/production/A079/gui/ppms$105.class b/out/production/A079/gui/ppms$105.class
new file mode 100644
index 0000000..f45fb98
Binary files /dev/null and b/out/production/A079/gui/ppms$105.class differ
diff --git a/out/production/A079/gui/ppms$106.class b/out/production/A079/gui/ppms$106.class
new file mode 100644
index 0000000..e49c0c3
Binary files /dev/null and b/out/production/A079/gui/ppms$106.class differ
diff --git a/out/production/A079/gui/ppms$107.class b/out/production/A079/gui/ppms$107.class
new file mode 100644
index 0000000..cdaaf00
Binary files /dev/null and b/out/production/A079/gui/ppms$107.class differ
diff --git a/out/production/A079/gui/ppms$108.class b/out/production/A079/gui/ppms$108.class
new file mode 100644
index 0000000..1db6de3
Binary files /dev/null and b/out/production/A079/gui/ppms$108.class differ
diff --git a/out/production/A079/gui/ppms$109.class b/out/production/A079/gui/ppms$109.class
new file mode 100644
index 0000000..9c9c7fe
Binary files /dev/null and b/out/production/A079/gui/ppms$109.class differ
diff --git a/out/production/A079/gui/ppms$11.class b/out/production/A079/gui/ppms$11.class
new file mode 100644
index 0000000..e1dc448
Binary files /dev/null and b/out/production/A079/gui/ppms$11.class differ
diff --git a/out/production/A079/gui/ppms$110.class b/out/production/A079/gui/ppms$110.class
new file mode 100644
index 0000000..28f92ff
Binary files /dev/null and b/out/production/A079/gui/ppms$110.class differ
diff --git a/out/production/A079/gui/ppms$111.class b/out/production/A079/gui/ppms$111.class
new file mode 100644
index 0000000..18d8938
Binary files /dev/null and b/out/production/A079/gui/ppms$111.class differ
diff --git a/out/production/A079/gui/ppms$112.class b/out/production/A079/gui/ppms$112.class
new file mode 100644
index 0000000..b5abe97
Binary files /dev/null and b/out/production/A079/gui/ppms$112.class differ
diff --git a/out/production/A079/gui/ppms$113.class b/out/production/A079/gui/ppms$113.class
new file mode 100644
index 0000000..946176e
Binary files /dev/null and b/out/production/A079/gui/ppms$113.class differ
diff --git a/out/production/A079/gui/ppms$114.class b/out/production/A079/gui/ppms$114.class
new file mode 100644
index 0000000..736c523
Binary files /dev/null and b/out/production/A079/gui/ppms$114.class differ
diff --git a/out/production/A079/gui/ppms$115.class b/out/production/A079/gui/ppms$115.class
new file mode 100644
index 0000000..1894695
Binary files /dev/null and b/out/production/A079/gui/ppms$115.class differ
diff --git a/out/production/A079/gui/ppms$116.class b/out/production/A079/gui/ppms$116.class
new file mode 100644
index 0000000..895e317
Binary files /dev/null and b/out/production/A079/gui/ppms$116.class differ
diff --git a/out/production/A079/gui/ppms$117.class b/out/production/A079/gui/ppms$117.class
new file mode 100644
index 0000000..90332e0
Binary files /dev/null and b/out/production/A079/gui/ppms$117.class differ
diff --git a/out/production/A079/gui/ppms$118.class b/out/production/A079/gui/ppms$118.class
new file mode 100644
index 0000000..806ff82
Binary files /dev/null and b/out/production/A079/gui/ppms$118.class differ
diff --git a/out/production/A079/gui/ppms$119.class b/out/production/A079/gui/ppms$119.class
new file mode 100644
index 0000000..295f522
Binary files /dev/null and b/out/production/A079/gui/ppms$119.class differ
diff --git a/out/production/A079/gui/ppms$12.class b/out/production/A079/gui/ppms$12.class
new file mode 100644
index 0000000..e2fccfe
Binary files /dev/null and b/out/production/A079/gui/ppms$12.class differ
diff --git a/out/production/A079/gui/ppms$120.class b/out/production/A079/gui/ppms$120.class
new file mode 100644
index 0000000..f9ee631
Binary files /dev/null and b/out/production/A079/gui/ppms$120.class differ
diff --git a/out/production/A079/gui/ppms$121.class b/out/production/A079/gui/ppms$121.class
new file mode 100644
index 0000000..864bdc5
Binary files /dev/null and b/out/production/A079/gui/ppms$121.class differ
diff --git a/out/production/A079/gui/ppms$122.class b/out/production/A079/gui/ppms$122.class
new file mode 100644
index 0000000..896bedb
Binary files /dev/null and b/out/production/A079/gui/ppms$122.class differ
diff --git a/out/production/A079/gui/ppms$123.class b/out/production/A079/gui/ppms$123.class
new file mode 100644
index 0000000..1560fe9
Binary files /dev/null and b/out/production/A079/gui/ppms$123.class differ
diff --git a/out/production/A079/gui/ppms$124.class b/out/production/A079/gui/ppms$124.class
new file mode 100644
index 0000000..12bc9b5
Binary files /dev/null and b/out/production/A079/gui/ppms$124.class differ
diff --git a/out/production/A079/gui/ppms$125.class b/out/production/A079/gui/ppms$125.class
new file mode 100644
index 0000000..9c47d80
Binary files /dev/null and b/out/production/A079/gui/ppms$125.class differ
diff --git a/out/production/A079/gui/ppms$126.class b/out/production/A079/gui/ppms$126.class
new file mode 100644
index 0000000..6d2b144
Binary files /dev/null and b/out/production/A079/gui/ppms$126.class differ
diff --git a/out/production/A079/gui/ppms$127.class b/out/production/A079/gui/ppms$127.class
new file mode 100644
index 0000000..3d4ef0e
Binary files /dev/null and b/out/production/A079/gui/ppms$127.class differ
diff --git a/out/production/A079/gui/ppms$128.class b/out/production/A079/gui/ppms$128.class
new file mode 100644
index 0000000..7369bff
Binary files /dev/null and b/out/production/A079/gui/ppms$128.class differ
diff --git a/out/production/A079/gui/ppms$129.class b/out/production/A079/gui/ppms$129.class
new file mode 100644
index 0000000..261b473
Binary files /dev/null and b/out/production/A079/gui/ppms$129.class differ
diff --git a/out/production/A079/gui/ppms$13.class b/out/production/A079/gui/ppms$13.class
new file mode 100644
index 0000000..777f547
Binary files /dev/null and b/out/production/A079/gui/ppms$13.class differ
diff --git a/out/production/A079/gui/ppms$130.class b/out/production/A079/gui/ppms$130.class
new file mode 100644
index 0000000..736934e
Binary files /dev/null and b/out/production/A079/gui/ppms$130.class differ
diff --git a/out/production/A079/gui/ppms$131.class b/out/production/A079/gui/ppms$131.class
new file mode 100644
index 0000000..81cea26
Binary files /dev/null and b/out/production/A079/gui/ppms$131.class differ
diff --git a/out/production/A079/gui/ppms$132.class b/out/production/A079/gui/ppms$132.class
new file mode 100644
index 0000000..e2c5dfc
Binary files /dev/null and b/out/production/A079/gui/ppms$132.class differ
diff --git a/out/production/A079/gui/ppms$133.class b/out/production/A079/gui/ppms$133.class
new file mode 100644
index 0000000..015b0db
Binary files /dev/null and b/out/production/A079/gui/ppms$133.class differ
diff --git a/out/production/A079/gui/ppms$134.class b/out/production/A079/gui/ppms$134.class
new file mode 100644
index 0000000..a5eb22d
Binary files /dev/null and b/out/production/A079/gui/ppms$134.class differ
diff --git a/out/production/A079/gui/ppms$135.class b/out/production/A079/gui/ppms$135.class
new file mode 100644
index 0000000..1c2ef2e
Binary files /dev/null and b/out/production/A079/gui/ppms$135.class differ
diff --git a/out/production/A079/gui/ppms$136.class b/out/production/A079/gui/ppms$136.class
new file mode 100644
index 0000000..a4bb1ce
Binary files /dev/null and b/out/production/A079/gui/ppms$136.class differ
diff --git a/out/production/A079/gui/ppms$137.class b/out/production/A079/gui/ppms$137.class
new file mode 100644
index 0000000..b598bc4
Binary files /dev/null and b/out/production/A079/gui/ppms$137.class differ
diff --git a/out/production/A079/gui/ppms$138.class b/out/production/A079/gui/ppms$138.class
new file mode 100644
index 0000000..d9e9328
Binary files /dev/null and b/out/production/A079/gui/ppms$138.class differ
diff --git a/out/production/A079/gui/ppms$139.class b/out/production/A079/gui/ppms$139.class
new file mode 100644
index 0000000..f4a5311
Binary files /dev/null and b/out/production/A079/gui/ppms$139.class differ
diff --git a/out/production/A079/gui/ppms$14.class b/out/production/A079/gui/ppms$14.class
new file mode 100644
index 0000000..0b8e405
Binary files /dev/null and b/out/production/A079/gui/ppms$14.class differ
diff --git a/out/production/A079/gui/ppms$140.class b/out/production/A079/gui/ppms$140.class
new file mode 100644
index 0000000..9d7b18a
Binary files /dev/null and b/out/production/A079/gui/ppms$140.class differ
diff --git a/out/production/A079/gui/ppms$141.class b/out/production/A079/gui/ppms$141.class
new file mode 100644
index 0000000..9cb77cf
Binary files /dev/null and b/out/production/A079/gui/ppms$141.class differ
diff --git a/out/production/A079/gui/ppms$142.class b/out/production/A079/gui/ppms$142.class
new file mode 100644
index 0000000..4ecec99
Binary files /dev/null and b/out/production/A079/gui/ppms$142.class differ
diff --git a/out/production/A079/gui/ppms$143.class b/out/production/A079/gui/ppms$143.class
new file mode 100644
index 0000000..b924768
Binary files /dev/null and b/out/production/A079/gui/ppms$143.class differ
diff --git a/out/production/A079/gui/ppms$144.class b/out/production/A079/gui/ppms$144.class
new file mode 100644
index 0000000..ca707da
Binary files /dev/null and b/out/production/A079/gui/ppms$144.class differ
diff --git a/out/production/A079/gui/ppms$145.class b/out/production/A079/gui/ppms$145.class
new file mode 100644
index 0000000..6ed538d
Binary files /dev/null and b/out/production/A079/gui/ppms$145.class differ
diff --git a/out/production/A079/gui/ppms$146.class b/out/production/A079/gui/ppms$146.class
new file mode 100644
index 0000000..0d73c71
Binary files /dev/null and b/out/production/A079/gui/ppms$146.class differ
diff --git a/out/production/A079/gui/ppms$147.class b/out/production/A079/gui/ppms$147.class
new file mode 100644
index 0000000..5bf2d92
Binary files /dev/null and b/out/production/A079/gui/ppms$147.class differ
diff --git a/out/production/A079/gui/ppms$148.class b/out/production/A079/gui/ppms$148.class
new file mode 100644
index 0000000..c414340
Binary files /dev/null and b/out/production/A079/gui/ppms$148.class differ
diff --git a/out/production/A079/gui/ppms$149.class b/out/production/A079/gui/ppms$149.class
new file mode 100644
index 0000000..130b1b7
Binary files /dev/null and b/out/production/A079/gui/ppms$149.class differ
diff --git a/out/production/A079/gui/ppms$15.class b/out/production/A079/gui/ppms$15.class
new file mode 100644
index 0000000..16d1e41
Binary files /dev/null and b/out/production/A079/gui/ppms$15.class differ
diff --git a/out/production/A079/gui/ppms$150.class b/out/production/A079/gui/ppms$150.class
new file mode 100644
index 0000000..d065240
Binary files /dev/null and b/out/production/A079/gui/ppms$150.class differ
diff --git a/out/production/A079/gui/ppms$151.class b/out/production/A079/gui/ppms$151.class
new file mode 100644
index 0000000..e79c1cf
Binary files /dev/null and b/out/production/A079/gui/ppms$151.class differ
diff --git a/out/production/A079/gui/ppms$152.class b/out/production/A079/gui/ppms$152.class
new file mode 100644
index 0000000..9bcfe75
Binary files /dev/null and b/out/production/A079/gui/ppms$152.class differ
diff --git a/out/production/A079/gui/ppms$153.class b/out/production/A079/gui/ppms$153.class
new file mode 100644
index 0000000..634de24
Binary files /dev/null and b/out/production/A079/gui/ppms$153.class differ
diff --git a/out/production/A079/gui/ppms$154.class b/out/production/A079/gui/ppms$154.class
new file mode 100644
index 0000000..9990a4d
Binary files /dev/null and b/out/production/A079/gui/ppms$154.class differ
diff --git a/out/production/A079/gui/ppms$155.class b/out/production/A079/gui/ppms$155.class
new file mode 100644
index 0000000..dd59325
Binary files /dev/null and b/out/production/A079/gui/ppms$155.class differ
diff --git a/out/production/A079/gui/ppms$156.class b/out/production/A079/gui/ppms$156.class
new file mode 100644
index 0000000..1562b32
Binary files /dev/null and b/out/production/A079/gui/ppms$156.class differ
diff --git a/out/production/A079/gui/ppms$157.class b/out/production/A079/gui/ppms$157.class
new file mode 100644
index 0000000..fe2be2d
Binary files /dev/null and b/out/production/A079/gui/ppms$157.class differ
diff --git a/out/production/A079/gui/ppms$158.class b/out/production/A079/gui/ppms$158.class
new file mode 100644
index 0000000..5c727cb
Binary files /dev/null and b/out/production/A079/gui/ppms$158.class differ
diff --git a/out/production/A079/gui/ppms$159.class b/out/production/A079/gui/ppms$159.class
new file mode 100644
index 0000000..e065da9
Binary files /dev/null and b/out/production/A079/gui/ppms$159.class differ
diff --git a/out/production/A079/gui/ppms$16.class b/out/production/A079/gui/ppms$16.class
new file mode 100644
index 0000000..763e05d
Binary files /dev/null and b/out/production/A079/gui/ppms$16.class differ
diff --git a/out/production/A079/gui/ppms$160.class b/out/production/A079/gui/ppms$160.class
new file mode 100644
index 0000000..cbad47c
Binary files /dev/null and b/out/production/A079/gui/ppms$160.class differ
diff --git a/out/production/A079/gui/ppms$161.class b/out/production/A079/gui/ppms$161.class
new file mode 100644
index 0000000..993a8f0
Binary files /dev/null and b/out/production/A079/gui/ppms$161.class differ
diff --git a/out/production/A079/gui/ppms$162.class b/out/production/A079/gui/ppms$162.class
new file mode 100644
index 0000000..a466f12
Binary files /dev/null and b/out/production/A079/gui/ppms$162.class differ
diff --git a/out/production/A079/gui/ppms$163.class b/out/production/A079/gui/ppms$163.class
new file mode 100644
index 0000000..11ae1c2
Binary files /dev/null and b/out/production/A079/gui/ppms$163.class differ
diff --git a/out/production/A079/gui/ppms$164.class b/out/production/A079/gui/ppms$164.class
new file mode 100644
index 0000000..17c800f
Binary files /dev/null and b/out/production/A079/gui/ppms$164.class differ
diff --git a/out/production/A079/gui/ppms$165.class b/out/production/A079/gui/ppms$165.class
new file mode 100644
index 0000000..302d011
Binary files /dev/null and b/out/production/A079/gui/ppms$165.class differ
diff --git a/out/production/A079/gui/ppms$166.class b/out/production/A079/gui/ppms$166.class
new file mode 100644
index 0000000..bc6cf6b
Binary files /dev/null and b/out/production/A079/gui/ppms$166.class differ
diff --git a/out/production/A079/gui/ppms$167.class b/out/production/A079/gui/ppms$167.class
new file mode 100644
index 0000000..14a1048
Binary files /dev/null and b/out/production/A079/gui/ppms$167.class differ
diff --git a/out/production/A079/gui/ppms$168.class b/out/production/A079/gui/ppms$168.class
new file mode 100644
index 0000000..835252b
Binary files /dev/null and b/out/production/A079/gui/ppms$168.class differ
diff --git a/out/production/A079/gui/ppms$169.class b/out/production/A079/gui/ppms$169.class
new file mode 100644
index 0000000..401f153
Binary files /dev/null and b/out/production/A079/gui/ppms$169.class differ
diff --git a/out/production/A079/gui/ppms$17.class b/out/production/A079/gui/ppms$17.class
new file mode 100644
index 0000000..d77e074
Binary files /dev/null and b/out/production/A079/gui/ppms$17.class differ
diff --git a/out/production/A079/gui/ppms$170.class b/out/production/A079/gui/ppms$170.class
new file mode 100644
index 0000000..62e129b
Binary files /dev/null and b/out/production/A079/gui/ppms$170.class differ
diff --git a/out/production/A079/gui/ppms$171.class b/out/production/A079/gui/ppms$171.class
new file mode 100644
index 0000000..88928dc
Binary files /dev/null and b/out/production/A079/gui/ppms$171.class differ
diff --git a/out/production/A079/gui/ppms$172.class b/out/production/A079/gui/ppms$172.class
new file mode 100644
index 0000000..2677bb7
Binary files /dev/null and b/out/production/A079/gui/ppms$172.class differ
diff --git a/out/production/A079/gui/ppms$173.class b/out/production/A079/gui/ppms$173.class
new file mode 100644
index 0000000..146cabb
Binary files /dev/null and b/out/production/A079/gui/ppms$173.class differ
diff --git a/out/production/A079/gui/ppms$174.class b/out/production/A079/gui/ppms$174.class
new file mode 100644
index 0000000..fd35b33
Binary files /dev/null and b/out/production/A079/gui/ppms$174.class differ
diff --git a/out/production/A079/gui/ppms$175.class b/out/production/A079/gui/ppms$175.class
new file mode 100644
index 0000000..211fb07
Binary files /dev/null and b/out/production/A079/gui/ppms$175.class differ
diff --git a/out/production/A079/gui/ppms$176.class b/out/production/A079/gui/ppms$176.class
new file mode 100644
index 0000000..f1304d0
Binary files /dev/null and b/out/production/A079/gui/ppms$176.class differ
diff --git a/out/production/A079/gui/ppms$177.class b/out/production/A079/gui/ppms$177.class
new file mode 100644
index 0000000..f8966d1
Binary files /dev/null and b/out/production/A079/gui/ppms$177.class differ
diff --git a/out/production/A079/gui/ppms$178.class b/out/production/A079/gui/ppms$178.class
new file mode 100644
index 0000000..50383bc
Binary files /dev/null and b/out/production/A079/gui/ppms$178.class differ
diff --git a/out/production/A079/gui/ppms$179.class b/out/production/A079/gui/ppms$179.class
new file mode 100644
index 0000000..92fb7bb
Binary files /dev/null and b/out/production/A079/gui/ppms$179.class differ
diff --git a/out/production/A079/gui/ppms$18.class b/out/production/A079/gui/ppms$18.class
new file mode 100644
index 0000000..ed9d02a
Binary files /dev/null and b/out/production/A079/gui/ppms$18.class differ
diff --git a/out/production/A079/gui/ppms$180.class b/out/production/A079/gui/ppms$180.class
new file mode 100644
index 0000000..3a98063
Binary files /dev/null and b/out/production/A079/gui/ppms$180.class differ
diff --git a/out/production/A079/gui/ppms$181.class b/out/production/A079/gui/ppms$181.class
new file mode 100644
index 0000000..785f38e
Binary files /dev/null and b/out/production/A079/gui/ppms$181.class differ
diff --git a/out/production/A079/gui/ppms$182.class b/out/production/A079/gui/ppms$182.class
new file mode 100644
index 0000000..9de863a
Binary files /dev/null and b/out/production/A079/gui/ppms$182.class differ
diff --git a/out/production/A079/gui/ppms$183.class b/out/production/A079/gui/ppms$183.class
new file mode 100644
index 0000000..28d6b64
Binary files /dev/null and b/out/production/A079/gui/ppms$183.class differ
diff --git a/out/production/A079/gui/ppms$184.class b/out/production/A079/gui/ppms$184.class
new file mode 100644
index 0000000..9bd5d67
Binary files /dev/null and b/out/production/A079/gui/ppms$184.class differ
diff --git a/out/production/A079/gui/ppms$185.class b/out/production/A079/gui/ppms$185.class
new file mode 100644
index 0000000..6c87934
Binary files /dev/null and b/out/production/A079/gui/ppms$185.class differ
diff --git a/out/production/A079/gui/ppms$186.class b/out/production/A079/gui/ppms$186.class
new file mode 100644
index 0000000..f2f8fb8
Binary files /dev/null and b/out/production/A079/gui/ppms$186.class differ
diff --git a/out/production/A079/gui/ppms$187.class b/out/production/A079/gui/ppms$187.class
new file mode 100644
index 0000000..7546f08
Binary files /dev/null and b/out/production/A079/gui/ppms$187.class differ
diff --git a/out/production/A079/gui/ppms$188.class b/out/production/A079/gui/ppms$188.class
new file mode 100644
index 0000000..0faea6d
Binary files /dev/null and b/out/production/A079/gui/ppms$188.class differ
diff --git a/out/production/A079/gui/ppms$189.class b/out/production/A079/gui/ppms$189.class
new file mode 100644
index 0000000..9f339b7
Binary files /dev/null and b/out/production/A079/gui/ppms$189.class differ
diff --git a/out/production/A079/gui/ppms$19.class b/out/production/A079/gui/ppms$19.class
new file mode 100644
index 0000000..be2bfce
Binary files /dev/null and b/out/production/A079/gui/ppms$19.class differ
diff --git a/out/production/A079/gui/ppms$190.class b/out/production/A079/gui/ppms$190.class
new file mode 100644
index 0000000..38f220a
Binary files /dev/null and b/out/production/A079/gui/ppms$190.class differ
diff --git a/out/production/A079/gui/ppms$191.class b/out/production/A079/gui/ppms$191.class
new file mode 100644
index 0000000..39525f3
Binary files /dev/null and b/out/production/A079/gui/ppms$191.class differ
diff --git a/out/production/A079/gui/ppms$192.class b/out/production/A079/gui/ppms$192.class
new file mode 100644
index 0000000..2cd770c
Binary files /dev/null and b/out/production/A079/gui/ppms$192.class differ
diff --git a/out/production/A079/gui/ppms$193.class b/out/production/A079/gui/ppms$193.class
new file mode 100644
index 0000000..cbe9f6b
Binary files /dev/null and b/out/production/A079/gui/ppms$193.class differ
diff --git a/out/production/A079/gui/ppms$194.class b/out/production/A079/gui/ppms$194.class
new file mode 100644
index 0000000..4f8fccf
Binary files /dev/null and b/out/production/A079/gui/ppms$194.class differ
diff --git a/out/production/A079/gui/ppms$195.class b/out/production/A079/gui/ppms$195.class
new file mode 100644
index 0000000..42251cc
Binary files /dev/null and b/out/production/A079/gui/ppms$195.class differ
diff --git a/out/production/A079/gui/ppms$196.class b/out/production/A079/gui/ppms$196.class
new file mode 100644
index 0000000..6c5a692
Binary files /dev/null and b/out/production/A079/gui/ppms$196.class differ
diff --git a/out/production/A079/gui/ppms$197.class b/out/production/A079/gui/ppms$197.class
new file mode 100644
index 0000000..017dccc
Binary files /dev/null and b/out/production/A079/gui/ppms$197.class differ
diff --git a/out/production/A079/gui/ppms$198.class b/out/production/A079/gui/ppms$198.class
new file mode 100644
index 0000000..bcf3137
Binary files /dev/null and b/out/production/A079/gui/ppms$198.class differ
diff --git a/out/production/A079/gui/ppms$199.class b/out/production/A079/gui/ppms$199.class
new file mode 100644
index 0000000..f2f7fc0
Binary files /dev/null and b/out/production/A079/gui/ppms$199.class differ
diff --git a/out/production/A079/gui/ppms$2.class b/out/production/A079/gui/ppms$2.class
new file mode 100644
index 0000000..be0f7ad
Binary files /dev/null and b/out/production/A079/gui/ppms$2.class differ
diff --git a/out/production/A079/gui/ppms$20.class b/out/production/A079/gui/ppms$20.class
new file mode 100644
index 0000000..e87b420
Binary files /dev/null and b/out/production/A079/gui/ppms$20.class differ
diff --git a/out/production/A079/gui/ppms$200.class b/out/production/A079/gui/ppms$200.class
new file mode 100644
index 0000000..a28ad24
Binary files /dev/null and b/out/production/A079/gui/ppms$200.class differ
diff --git a/out/production/A079/gui/ppms$201.class b/out/production/A079/gui/ppms$201.class
new file mode 100644
index 0000000..89d0baa
Binary files /dev/null and b/out/production/A079/gui/ppms$201.class differ
diff --git a/out/production/A079/gui/ppms$202.class b/out/production/A079/gui/ppms$202.class
new file mode 100644
index 0000000..3d598cf
Binary files /dev/null and b/out/production/A079/gui/ppms$202.class differ
diff --git a/out/production/A079/gui/ppms$203.class b/out/production/A079/gui/ppms$203.class
new file mode 100644
index 0000000..2f55803
Binary files /dev/null and b/out/production/A079/gui/ppms$203.class differ
diff --git a/out/production/A079/gui/ppms$204.class b/out/production/A079/gui/ppms$204.class
new file mode 100644
index 0000000..e82c1b0
Binary files /dev/null and b/out/production/A079/gui/ppms$204.class differ
diff --git a/out/production/A079/gui/ppms$205.class b/out/production/A079/gui/ppms$205.class
new file mode 100644
index 0000000..00e34be
Binary files /dev/null and b/out/production/A079/gui/ppms$205.class differ
diff --git a/out/production/A079/gui/ppms$206.class b/out/production/A079/gui/ppms$206.class
new file mode 100644
index 0000000..4da71ec
Binary files /dev/null and b/out/production/A079/gui/ppms$206.class differ
diff --git a/out/production/A079/gui/ppms$207.class b/out/production/A079/gui/ppms$207.class
new file mode 100644
index 0000000..8aef98a
Binary files /dev/null and b/out/production/A079/gui/ppms$207.class differ
diff --git a/out/production/A079/gui/ppms$208.class b/out/production/A079/gui/ppms$208.class
new file mode 100644
index 0000000..373160a
Binary files /dev/null and b/out/production/A079/gui/ppms$208.class differ
diff --git a/out/production/A079/gui/ppms$209.class b/out/production/A079/gui/ppms$209.class
new file mode 100644
index 0000000..8f25f9a
Binary files /dev/null and b/out/production/A079/gui/ppms$209.class differ
diff --git a/out/production/A079/gui/ppms$21.class b/out/production/A079/gui/ppms$21.class
new file mode 100644
index 0000000..9c1e298
Binary files /dev/null and b/out/production/A079/gui/ppms$21.class differ
diff --git a/out/production/A079/gui/ppms$210.class b/out/production/A079/gui/ppms$210.class
new file mode 100644
index 0000000..a3a89cc
Binary files /dev/null and b/out/production/A079/gui/ppms$210.class differ
diff --git a/out/production/A079/gui/ppms$211.class b/out/production/A079/gui/ppms$211.class
new file mode 100644
index 0000000..0356902
Binary files /dev/null and b/out/production/A079/gui/ppms$211.class differ
diff --git a/out/production/A079/gui/ppms$212.class b/out/production/A079/gui/ppms$212.class
new file mode 100644
index 0000000..59adcee
Binary files /dev/null and b/out/production/A079/gui/ppms$212.class differ
diff --git a/out/production/A079/gui/ppms$213.class b/out/production/A079/gui/ppms$213.class
new file mode 100644
index 0000000..99e6efa
Binary files /dev/null and b/out/production/A079/gui/ppms$213.class differ
diff --git a/out/production/A079/gui/ppms$214.class b/out/production/A079/gui/ppms$214.class
new file mode 100644
index 0000000..8e5b51c
Binary files /dev/null and b/out/production/A079/gui/ppms$214.class differ
diff --git a/out/production/A079/gui/ppms$215.class b/out/production/A079/gui/ppms$215.class
new file mode 100644
index 0000000..1988ce3
Binary files /dev/null and b/out/production/A079/gui/ppms$215.class differ
diff --git a/out/production/A079/gui/ppms$216.class b/out/production/A079/gui/ppms$216.class
new file mode 100644
index 0000000..cc366fc
Binary files /dev/null and b/out/production/A079/gui/ppms$216.class differ
diff --git a/out/production/A079/gui/ppms$217.class b/out/production/A079/gui/ppms$217.class
new file mode 100644
index 0000000..9597703
Binary files /dev/null and b/out/production/A079/gui/ppms$217.class differ
diff --git a/out/production/A079/gui/ppms$218.class b/out/production/A079/gui/ppms$218.class
new file mode 100644
index 0000000..5af47bb
Binary files /dev/null and b/out/production/A079/gui/ppms$218.class differ
diff --git a/out/production/A079/gui/ppms$219.class b/out/production/A079/gui/ppms$219.class
new file mode 100644
index 0000000..df94516
Binary files /dev/null and b/out/production/A079/gui/ppms$219.class differ
diff --git a/out/production/A079/gui/ppms$22.class b/out/production/A079/gui/ppms$22.class
new file mode 100644
index 0000000..ab11b1f
Binary files /dev/null and b/out/production/A079/gui/ppms$22.class differ
diff --git a/out/production/A079/gui/ppms$220.class b/out/production/A079/gui/ppms$220.class
new file mode 100644
index 0000000..e64abac
Binary files /dev/null and b/out/production/A079/gui/ppms$220.class differ
diff --git a/out/production/A079/gui/ppms$221.class b/out/production/A079/gui/ppms$221.class
new file mode 100644
index 0000000..760ec2f
Binary files /dev/null and b/out/production/A079/gui/ppms$221.class differ
diff --git a/out/production/A079/gui/ppms$222.class b/out/production/A079/gui/ppms$222.class
new file mode 100644
index 0000000..92fe822
Binary files /dev/null and b/out/production/A079/gui/ppms$222.class differ
diff --git a/out/production/A079/gui/ppms$223.class b/out/production/A079/gui/ppms$223.class
new file mode 100644
index 0000000..89eaad1
Binary files /dev/null and b/out/production/A079/gui/ppms$223.class differ
diff --git a/out/production/A079/gui/ppms$224.class b/out/production/A079/gui/ppms$224.class
new file mode 100644
index 0000000..a3676d2
Binary files /dev/null and b/out/production/A079/gui/ppms$224.class differ
diff --git a/out/production/A079/gui/ppms$225.class b/out/production/A079/gui/ppms$225.class
new file mode 100644
index 0000000..8407731
Binary files /dev/null and b/out/production/A079/gui/ppms$225.class differ
diff --git a/out/production/A079/gui/ppms$226.class b/out/production/A079/gui/ppms$226.class
new file mode 100644
index 0000000..e97db73
Binary files /dev/null and b/out/production/A079/gui/ppms$226.class differ
diff --git a/out/production/A079/gui/ppms$227.class b/out/production/A079/gui/ppms$227.class
new file mode 100644
index 0000000..a7b4e34
Binary files /dev/null and b/out/production/A079/gui/ppms$227.class differ
diff --git a/out/production/A079/gui/ppms$228.class b/out/production/A079/gui/ppms$228.class
new file mode 100644
index 0000000..28bdf45
Binary files /dev/null and b/out/production/A079/gui/ppms$228.class differ
diff --git a/out/production/A079/gui/ppms$229.class b/out/production/A079/gui/ppms$229.class
new file mode 100644
index 0000000..0738b77
Binary files /dev/null and b/out/production/A079/gui/ppms$229.class differ
diff --git a/out/production/A079/gui/ppms$23.class b/out/production/A079/gui/ppms$23.class
new file mode 100644
index 0000000..fcfd034
Binary files /dev/null and b/out/production/A079/gui/ppms$23.class differ
diff --git a/out/production/A079/gui/ppms$230.class b/out/production/A079/gui/ppms$230.class
new file mode 100644
index 0000000..014d969
Binary files /dev/null and b/out/production/A079/gui/ppms$230.class differ
diff --git a/out/production/A079/gui/ppms$231.class b/out/production/A079/gui/ppms$231.class
new file mode 100644
index 0000000..b508254
Binary files /dev/null and b/out/production/A079/gui/ppms$231.class differ
diff --git a/out/production/A079/gui/ppms$232.class b/out/production/A079/gui/ppms$232.class
new file mode 100644
index 0000000..5569e2e
Binary files /dev/null and b/out/production/A079/gui/ppms$232.class differ
diff --git a/out/production/A079/gui/ppms$233.class b/out/production/A079/gui/ppms$233.class
new file mode 100644
index 0000000..5e0b18a
Binary files /dev/null and b/out/production/A079/gui/ppms$233.class differ
diff --git a/out/production/A079/gui/ppms$234.class b/out/production/A079/gui/ppms$234.class
new file mode 100644
index 0000000..734090a
Binary files /dev/null and b/out/production/A079/gui/ppms$234.class differ
diff --git a/out/production/A079/gui/ppms$235.class b/out/production/A079/gui/ppms$235.class
new file mode 100644
index 0000000..4373e16
Binary files /dev/null and b/out/production/A079/gui/ppms$235.class differ
diff --git a/out/production/A079/gui/ppms$236.class b/out/production/A079/gui/ppms$236.class
new file mode 100644
index 0000000..9aafc7d
Binary files /dev/null and b/out/production/A079/gui/ppms$236.class differ
diff --git a/out/production/A079/gui/ppms$237.class b/out/production/A079/gui/ppms$237.class
new file mode 100644
index 0000000..a4d18bd
Binary files /dev/null and b/out/production/A079/gui/ppms$237.class differ
diff --git a/out/production/A079/gui/ppms$238.class b/out/production/A079/gui/ppms$238.class
new file mode 100644
index 0000000..cefa495
Binary files /dev/null and b/out/production/A079/gui/ppms$238.class differ
diff --git a/out/production/A079/gui/ppms$239.class b/out/production/A079/gui/ppms$239.class
new file mode 100644
index 0000000..2f5e255
Binary files /dev/null and b/out/production/A079/gui/ppms$239.class differ
diff --git a/out/production/A079/gui/ppms$24.class b/out/production/A079/gui/ppms$24.class
new file mode 100644
index 0000000..d567f1d
Binary files /dev/null and b/out/production/A079/gui/ppms$24.class differ
diff --git a/out/production/A079/gui/ppms$240.class b/out/production/A079/gui/ppms$240.class
new file mode 100644
index 0000000..e86964a
Binary files /dev/null and b/out/production/A079/gui/ppms$240.class differ
diff --git a/out/production/A079/gui/ppms$241.class b/out/production/A079/gui/ppms$241.class
new file mode 100644
index 0000000..5ff8eac
Binary files /dev/null and b/out/production/A079/gui/ppms$241.class differ
diff --git a/out/production/A079/gui/ppms$242.class b/out/production/A079/gui/ppms$242.class
new file mode 100644
index 0000000..f617b69
Binary files /dev/null and b/out/production/A079/gui/ppms$242.class differ
diff --git a/out/production/A079/gui/ppms$243.class b/out/production/A079/gui/ppms$243.class
new file mode 100644
index 0000000..8dfd1ef
Binary files /dev/null and b/out/production/A079/gui/ppms$243.class differ
diff --git a/out/production/A079/gui/ppms$244.class b/out/production/A079/gui/ppms$244.class
new file mode 100644
index 0000000..76b81a6
Binary files /dev/null and b/out/production/A079/gui/ppms$244.class differ
diff --git a/out/production/A079/gui/ppms$245.class b/out/production/A079/gui/ppms$245.class
new file mode 100644
index 0000000..a7059c9
Binary files /dev/null and b/out/production/A079/gui/ppms$245.class differ
diff --git a/out/production/A079/gui/ppms$246.class b/out/production/A079/gui/ppms$246.class
new file mode 100644
index 0000000..f086549
Binary files /dev/null and b/out/production/A079/gui/ppms$246.class differ
diff --git a/out/production/A079/gui/ppms$247.class b/out/production/A079/gui/ppms$247.class
new file mode 100644
index 0000000..342018d
Binary files /dev/null and b/out/production/A079/gui/ppms$247.class differ
diff --git a/out/production/A079/gui/ppms$248.class b/out/production/A079/gui/ppms$248.class
new file mode 100644
index 0000000..a0223d6
Binary files /dev/null and b/out/production/A079/gui/ppms$248.class differ
diff --git a/out/production/A079/gui/ppms$249.class b/out/production/A079/gui/ppms$249.class
new file mode 100644
index 0000000..83539cf
Binary files /dev/null and b/out/production/A079/gui/ppms$249.class differ
diff --git a/out/production/A079/gui/ppms$25.class b/out/production/A079/gui/ppms$25.class
new file mode 100644
index 0000000..4c28c61
Binary files /dev/null and b/out/production/A079/gui/ppms$25.class differ
diff --git a/out/production/A079/gui/ppms$250.class b/out/production/A079/gui/ppms$250.class
new file mode 100644
index 0000000..b4aaa04
Binary files /dev/null and b/out/production/A079/gui/ppms$250.class differ
diff --git a/out/production/A079/gui/ppms$251.class b/out/production/A079/gui/ppms$251.class
new file mode 100644
index 0000000..845c5a0
Binary files /dev/null and b/out/production/A079/gui/ppms$251.class differ
diff --git a/out/production/A079/gui/ppms$252.class b/out/production/A079/gui/ppms$252.class
new file mode 100644
index 0000000..8a68cd2
Binary files /dev/null and b/out/production/A079/gui/ppms$252.class differ
diff --git a/out/production/A079/gui/ppms$253.class b/out/production/A079/gui/ppms$253.class
new file mode 100644
index 0000000..2a6bf80
Binary files /dev/null and b/out/production/A079/gui/ppms$253.class differ
diff --git a/out/production/A079/gui/ppms$254.class b/out/production/A079/gui/ppms$254.class
new file mode 100644
index 0000000..e2d29ef
Binary files /dev/null and b/out/production/A079/gui/ppms$254.class differ
diff --git a/out/production/A079/gui/ppms$255.class b/out/production/A079/gui/ppms$255.class
new file mode 100644
index 0000000..3dc8ca0
Binary files /dev/null and b/out/production/A079/gui/ppms$255.class differ
diff --git a/out/production/A079/gui/ppms$256.class b/out/production/A079/gui/ppms$256.class
new file mode 100644
index 0000000..3749c4e
Binary files /dev/null and b/out/production/A079/gui/ppms$256.class differ
diff --git a/out/production/A079/gui/ppms$257.class b/out/production/A079/gui/ppms$257.class
new file mode 100644
index 0000000..3387b1a
Binary files /dev/null and b/out/production/A079/gui/ppms$257.class differ
diff --git a/out/production/A079/gui/ppms$258.class b/out/production/A079/gui/ppms$258.class
new file mode 100644
index 0000000..4fe36b9
Binary files /dev/null and b/out/production/A079/gui/ppms$258.class differ
diff --git a/out/production/A079/gui/ppms$259.class b/out/production/A079/gui/ppms$259.class
new file mode 100644
index 0000000..6ad343e
Binary files /dev/null and b/out/production/A079/gui/ppms$259.class differ
diff --git a/out/production/A079/gui/ppms$26.class b/out/production/A079/gui/ppms$26.class
new file mode 100644
index 0000000..2a096bc
Binary files /dev/null and b/out/production/A079/gui/ppms$26.class differ
diff --git a/out/production/A079/gui/ppms$260.class b/out/production/A079/gui/ppms$260.class
new file mode 100644
index 0000000..6150f07
Binary files /dev/null and b/out/production/A079/gui/ppms$260.class differ
diff --git a/out/production/A079/gui/ppms$261.class b/out/production/A079/gui/ppms$261.class
new file mode 100644
index 0000000..2d96eb8
Binary files /dev/null and b/out/production/A079/gui/ppms$261.class differ
diff --git a/out/production/A079/gui/ppms$262.class b/out/production/A079/gui/ppms$262.class
new file mode 100644
index 0000000..de7ada2
Binary files /dev/null and b/out/production/A079/gui/ppms$262.class differ
diff --git a/out/production/A079/gui/ppms$263.class b/out/production/A079/gui/ppms$263.class
new file mode 100644
index 0000000..8789f37
Binary files /dev/null and b/out/production/A079/gui/ppms$263.class differ
diff --git a/out/production/A079/gui/ppms$264.class b/out/production/A079/gui/ppms$264.class
new file mode 100644
index 0000000..c73cfbc
Binary files /dev/null and b/out/production/A079/gui/ppms$264.class differ
diff --git a/out/production/A079/gui/ppms$265.class b/out/production/A079/gui/ppms$265.class
new file mode 100644
index 0000000..c3ca532
Binary files /dev/null and b/out/production/A079/gui/ppms$265.class differ
diff --git a/out/production/A079/gui/ppms$266.class b/out/production/A079/gui/ppms$266.class
new file mode 100644
index 0000000..faf5900
Binary files /dev/null and b/out/production/A079/gui/ppms$266.class differ
diff --git a/out/production/A079/gui/ppms$267.class b/out/production/A079/gui/ppms$267.class
new file mode 100644
index 0000000..7e097be
Binary files /dev/null and b/out/production/A079/gui/ppms$267.class differ
diff --git a/out/production/A079/gui/ppms$268.class b/out/production/A079/gui/ppms$268.class
new file mode 100644
index 0000000..7e6989c
Binary files /dev/null and b/out/production/A079/gui/ppms$268.class differ
diff --git a/out/production/A079/gui/ppms$269.class b/out/production/A079/gui/ppms$269.class
new file mode 100644
index 0000000..98bbf86
Binary files /dev/null and b/out/production/A079/gui/ppms$269.class differ
diff --git a/out/production/A079/gui/ppms$27.class b/out/production/A079/gui/ppms$27.class
new file mode 100644
index 0000000..32b593f
Binary files /dev/null and b/out/production/A079/gui/ppms$27.class differ
diff --git a/out/production/A079/gui/ppms$270.class b/out/production/A079/gui/ppms$270.class
new file mode 100644
index 0000000..63193f3
Binary files /dev/null and b/out/production/A079/gui/ppms$270.class differ
diff --git a/out/production/A079/gui/ppms$271.class b/out/production/A079/gui/ppms$271.class
new file mode 100644
index 0000000..8857063
Binary files /dev/null and b/out/production/A079/gui/ppms$271.class differ
diff --git a/out/production/A079/gui/ppms$272.class b/out/production/A079/gui/ppms$272.class
new file mode 100644
index 0000000..fcaee2f
Binary files /dev/null and b/out/production/A079/gui/ppms$272.class differ
diff --git a/out/production/A079/gui/ppms$273.class b/out/production/A079/gui/ppms$273.class
new file mode 100644
index 0000000..5a783c6
Binary files /dev/null and b/out/production/A079/gui/ppms$273.class differ
diff --git a/out/production/A079/gui/ppms$274.class b/out/production/A079/gui/ppms$274.class
new file mode 100644
index 0000000..9f20e39
Binary files /dev/null and b/out/production/A079/gui/ppms$274.class differ
diff --git a/out/production/A079/gui/ppms$275.class b/out/production/A079/gui/ppms$275.class
new file mode 100644
index 0000000..0234644
Binary files /dev/null and b/out/production/A079/gui/ppms$275.class differ
diff --git a/out/production/A079/gui/ppms$276.class b/out/production/A079/gui/ppms$276.class
new file mode 100644
index 0000000..7500f4c
Binary files /dev/null and b/out/production/A079/gui/ppms$276.class differ
diff --git a/out/production/A079/gui/ppms$277.class b/out/production/A079/gui/ppms$277.class
new file mode 100644
index 0000000..69fdd73
Binary files /dev/null and b/out/production/A079/gui/ppms$277.class differ
diff --git a/out/production/A079/gui/ppms$278.class b/out/production/A079/gui/ppms$278.class
new file mode 100644
index 0000000..1e2ba06
Binary files /dev/null and b/out/production/A079/gui/ppms$278.class differ
diff --git a/out/production/A079/gui/ppms$279.class b/out/production/A079/gui/ppms$279.class
new file mode 100644
index 0000000..9db7c2f
Binary files /dev/null and b/out/production/A079/gui/ppms$279.class differ
diff --git a/out/production/A079/gui/ppms$28.class b/out/production/A079/gui/ppms$28.class
new file mode 100644
index 0000000..d0c2b4f
Binary files /dev/null and b/out/production/A079/gui/ppms$28.class differ
diff --git a/out/production/A079/gui/ppms$280.class b/out/production/A079/gui/ppms$280.class
new file mode 100644
index 0000000..abfa000
Binary files /dev/null and b/out/production/A079/gui/ppms$280.class differ
diff --git a/out/production/A079/gui/ppms$281.class b/out/production/A079/gui/ppms$281.class
new file mode 100644
index 0000000..6aed200
Binary files /dev/null and b/out/production/A079/gui/ppms$281.class differ
diff --git a/out/production/A079/gui/ppms$282.class b/out/production/A079/gui/ppms$282.class
new file mode 100644
index 0000000..7324567
Binary files /dev/null and b/out/production/A079/gui/ppms$282.class differ
diff --git a/out/production/A079/gui/ppms$283.class b/out/production/A079/gui/ppms$283.class
new file mode 100644
index 0000000..c084cec
Binary files /dev/null and b/out/production/A079/gui/ppms$283.class differ
diff --git a/out/production/A079/gui/ppms$284.class b/out/production/A079/gui/ppms$284.class
new file mode 100644
index 0000000..dc51685
Binary files /dev/null and b/out/production/A079/gui/ppms$284.class differ
diff --git a/out/production/A079/gui/ppms$285.class b/out/production/A079/gui/ppms$285.class
new file mode 100644
index 0000000..6f44dec
Binary files /dev/null and b/out/production/A079/gui/ppms$285.class differ
diff --git a/out/production/A079/gui/ppms$286.class b/out/production/A079/gui/ppms$286.class
new file mode 100644
index 0000000..e05c546
Binary files /dev/null and b/out/production/A079/gui/ppms$286.class differ
diff --git a/out/production/A079/gui/ppms$287.class b/out/production/A079/gui/ppms$287.class
new file mode 100644
index 0000000..3304078
Binary files /dev/null and b/out/production/A079/gui/ppms$287.class differ
diff --git a/out/production/A079/gui/ppms$288.class b/out/production/A079/gui/ppms$288.class
new file mode 100644
index 0000000..e6afdf0
Binary files /dev/null and b/out/production/A079/gui/ppms$288.class differ
diff --git a/out/production/A079/gui/ppms$289.class b/out/production/A079/gui/ppms$289.class
new file mode 100644
index 0000000..1db04a2
Binary files /dev/null and b/out/production/A079/gui/ppms$289.class differ
diff --git a/out/production/A079/gui/ppms$29.class b/out/production/A079/gui/ppms$29.class
new file mode 100644
index 0000000..d3ba7ef
Binary files /dev/null and b/out/production/A079/gui/ppms$29.class differ
diff --git a/out/production/A079/gui/ppms$290.class b/out/production/A079/gui/ppms$290.class
new file mode 100644
index 0000000..77b8ef2
Binary files /dev/null and b/out/production/A079/gui/ppms$290.class differ
diff --git a/out/production/A079/gui/ppms$291.class b/out/production/A079/gui/ppms$291.class
new file mode 100644
index 0000000..8eadbaa
Binary files /dev/null and b/out/production/A079/gui/ppms$291.class differ
diff --git a/out/production/A079/gui/ppms$292.class b/out/production/A079/gui/ppms$292.class
new file mode 100644
index 0000000..378a42e
Binary files /dev/null and b/out/production/A079/gui/ppms$292.class differ
diff --git a/out/production/A079/gui/ppms$293.class b/out/production/A079/gui/ppms$293.class
new file mode 100644
index 0000000..c82b500
Binary files /dev/null and b/out/production/A079/gui/ppms$293.class differ
diff --git a/out/production/A079/gui/ppms$294.class b/out/production/A079/gui/ppms$294.class
new file mode 100644
index 0000000..eb35219
Binary files /dev/null and b/out/production/A079/gui/ppms$294.class differ
diff --git a/out/production/A079/gui/ppms$295.class b/out/production/A079/gui/ppms$295.class
new file mode 100644
index 0000000..c4d4a20
Binary files /dev/null and b/out/production/A079/gui/ppms$295.class differ
diff --git a/out/production/A079/gui/ppms$296.class b/out/production/A079/gui/ppms$296.class
new file mode 100644
index 0000000..35c466c
Binary files /dev/null and b/out/production/A079/gui/ppms$296.class differ
diff --git a/out/production/A079/gui/ppms$297.class b/out/production/A079/gui/ppms$297.class
new file mode 100644
index 0000000..eb880bc
Binary files /dev/null and b/out/production/A079/gui/ppms$297.class differ
diff --git a/out/production/A079/gui/ppms$298.class b/out/production/A079/gui/ppms$298.class
new file mode 100644
index 0000000..58f1469
Binary files /dev/null and b/out/production/A079/gui/ppms$298.class differ
diff --git a/out/production/A079/gui/ppms$299.class b/out/production/A079/gui/ppms$299.class
new file mode 100644
index 0000000..d975414
Binary files /dev/null and b/out/production/A079/gui/ppms$299.class differ
diff --git a/out/production/A079/gui/ppms$3.class b/out/production/A079/gui/ppms$3.class
new file mode 100644
index 0000000..0171a88
Binary files /dev/null and b/out/production/A079/gui/ppms$3.class differ
diff --git a/out/production/A079/gui/ppms$30.class b/out/production/A079/gui/ppms$30.class
new file mode 100644
index 0000000..f85e891
Binary files /dev/null and b/out/production/A079/gui/ppms$30.class differ
diff --git a/out/production/A079/gui/ppms$300.class b/out/production/A079/gui/ppms$300.class
new file mode 100644
index 0000000..58e77b3
Binary files /dev/null and b/out/production/A079/gui/ppms$300.class differ
diff --git a/out/production/A079/gui/ppms$301.class b/out/production/A079/gui/ppms$301.class
new file mode 100644
index 0000000..679eae5
Binary files /dev/null and b/out/production/A079/gui/ppms$301.class differ
diff --git a/out/production/A079/gui/ppms$302.class b/out/production/A079/gui/ppms$302.class
new file mode 100644
index 0000000..eb808db
Binary files /dev/null and b/out/production/A079/gui/ppms$302.class differ
diff --git a/out/production/A079/gui/ppms$303.class b/out/production/A079/gui/ppms$303.class
new file mode 100644
index 0000000..f71e95f
Binary files /dev/null and b/out/production/A079/gui/ppms$303.class differ
diff --git a/out/production/A079/gui/ppms$304.class b/out/production/A079/gui/ppms$304.class
new file mode 100644
index 0000000..fbae368
Binary files /dev/null and b/out/production/A079/gui/ppms$304.class differ
diff --git a/out/production/A079/gui/ppms$305.class b/out/production/A079/gui/ppms$305.class
new file mode 100644
index 0000000..8d8d189
Binary files /dev/null and b/out/production/A079/gui/ppms$305.class differ
diff --git a/out/production/A079/gui/ppms$306.class b/out/production/A079/gui/ppms$306.class
new file mode 100644
index 0000000..81ceeb9
Binary files /dev/null and b/out/production/A079/gui/ppms$306.class differ
diff --git a/out/production/A079/gui/ppms$307.class b/out/production/A079/gui/ppms$307.class
new file mode 100644
index 0000000..bba615a
Binary files /dev/null and b/out/production/A079/gui/ppms$307.class differ
diff --git a/out/production/A079/gui/ppms$308.class b/out/production/A079/gui/ppms$308.class
new file mode 100644
index 0000000..3b0180e
Binary files /dev/null and b/out/production/A079/gui/ppms$308.class differ
diff --git a/out/production/A079/gui/ppms$309.class b/out/production/A079/gui/ppms$309.class
new file mode 100644
index 0000000..60e28a0
Binary files /dev/null and b/out/production/A079/gui/ppms$309.class differ
diff --git a/out/production/A079/gui/ppms$31.class b/out/production/A079/gui/ppms$31.class
new file mode 100644
index 0000000..9bf41a8
Binary files /dev/null and b/out/production/A079/gui/ppms$31.class differ
diff --git a/out/production/A079/gui/ppms$310.class b/out/production/A079/gui/ppms$310.class
new file mode 100644
index 0000000..5e26a67
Binary files /dev/null and b/out/production/A079/gui/ppms$310.class differ
diff --git a/out/production/A079/gui/ppms$311.class b/out/production/A079/gui/ppms$311.class
new file mode 100644
index 0000000..34363d3
Binary files /dev/null and b/out/production/A079/gui/ppms$311.class differ
diff --git a/out/production/A079/gui/ppms$312.class b/out/production/A079/gui/ppms$312.class
new file mode 100644
index 0000000..0851d2e
Binary files /dev/null and b/out/production/A079/gui/ppms$312.class differ
diff --git a/out/production/A079/gui/ppms$313.class b/out/production/A079/gui/ppms$313.class
new file mode 100644
index 0000000..17bc970
Binary files /dev/null and b/out/production/A079/gui/ppms$313.class differ
diff --git a/out/production/A079/gui/ppms$314.class b/out/production/A079/gui/ppms$314.class
new file mode 100644
index 0000000..a896bbc
Binary files /dev/null and b/out/production/A079/gui/ppms$314.class differ
diff --git a/out/production/A079/gui/ppms$315.class b/out/production/A079/gui/ppms$315.class
new file mode 100644
index 0000000..e0bd1fe
Binary files /dev/null and b/out/production/A079/gui/ppms$315.class differ
diff --git a/out/production/A079/gui/ppms$316.class b/out/production/A079/gui/ppms$316.class
new file mode 100644
index 0000000..40c09ab
Binary files /dev/null and b/out/production/A079/gui/ppms$316.class differ
diff --git a/out/production/A079/gui/ppms$317.class b/out/production/A079/gui/ppms$317.class
new file mode 100644
index 0000000..2c94655
Binary files /dev/null and b/out/production/A079/gui/ppms$317.class differ
diff --git a/out/production/A079/gui/ppms$318.class b/out/production/A079/gui/ppms$318.class
new file mode 100644
index 0000000..e840fa8
Binary files /dev/null and b/out/production/A079/gui/ppms$318.class differ
diff --git a/out/production/A079/gui/ppms$319.class b/out/production/A079/gui/ppms$319.class
new file mode 100644
index 0000000..a51e53a
Binary files /dev/null and b/out/production/A079/gui/ppms$319.class differ
diff --git a/out/production/A079/gui/ppms$32.class b/out/production/A079/gui/ppms$32.class
new file mode 100644
index 0000000..5dedacb
Binary files /dev/null and b/out/production/A079/gui/ppms$32.class differ
diff --git a/out/production/A079/gui/ppms$320.class b/out/production/A079/gui/ppms$320.class
new file mode 100644
index 0000000..2b90acd
Binary files /dev/null and b/out/production/A079/gui/ppms$320.class differ
diff --git a/out/production/A079/gui/ppms$321.class b/out/production/A079/gui/ppms$321.class
new file mode 100644
index 0000000..33672c4
Binary files /dev/null and b/out/production/A079/gui/ppms$321.class differ
diff --git a/out/production/A079/gui/ppms$322.class b/out/production/A079/gui/ppms$322.class
new file mode 100644
index 0000000..28f41cc
Binary files /dev/null and b/out/production/A079/gui/ppms$322.class differ
diff --git a/out/production/A079/gui/ppms$323.class b/out/production/A079/gui/ppms$323.class
new file mode 100644
index 0000000..da8cbe2
Binary files /dev/null and b/out/production/A079/gui/ppms$323.class differ
diff --git a/out/production/A079/gui/ppms$324.class b/out/production/A079/gui/ppms$324.class
new file mode 100644
index 0000000..95d0c49
Binary files /dev/null and b/out/production/A079/gui/ppms$324.class differ
diff --git a/out/production/A079/gui/ppms$325.class b/out/production/A079/gui/ppms$325.class
new file mode 100644
index 0000000..31db832
Binary files /dev/null and b/out/production/A079/gui/ppms$325.class differ
diff --git a/out/production/A079/gui/ppms$326.class b/out/production/A079/gui/ppms$326.class
new file mode 100644
index 0000000..a1c8598
Binary files /dev/null and b/out/production/A079/gui/ppms$326.class differ
diff --git a/out/production/A079/gui/ppms$327.class b/out/production/A079/gui/ppms$327.class
new file mode 100644
index 0000000..a14216e
Binary files /dev/null and b/out/production/A079/gui/ppms$327.class differ
diff --git a/out/production/A079/gui/ppms$328.class b/out/production/A079/gui/ppms$328.class
new file mode 100644
index 0000000..e46e5f3
Binary files /dev/null and b/out/production/A079/gui/ppms$328.class differ
diff --git a/out/production/A079/gui/ppms$329.class b/out/production/A079/gui/ppms$329.class
new file mode 100644
index 0000000..b07323e
Binary files /dev/null and b/out/production/A079/gui/ppms$329.class differ
diff --git a/out/production/A079/gui/ppms$33.class b/out/production/A079/gui/ppms$33.class
new file mode 100644
index 0000000..3d7fda0
Binary files /dev/null and b/out/production/A079/gui/ppms$33.class differ
diff --git a/out/production/A079/gui/ppms$330.class b/out/production/A079/gui/ppms$330.class
new file mode 100644
index 0000000..89f2fae
Binary files /dev/null and b/out/production/A079/gui/ppms$330.class differ
diff --git a/out/production/A079/gui/ppms$331.class b/out/production/A079/gui/ppms$331.class
new file mode 100644
index 0000000..3b743d5
Binary files /dev/null and b/out/production/A079/gui/ppms$331.class differ
diff --git a/out/production/A079/gui/ppms$332.class b/out/production/A079/gui/ppms$332.class
new file mode 100644
index 0000000..96a0d23
Binary files /dev/null and b/out/production/A079/gui/ppms$332.class differ
diff --git a/out/production/A079/gui/ppms$333.class b/out/production/A079/gui/ppms$333.class
new file mode 100644
index 0000000..0affe79
Binary files /dev/null and b/out/production/A079/gui/ppms$333.class differ
diff --git a/out/production/A079/gui/ppms$334.class b/out/production/A079/gui/ppms$334.class
new file mode 100644
index 0000000..8d61734
Binary files /dev/null and b/out/production/A079/gui/ppms$334.class differ
diff --git a/out/production/A079/gui/ppms$335.class b/out/production/A079/gui/ppms$335.class
new file mode 100644
index 0000000..5a7ed70
Binary files /dev/null and b/out/production/A079/gui/ppms$335.class differ
diff --git a/out/production/A079/gui/ppms$336.class b/out/production/A079/gui/ppms$336.class
new file mode 100644
index 0000000..a8e3b7f
Binary files /dev/null and b/out/production/A079/gui/ppms$336.class differ
diff --git a/out/production/A079/gui/ppms$337.class b/out/production/A079/gui/ppms$337.class
new file mode 100644
index 0000000..85f3951
Binary files /dev/null and b/out/production/A079/gui/ppms$337.class differ
diff --git a/out/production/A079/gui/ppms$338.class b/out/production/A079/gui/ppms$338.class
new file mode 100644
index 0000000..df0bc98
Binary files /dev/null and b/out/production/A079/gui/ppms$338.class differ
diff --git a/out/production/A079/gui/ppms$339.class b/out/production/A079/gui/ppms$339.class
new file mode 100644
index 0000000..14ce489
Binary files /dev/null and b/out/production/A079/gui/ppms$339.class differ
diff --git a/out/production/A079/gui/ppms$34.class b/out/production/A079/gui/ppms$34.class
new file mode 100644
index 0000000..206b5e9
Binary files /dev/null and b/out/production/A079/gui/ppms$34.class differ
diff --git a/out/production/A079/gui/ppms$340.class b/out/production/A079/gui/ppms$340.class
new file mode 100644
index 0000000..1b3b170
Binary files /dev/null and b/out/production/A079/gui/ppms$340.class differ
diff --git a/out/production/A079/gui/ppms$341.class b/out/production/A079/gui/ppms$341.class
new file mode 100644
index 0000000..9c0b5b6
Binary files /dev/null and b/out/production/A079/gui/ppms$341.class differ
diff --git a/out/production/A079/gui/ppms$342.class b/out/production/A079/gui/ppms$342.class
new file mode 100644
index 0000000..e0cfa50
Binary files /dev/null and b/out/production/A079/gui/ppms$342.class differ
diff --git a/out/production/A079/gui/ppms$343.class b/out/production/A079/gui/ppms$343.class
new file mode 100644
index 0000000..1301115
Binary files /dev/null and b/out/production/A079/gui/ppms$343.class differ
diff --git a/out/production/A079/gui/ppms$344.class b/out/production/A079/gui/ppms$344.class
new file mode 100644
index 0000000..7a03fa2
Binary files /dev/null and b/out/production/A079/gui/ppms$344.class differ
diff --git a/out/production/A079/gui/ppms$345.class b/out/production/A079/gui/ppms$345.class
new file mode 100644
index 0000000..f6b0800
Binary files /dev/null and b/out/production/A079/gui/ppms$345.class differ
diff --git a/out/production/A079/gui/ppms$346.class b/out/production/A079/gui/ppms$346.class
new file mode 100644
index 0000000..91d91cb
Binary files /dev/null and b/out/production/A079/gui/ppms$346.class differ
diff --git a/out/production/A079/gui/ppms$347.class b/out/production/A079/gui/ppms$347.class
new file mode 100644
index 0000000..a90b2d6
Binary files /dev/null and b/out/production/A079/gui/ppms$347.class differ
diff --git a/out/production/A079/gui/ppms$348.class b/out/production/A079/gui/ppms$348.class
new file mode 100644
index 0000000..7b78c3a
Binary files /dev/null and b/out/production/A079/gui/ppms$348.class differ
diff --git a/out/production/A079/gui/ppms$349.class b/out/production/A079/gui/ppms$349.class
new file mode 100644
index 0000000..b67426c
Binary files /dev/null and b/out/production/A079/gui/ppms$349.class differ
diff --git a/out/production/A079/gui/ppms$35.class b/out/production/A079/gui/ppms$35.class
new file mode 100644
index 0000000..a10a1ad
Binary files /dev/null and b/out/production/A079/gui/ppms$35.class differ
diff --git a/out/production/A079/gui/ppms$350.class b/out/production/A079/gui/ppms$350.class
new file mode 100644
index 0000000..2691f81
Binary files /dev/null and b/out/production/A079/gui/ppms$350.class differ
diff --git a/out/production/A079/gui/ppms$351.class b/out/production/A079/gui/ppms$351.class
new file mode 100644
index 0000000..a4efb28
Binary files /dev/null and b/out/production/A079/gui/ppms$351.class differ
diff --git a/out/production/A079/gui/ppms$352.class b/out/production/A079/gui/ppms$352.class
new file mode 100644
index 0000000..61ed430
Binary files /dev/null and b/out/production/A079/gui/ppms$352.class differ
diff --git a/out/production/A079/gui/ppms$353.class b/out/production/A079/gui/ppms$353.class
new file mode 100644
index 0000000..39e86be
Binary files /dev/null and b/out/production/A079/gui/ppms$353.class differ
diff --git a/out/production/A079/gui/ppms$354.class b/out/production/A079/gui/ppms$354.class
new file mode 100644
index 0000000..2113367
Binary files /dev/null and b/out/production/A079/gui/ppms$354.class differ
diff --git a/out/production/A079/gui/ppms$355.class b/out/production/A079/gui/ppms$355.class
new file mode 100644
index 0000000..b97f00c
Binary files /dev/null and b/out/production/A079/gui/ppms$355.class differ
diff --git a/out/production/A079/gui/ppms$356.class b/out/production/A079/gui/ppms$356.class
new file mode 100644
index 0000000..004b83a
Binary files /dev/null and b/out/production/A079/gui/ppms$356.class differ
diff --git a/out/production/A079/gui/ppms$357.class b/out/production/A079/gui/ppms$357.class
new file mode 100644
index 0000000..275cc1c
Binary files /dev/null and b/out/production/A079/gui/ppms$357.class differ
diff --git a/out/production/A079/gui/ppms$358.class b/out/production/A079/gui/ppms$358.class
new file mode 100644
index 0000000..df2a2f7
Binary files /dev/null and b/out/production/A079/gui/ppms$358.class differ
diff --git a/out/production/A079/gui/ppms$359.class b/out/production/A079/gui/ppms$359.class
new file mode 100644
index 0000000..557ac16
Binary files /dev/null and b/out/production/A079/gui/ppms$359.class differ
diff --git a/out/production/A079/gui/ppms$36.class b/out/production/A079/gui/ppms$36.class
new file mode 100644
index 0000000..c4f8d00
Binary files /dev/null and b/out/production/A079/gui/ppms$36.class differ
diff --git a/out/production/A079/gui/ppms$360.class b/out/production/A079/gui/ppms$360.class
new file mode 100644
index 0000000..409d675
Binary files /dev/null and b/out/production/A079/gui/ppms$360.class differ
diff --git a/out/production/A079/gui/ppms$361.class b/out/production/A079/gui/ppms$361.class
new file mode 100644
index 0000000..c4bd539
Binary files /dev/null and b/out/production/A079/gui/ppms$361.class differ
diff --git a/out/production/A079/gui/ppms$362.class b/out/production/A079/gui/ppms$362.class
new file mode 100644
index 0000000..d601841
Binary files /dev/null and b/out/production/A079/gui/ppms$362.class differ
diff --git a/out/production/A079/gui/ppms$363.class b/out/production/A079/gui/ppms$363.class
new file mode 100644
index 0000000..727f8c0
Binary files /dev/null and b/out/production/A079/gui/ppms$363.class differ
diff --git a/out/production/A079/gui/ppms$364.class b/out/production/A079/gui/ppms$364.class
new file mode 100644
index 0000000..640e76b
Binary files /dev/null and b/out/production/A079/gui/ppms$364.class differ
diff --git a/out/production/A079/gui/ppms$365.class b/out/production/A079/gui/ppms$365.class
new file mode 100644
index 0000000..d73a05d
Binary files /dev/null and b/out/production/A079/gui/ppms$365.class differ
diff --git a/out/production/A079/gui/ppms$366.class b/out/production/A079/gui/ppms$366.class
new file mode 100644
index 0000000..0989fa0
Binary files /dev/null and b/out/production/A079/gui/ppms$366.class differ
diff --git a/out/production/A079/gui/ppms$367.class b/out/production/A079/gui/ppms$367.class
new file mode 100644
index 0000000..8802d3b
Binary files /dev/null and b/out/production/A079/gui/ppms$367.class differ
diff --git a/out/production/A079/gui/ppms$368.class b/out/production/A079/gui/ppms$368.class
new file mode 100644
index 0000000..41590a1
Binary files /dev/null and b/out/production/A079/gui/ppms$368.class differ
diff --git a/out/production/A079/gui/ppms$369.class b/out/production/A079/gui/ppms$369.class
new file mode 100644
index 0000000..af7650b
Binary files /dev/null and b/out/production/A079/gui/ppms$369.class differ
diff --git a/out/production/A079/gui/ppms$37.class b/out/production/A079/gui/ppms$37.class
new file mode 100644
index 0000000..5709288
Binary files /dev/null and b/out/production/A079/gui/ppms$37.class differ
diff --git a/out/production/A079/gui/ppms$370.class b/out/production/A079/gui/ppms$370.class
new file mode 100644
index 0000000..ef8e1f6
Binary files /dev/null and b/out/production/A079/gui/ppms$370.class differ
diff --git a/out/production/A079/gui/ppms$371.class b/out/production/A079/gui/ppms$371.class
new file mode 100644
index 0000000..032b719
Binary files /dev/null and b/out/production/A079/gui/ppms$371.class differ
diff --git a/out/production/A079/gui/ppms$372.class b/out/production/A079/gui/ppms$372.class
new file mode 100644
index 0000000..38107aa
Binary files /dev/null and b/out/production/A079/gui/ppms$372.class differ
diff --git a/out/production/A079/gui/ppms$373.class b/out/production/A079/gui/ppms$373.class
new file mode 100644
index 0000000..c20f26b
Binary files /dev/null and b/out/production/A079/gui/ppms$373.class differ
diff --git a/out/production/A079/gui/ppms$374.class b/out/production/A079/gui/ppms$374.class
new file mode 100644
index 0000000..66fc5e1
Binary files /dev/null and b/out/production/A079/gui/ppms$374.class differ
diff --git a/out/production/A079/gui/ppms$375.class b/out/production/A079/gui/ppms$375.class
new file mode 100644
index 0000000..0cda755
Binary files /dev/null and b/out/production/A079/gui/ppms$375.class differ
diff --git a/out/production/A079/gui/ppms$376.class b/out/production/A079/gui/ppms$376.class
new file mode 100644
index 0000000..995e50d
Binary files /dev/null and b/out/production/A079/gui/ppms$376.class differ
diff --git a/out/production/A079/gui/ppms$377.class b/out/production/A079/gui/ppms$377.class
new file mode 100644
index 0000000..4be7934
Binary files /dev/null and b/out/production/A079/gui/ppms$377.class differ
diff --git a/out/production/A079/gui/ppms$378.class b/out/production/A079/gui/ppms$378.class
new file mode 100644
index 0000000..d86ef02
Binary files /dev/null and b/out/production/A079/gui/ppms$378.class differ
diff --git a/out/production/A079/gui/ppms$379.class b/out/production/A079/gui/ppms$379.class
new file mode 100644
index 0000000..f568cb1
Binary files /dev/null and b/out/production/A079/gui/ppms$379.class differ
diff --git a/out/production/A079/gui/ppms$38.class b/out/production/A079/gui/ppms$38.class
new file mode 100644
index 0000000..d4ebaed
Binary files /dev/null and b/out/production/A079/gui/ppms$38.class differ
diff --git a/out/production/A079/gui/ppms$380.class b/out/production/A079/gui/ppms$380.class
new file mode 100644
index 0000000..b56e7fd
Binary files /dev/null and b/out/production/A079/gui/ppms$380.class differ
diff --git a/out/production/A079/gui/ppms$381.class b/out/production/A079/gui/ppms$381.class
new file mode 100644
index 0000000..32c6a54
Binary files /dev/null and b/out/production/A079/gui/ppms$381.class differ
diff --git a/out/production/A079/gui/ppms$382.class b/out/production/A079/gui/ppms$382.class
new file mode 100644
index 0000000..bdcdab3
Binary files /dev/null and b/out/production/A079/gui/ppms$382.class differ
diff --git a/out/production/A079/gui/ppms$383.class b/out/production/A079/gui/ppms$383.class
new file mode 100644
index 0000000..dafa33a
Binary files /dev/null and b/out/production/A079/gui/ppms$383.class differ
diff --git a/out/production/A079/gui/ppms$384.class b/out/production/A079/gui/ppms$384.class
new file mode 100644
index 0000000..518f57f
Binary files /dev/null and b/out/production/A079/gui/ppms$384.class differ
diff --git a/out/production/A079/gui/ppms$385.class b/out/production/A079/gui/ppms$385.class
new file mode 100644
index 0000000..9c8e184
Binary files /dev/null and b/out/production/A079/gui/ppms$385.class differ
diff --git a/out/production/A079/gui/ppms$386.class b/out/production/A079/gui/ppms$386.class
new file mode 100644
index 0000000..20db082
Binary files /dev/null and b/out/production/A079/gui/ppms$386.class differ
diff --git a/out/production/A079/gui/ppms$387.class b/out/production/A079/gui/ppms$387.class
new file mode 100644
index 0000000..baacaf1
Binary files /dev/null and b/out/production/A079/gui/ppms$387.class differ
diff --git a/out/production/A079/gui/ppms$388.class b/out/production/A079/gui/ppms$388.class
new file mode 100644
index 0000000..041e59b
Binary files /dev/null and b/out/production/A079/gui/ppms$388.class differ
diff --git a/out/production/A079/gui/ppms$389.class b/out/production/A079/gui/ppms$389.class
new file mode 100644
index 0000000..ca4afb9
Binary files /dev/null and b/out/production/A079/gui/ppms$389.class differ
diff --git a/out/production/A079/gui/ppms$39.class b/out/production/A079/gui/ppms$39.class
new file mode 100644
index 0000000..373bddd
Binary files /dev/null and b/out/production/A079/gui/ppms$39.class differ
diff --git a/out/production/A079/gui/ppms$390.class b/out/production/A079/gui/ppms$390.class
new file mode 100644
index 0000000..433589f
Binary files /dev/null and b/out/production/A079/gui/ppms$390.class differ
diff --git a/out/production/A079/gui/ppms$391.class b/out/production/A079/gui/ppms$391.class
new file mode 100644
index 0000000..6aa57b2
Binary files /dev/null and b/out/production/A079/gui/ppms$391.class differ
diff --git a/out/production/A079/gui/ppms$392.class b/out/production/A079/gui/ppms$392.class
new file mode 100644
index 0000000..9a480cb
Binary files /dev/null and b/out/production/A079/gui/ppms$392.class differ
diff --git a/out/production/A079/gui/ppms$393.class b/out/production/A079/gui/ppms$393.class
new file mode 100644
index 0000000..ee6fa06
Binary files /dev/null and b/out/production/A079/gui/ppms$393.class differ
diff --git a/out/production/A079/gui/ppms$394.class b/out/production/A079/gui/ppms$394.class
new file mode 100644
index 0000000..5645ad6
Binary files /dev/null and b/out/production/A079/gui/ppms$394.class differ
diff --git a/out/production/A079/gui/ppms$395.class b/out/production/A079/gui/ppms$395.class
new file mode 100644
index 0000000..0d9cd65
Binary files /dev/null and b/out/production/A079/gui/ppms$395.class differ
diff --git a/out/production/A079/gui/ppms$396.class b/out/production/A079/gui/ppms$396.class
new file mode 100644
index 0000000..d4f5d9e
Binary files /dev/null and b/out/production/A079/gui/ppms$396.class differ
diff --git a/out/production/A079/gui/ppms$397.class b/out/production/A079/gui/ppms$397.class
new file mode 100644
index 0000000..2377505
Binary files /dev/null and b/out/production/A079/gui/ppms$397.class differ
diff --git a/out/production/A079/gui/ppms$398.class b/out/production/A079/gui/ppms$398.class
new file mode 100644
index 0000000..6e7fae6
Binary files /dev/null and b/out/production/A079/gui/ppms$398.class differ
diff --git a/out/production/A079/gui/ppms$399.class b/out/production/A079/gui/ppms$399.class
new file mode 100644
index 0000000..905bc8c
Binary files /dev/null and b/out/production/A079/gui/ppms$399.class differ
diff --git a/out/production/A079/gui/ppms$4.class b/out/production/A079/gui/ppms$4.class
new file mode 100644
index 0000000..a490674
Binary files /dev/null and b/out/production/A079/gui/ppms$4.class differ
diff --git a/out/production/A079/gui/ppms$40.class b/out/production/A079/gui/ppms$40.class
new file mode 100644
index 0000000..3fadbad
Binary files /dev/null and b/out/production/A079/gui/ppms$40.class differ
diff --git a/out/production/A079/gui/ppms$400.class b/out/production/A079/gui/ppms$400.class
new file mode 100644
index 0000000..5e83afb
Binary files /dev/null and b/out/production/A079/gui/ppms$400.class differ
diff --git a/out/production/A079/gui/ppms$401.class b/out/production/A079/gui/ppms$401.class
new file mode 100644
index 0000000..1c94fd1
Binary files /dev/null and b/out/production/A079/gui/ppms$401.class differ
diff --git a/out/production/A079/gui/ppms$402.class b/out/production/A079/gui/ppms$402.class
new file mode 100644
index 0000000..85239ae
Binary files /dev/null and b/out/production/A079/gui/ppms$402.class differ
diff --git a/out/production/A079/gui/ppms$403.class b/out/production/A079/gui/ppms$403.class
new file mode 100644
index 0000000..602f293
Binary files /dev/null and b/out/production/A079/gui/ppms$403.class differ
diff --git a/out/production/A079/gui/ppms$404.class b/out/production/A079/gui/ppms$404.class
new file mode 100644
index 0000000..0267d54
Binary files /dev/null and b/out/production/A079/gui/ppms$404.class differ
diff --git a/out/production/A079/gui/ppms$405.class b/out/production/A079/gui/ppms$405.class
new file mode 100644
index 0000000..765b66c
Binary files /dev/null and b/out/production/A079/gui/ppms$405.class differ
diff --git a/out/production/A079/gui/ppms$406.class b/out/production/A079/gui/ppms$406.class
new file mode 100644
index 0000000..41c73cc
Binary files /dev/null and b/out/production/A079/gui/ppms$406.class differ
diff --git a/out/production/A079/gui/ppms$407.class b/out/production/A079/gui/ppms$407.class
new file mode 100644
index 0000000..d94ea9e
Binary files /dev/null and b/out/production/A079/gui/ppms$407.class differ
diff --git a/out/production/A079/gui/ppms$408.class b/out/production/A079/gui/ppms$408.class
new file mode 100644
index 0000000..b18c182
Binary files /dev/null and b/out/production/A079/gui/ppms$408.class differ
diff --git a/out/production/A079/gui/ppms$409.class b/out/production/A079/gui/ppms$409.class
new file mode 100644
index 0000000..04c0d48
Binary files /dev/null and b/out/production/A079/gui/ppms$409.class differ
diff --git a/out/production/A079/gui/ppms$41.class b/out/production/A079/gui/ppms$41.class
new file mode 100644
index 0000000..22713eb
Binary files /dev/null and b/out/production/A079/gui/ppms$41.class differ
diff --git a/out/production/A079/gui/ppms$410.class b/out/production/A079/gui/ppms$410.class
new file mode 100644
index 0000000..5b0d107
Binary files /dev/null and b/out/production/A079/gui/ppms$410.class differ
diff --git a/out/production/A079/gui/ppms$411.class b/out/production/A079/gui/ppms$411.class
new file mode 100644
index 0000000..f3cf082
Binary files /dev/null and b/out/production/A079/gui/ppms$411.class differ
diff --git a/out/production/A079/gui/ppms$412.class b/out/production/A079/gui/ppms$412.class
new file mode 100644
index 0000000..48d50d5
Binary files /dev/null and b/out/production/A079/gui/ppms$412.class differ
diff --git a/out/production/A079/gui/ppms$413.class b/out/production/A079/gui/ppms$413.class
new file mode 100644
index 0000000..a4d34c9
Binary files /dev/null and b/out/production/A079/gui/ppms$413.class differ
diff --git a/out/production/A079/gui/ppms$414.class b/out/production/A079/gui/ppms$414.class
new file mode 100644
index 0000000..fa736c1
Binary files /dev/null and b/out/production/A079/gui/ppms$414.class differ
diff --git a/out/production/A079/gui/ppms$415.class b/out/production/A079/gui/ppms$415.class
new file mode 100644
index 0000000..97d0863
Binary files /dev/null and b/out/production/A079/gui/ppms$415.class differ
diff --git a/out/production/A079/gui/ppms$416.class b/out/production/A079/gui/ppms$416.class
new file mode 100644
index 0000000..2065d4f
Binary files /dev/null and b/out/production/A079/gui/ppms$416.class differ
diff --git a/out/production/A079/gui/ppms$417.class b/out/production/A079/gui/ppms$417.class
new file mode 100644
index 0000000..fbd302c
Binary files /dev/null and b/out/production/A079/gui/ppms$417.class differ
diff --git a/out/production/A079/gui/ppms$418.class b/out/production/A079/gui/ppms$418.class
new file mode 100644
index 0000000..fe7e569
Binary files /dev/null and b/out/production/A079/gui/ppms$418.class differ
diff --git a/out/production/A079/gui/ppms$419.class b/out/production/A079/gui/ppms$419.class
new file mode 100644
index 0000000..d5caf24
Binary files /dev/null and b/out/production/A079/gui/ppms$419.class differ
diff --git a/out/production/A079/gui/ppms$42.class b/out/production/A079/gui/ppms$42.class
new file mode 100644
index 0000000..182bd4f
Binary files /dev/null and b/out/production/A079/gui/ppms$42.class differ
diff --git a/out/production/A079/gui/ppms$420.class b/out/production/A079/gui/ppms$420.class
new file mode 100644
index 0000000..3ea1152
Binary files /dev/null and b/out/production/A079/gui/ppms$420.class differ
diff --git a/out/production/A079/gui/ppms$421.class b/out/production/A079/gui/ppms$421.class
new file mode 100644
index 0000000..752adb5
Binary files /dev/null and b/out/production/A079/gui/ppms$421.class differ
diff --git a/out/production/A079/gui/ppms$422.class b/out/production/A079/gui/ppms$422.class
new file mode 100644
index 0000000..570779b
Binary files /dev/null and b/out/production/A079/gui/ppms$422.class differ
diff --git a/out/production/A079/gui/ppms$423.class b/out/production/A079/gui/ppms$423.class
new file mode 100644
index 0000000..5bf6832
Binary files /dev/null and b/out/production/A079/gui/ppms$423.class differ
diff --git a/out/production/A079/gui/ppms$424.class b/out/production/A079/gui/ppms$424.class
new file mode 100644
index 0000000..73ed352
Binary files /dev/null and b/out/production/A079/gui/ppms$424.class differ
diff --git a/out/production/A079/gui/ppms$425.class b/out/production/A079/gui/ppms$425.class
new file mode 100644
index 0000000..d62e734
Binary files /dev/null and b/out/production/A079/gui/ppms$425.class differ
diff --git a/out/production/A079/gui/ppms$426.class b/out/production/A079/gui/ppms$426.class
new file mode 100644
index 0000000..52d6091
Binary files /dev/null and b/out/production/A079/gui/ppms$426.class differ
diff --git a/out/production/A079/gui/ppms$427.class b/out/production/A079/gui/ppms$427.class
new file mode 100644
index 0000000..733fd0b
Binary files /dev/null and b/out/production/A079/gui/ppms$427.class differ
diff --git a/out/production/A079/gui/ppms$428.class b/out/production/A079/gui/ppms$428.class
new file mode 100644
index 0000000..4fbf80b
Binary files /dev/null and b/out/production/A079/gui/ppms$428.class differ
diff --git a/out/production/A079/gui/ppms$429.class b/out/production/A079/gui/ppms$429.class
new file mode 100644
index 0000000..09d5fb8
Binary files /dev/null and b/out/production/A079/gui/ppms$429.class differ
diff --git a/out/production/A079/gui/ppms$43.class b/out/production/A079/gui/ppms$43.class
new file mode 100644
index 0000000..5a4aedb
Binary files /dev/null and b/out/production/A079/gui/ppms$43.class differ
diff --git a/out/production/A079/gui/ppms$430.class b/out/production/A079/gui/ppms$430.class
new file mode 100644
index 0000000..ded603a
Binary files /dev/null and b/out/production/A079/gui/ppms$430.class differ
diff --git a/out/production/A079/gui/ppms$431.class b/out/production/A079/gui/ppms$431.class
new file mode 100644
index 0000000..3de5e75
Binary files /dev/null and b/out/production/A079/gui/ppms$431.class differ
diff --git a/out/production/A079/gui/ppms$432.class b/out/production/A079/gui/ppms$432.class
new file mode 100644
index 0000000..011b244
Binary files /dev/null and b/out/production/A079/gui/ppms$432.class differ
diff --git a/out/production/A079/gui/ppms$433.class b/out/production/A079/gui/ppms$433.class
new file mode 100644
index 0000000..4977e11
Binary files /dev/null and b/out/production/A079/gui/ppms$433.class differ
diff --git a/out/production/A079/gui/ppms$434.class b/out/production/A079/gui/ppms$434.class
new file mode 100644
index 0000000..1ab9f0f
Binary files /dev/null and b/out/production/A079/gui/ppms$434.class differ
diff --git a/out/production/A079/gui/ppms$435.class b/out/production/A079/gui/ppms$435.class
new file mode 100644
index 0000000..5d80bc3
Binary files /dev/null and b/out/production/A079/gui/ppms$435.class differ
diff --git a/out/production/A079/gui/ppms$436.class b/out/production/A079/gui/ppms$436.class
new file mode 100644
index 0000000..e876668
Binary files /dev/null and b/out/production/A079/gui/ppms$436.class differ
diff --git a/out/production/A079/gui/ppms$44.class b/out/production/A079/gui/ppms$44.class
new file mode 100644
index 0000000..5762c26
Binary files /dev/null and b/out/production/A079/gui/ppms$44.class differ
diff --git a/out/production/A079/gui/ppms$45.class b/out/production/A079/gui/ppms$45.class
new file mode 100644
index 0000000..8360269
Binary files /dev/null and b/out/production/A079/gui/ppms$45.class differ
diff --git a/out/production/A079/gui/ppms$46.class b/out/production/A079/gui/ppms$46.class
new file mode 100644
index 0000000..90f592b
Binary files /dev/null and b/out/production/A079/gui/ppms$46.class differ
diff --git a/out/production/A079/gui/ppms$47.class b/out/production/A079/gui/ppms$47.class
new file mode 100644
index 0000000..4f07c87
Binary files /dev/null and b/out/production/A079/gui/ppms$47.class differ
diff --git a/out/production/A079/gui/ppms$48.class b/out/production/A079/gui/ppms$48.class
new file mode 100644
index 0000000..e061a9c
Binary files /dev/null and b/out/production/A079/gui/ppms$48.class differ
diff --git a/out/production/A079/gui/ppms$49.class b/out/production/A079/gui/ppms$49.class
new file mode 100644
index 0000000..636422b
Binary files /dev/null and b/out/production/A079/gui/ppms$49.class differ
diff --git a/out/production/A079/gui/ppms$5.class b/out/production/A079/gui/ppms$5.class
new file mode 100644
index 0000000..49ac542
Binary files /dev/null and b/out/production/A079/gui/ppms$5.class differ
diff --git a/out/production/A079/gui/ppms$50.class b/out/production/A079/gui/ppms$50.class
new file mode 100644
index 0000000..14972a7
Binary files /dev/null and b/out/production/A079/gui/ppms$50.class differ
diff --git a/out/production/A079/gui/ppms$51.class b/out/production/A079/gui/ppms$51.class
new file mode 100644
index 0000000..ad42874
Binary files /dev/null and b/out/production/A079/gui/ppms$51.class differ
diff --git a/out/production/A079/gui/ppms$52.class b/out/production/A079/gui/ppms$52.class
new file mode 100644
index 0000000..17eebf5
Binary files /dev/null and b/out/production/A079/gui/ppms$52.class differ
diff --git a/out/production/A079/gui/ppms$53.class b/out/production/A079/gui/ppms$53.class
new file mode 100644
index 0000000..1a3e602
Binary files /dev/null and b/out/production/A079/gui/ppms$53.class differ
diff --git a/out/production/A079/gui/ppms$54.class b/out/production/A079/gui/ppms$54.class
new file mode 100644
index 0000000..deefcad
Binary files /dev/null and b/out/production/A079/gui/ppms$54.class differ
diff --git a/out/production/A079/gui/ppms$55.class b/out/production/A079/gui/ppms$55.class
new file mode 100644
index 0000000..42849f3
Binary files /dev/null and b/out/production/A079/gui/ppms$55.class differ
diff --git a/out/production/A079/gui/ppms$56.class b/out/production/A079/gui/ppms$56.class
new file mode 100644
index 0000000..cde73c4
Binary files /dev/null and b/out/production/A079/gui/ppms$56.class differ
diff --git a/out/production/A079/gui/ppms$57.class b/out/production/A079/gui/ppms$57.class
new file mode 100644
index 0000000..c51ef1d
Binary files /dev/null and b/out/production/A079/gui/ppms$57.class differ
diff --git a/out/production/A079/gui/ppms$58.class b/out/production/A079/gui/ppms$58.class
new file mode 100644
index 0000000..f5ff374
Binary files /dev/null and b/out/production/A079/gui/ppms$58.class differ
diff --git a/out/production/A079/gui/ppms$59.class b/out/production/A079/gui/ppms$59.class
new file mode 100644
index 0000000..554d876
Binary files /dev/null and b/out/production/A079/gui/ppms$59.class differ
diff --git a/out/production/A079/gui/ppms$6.class b/out/production/A079/gui/ppms$6.class
new file mode 100644
index 0000000..e3e4606
Binary files /dev/null and b/out/production/A079/gui/ppms$6.class differ
diff --git a/out/production/A079/gui/ppms$60.class b/out/production/A079/gui/ppms$60.class
new file mode 100644
index 0000000..21b1989
Binary files /dev/null and b/out/production/A079/gui/ppms$60.class differ
diff --git a/out/production/A079/gui/ppms$61.class b/out/production/A079/gui/ppms$61.class
new file mode 100644
index 0000000..0d24320
Binary files /dev/null and b/out/production/A079/gui/ppms$61.class differ
diff --git a/out/production/A079/gui/ppms$62.class b/out/production/A079/gui/ppms$62.class
new file mode 100644
index 0000000..c6e9d2f
Binary files /dev/null and b/out/production/A079/gui/ppms$62.class differ
diff --git a/out/production/A079/gui/ppms$63.class b/out/production/A079/gui/ppms$63.class
new file mode 100644
index 0000000..1235708
Binary files /dev/null and b/out/production/A079/gui/ppms$63.class differ
diff --git a/out/production/A079/gui/ppms$64.class b/out/production/A079/gui/ppms$64.class
new file mode 100644
index 0000000..750948b
Binary files /dev/null and b/out/production/A079/gui/ppms$64.class differ
diff --git a/out/production/A079/gui/ppms$65.class b/out/production/A079/gui/ppms$65.class
new file mode 100644
index 0000000..defd1ce
Binary files /dev/null and b/out/production/A079/gui/ppms$65.class differ
diff --git a/out/production/A079/gui/ppms$66.class b/out/production/A079/gui/ppms$66.class
new file mode 100644
index 0000000..d22fdea
Binary files /dev/null and b/out/production/A079/gui/ppms$66.class differ
diff --git a/out/production/A079/gui/ppms$67.class b/out/production/A079/gui/ppms$67.class
new file mode 100644
index 0000000..2c91ebe
Binary files /dev/null and b/out/production/A079/gui/ppms$67.class differ
diff --git a/out/production/A079/gui/ppms$68.class b/out/production/A079/gui/ppms$68.class
new file mode 100644
index 0000000..ea531f3
Binary files /dev/null and b/out/production/A079/gui/ppms$68.class differ
diff --git a/out/production/A079/gui/ppms$69.class b/out/production/A079/gui/ppms$69.class
new file mode 100644
index 0000000..f95c430
Binary files /dev/null and b/out/production/A079/gui/ppms$69.class differ
diff --git a/out/production/A079/gui/ppms$7.class b/out/production/A079/gui/ppms$7.class
new file mode 100644
index 0000000..b85a0a2
Binary files /dev/null and b/out/production/A079/gui/ppms$7.class differ
diff --git a/out/production/A079/gui/ppms$70.class b/out/production/A079/gui/ppms$70.class
new file mode 100644
index 0000000..94c87e6
Binary files /dev/null and b/out/production/A079/gui/ppms$70.class differ
diff --git a/out/production/A079/gui/ppms$71.class b/out/production/A079/gui/ppms$71.class
new file mode 100644
index 0000000..a74d4db
Binary files /dev/null and b/out/production/A079/gui/ppms$71.class differ
diff --git a/out/production/A079/gui/ppms$72.class b/out/production/A079/gui/ppms$72.class
new file mode 100644
index 0000000..c3076fb
Binary files /dev/null and b/out/production/A079/gui/ppms$72.class differ
diff --git a/out/production/A079/gui/ppms$73.class b/out/production/A079/gui/ppms$73.class
new file mode 100644
index 0000000..7bbaffa
Binary files /dev/null and b/out/production/A079/gui/ppms$73.class differ
diff --git a/out/production/A079/gui/ppms$74.class b/out/production/A079/gui/ppms$74.class
new file mode 100644
index 0000000..2033294
Binary files /dev/null and b/out/production/A079/gui/ppms$74.class differ
diff --git a/out/production/A079/gui/ppms$75.class b/out/production/A079/gui/ppms$75.class
new file mode 100644
index 0000000..42608a7
Binary files /dev/null and b/out/production/A079/gui/ppms$75.class differ
diff --git a/out/production/A079/gui/ppms$76.class b/out/production/A079/gui/ppms$76.class
new file mode 100644
index 0000000..46a6bf9
Binary files /dev/null and b/out/production/A079/gui/ppms$76.class differ
diff --git a/out/production/A079/gui/ppms$77.class b/out/production/A079/gui/ppms$77.class
new file mode 100644
index 0000000..a9339bc
Binary files /dev/null and b/out/production/A079/gui/ppms$77.class differ
diff --git a/out/production/A079/gui/ppms$78.class b/out/production/A079/gui/ppms$78.class
new file mode 100644
index 0000000..75cfeed
Binary files /dev/null and b/out/production/A079/gui/ppms$78.class differ
diff --git a/out/production/A079/gui/ppms$79.class b/out/production/A079/gui/ppms$79.class
new file mode 100644
index 0000000..e280c3b
Binary files /dev/null and b/out/production/A079/gui/ppms$79.class differ
diff --git a/out/production/A079/gui/ppms$8.class b/out/production/A079/gui/ppms$8.class
new file mode 100644
index 0000000..968e429
Binary files /dev/null and b/out/production/A079/gui/ppms$8.class differ
diff --git a/out/production/A079/gui/ppms$80.class b/out/production/A079/gui/ppms$80.class
new file mode 100644
index 0000000..909fc62
Binary files /dev/null and b/out/production/A079/gui/ppms$80.class differ
diff --git a/out/production/A079/gui/ppms$81.class b/out/production/A079/gui/ppms$81.class
new file mode 100644
index 0000000..4a67a30
Binary files /dev/null and b/out/production/A079/gui/ppms$81.class differ
diff --git a/out/production/A079/gui/ppms$82.class b/out/production/A079/gui/ppms$82.class
new file mode 100644
index 0000000..234e7ab
Binary files /dev/null and b/out/production/A079/gui/ppms$82.class differ
diff --git a/out/production/A079/gui/ppms$83.class b/out/production/A079/gui/ppms$83.class
new file mode 100644
index 0000000..9c9d83c
Binary files /dev/null and b/out/production/A079/gui/ppms$83.class differ
diff --git a/out/production/A079/gui/ppms$84.class b/out/production/A079/gui/ppms$84.class
new file mode 100644
index 0000000..5a197c6
Binary files /dev/null and b/out/production/A079/gui/ppms$84.class differ
diff --git a/out/production/A079/gui/ppms$85.class b/out/production/A079/gui/ppms$85.class
new file mode 100644
index 0000000..9453055
Binary files /dev/null and b/out/production/A079/gui/ppms$85.class differ
diff --git a/out/production/A079/gui/ppms$86.class b/out/production/A079/gui/ppms$86.class
new file mode 100644
index 0000000..6a11fdf
Binary files /dev/null and b/out/production/A079/gui/ppms$86.class differ
diff --git a/out/production/A079/gui/ppms$87.class b/out/production/A079/gui/ppms$87.class
new file mode 100644
index 0000000..5ab88f2
Binary files /dev/null and b/out/production/A079/gui/ppms$87.class differ
diff --git a/out/production/A079/gui/ppms$88.class b/out/production/A079/gui/ppms$88.class
new file mode 100644
index 0000000..1b9df1e
Binary files /dev/null and b/out/production/A079/gui/ppms$88.class differ
diff --git a/out/production/A079/gui/ppms$89.class b/out/production/A079/gui/ppms$89.class
new file mode 100644
index 0000000..4cd9803
Binary files /dev/null and b/out/production/A079/gui/ppms$89.class differ
diff --git a/out/production/A079/gui/ppms$9.class b/out/production/A079/gui/ppms$9.class
new file mode 100644
index 0000000..bdbe908
Binary files /dev/null and b/out/production/A079/gui/ppms$9.class differ
diff --git a/out/production/A079/gui/ppms$90.class b/out/production/A079/gui/ppms$90.class
new file mode 100644
index 0000000..dff9843
Binary files /dev/null and b/out/production/A079/gui/ppms$90.class differ
diff --git a/out/production/A079/gui/ppms$91.class b/out/production/A079/gui/ppms$91.class
new file mode 100644
index 0000000..b9e1b27
Binary files /dev/null and b/out/production/A079/gui/ppms$91.class differ
diff --git a/out/production/A079/gui/ppms$92.class b/out/production/A079/gui/ppms$92.class
new file mode 100644
index 0000000..95cab6b
Binary files /dev/null and b/out/production/A079/gui/ppms$92.class differ
diff --git a/out/production/A079/gui/ppms$93.class b/out/production/A079/gui/ppms$93.class
new file mode 100644
index 0000000..5710c43
Binary files /dev/null and b/out/production/A079/gui/ppms$93.class differ
diff --git a/out/production/A079/gui/ppms$94.class b/out/production/A079/gui/ppms$94.class
new file mode 100644
index 0000000..69f43ff
Binary files /dev/null and b/out/production/A079/gui/ppms$94.class differ
diff --git a/out/production/A079/gui/ppms$95.class b/out/production/A079/gui/ppms$95.class
new file mode 100644
index 0000000..e06adfa
Binary files /dev/null and b/out/production/A079/gui/ppms$95.class differ
diff --git a/out/production/A079/gui/ppms$96.class b/out/production/A079/gui/ppms$96.class
new file mode 100644
index 0000000..28c57a8
Binary files /dev/null and b/out/production/A079/gui/ppms$96.class differ
diff --git a/out/production/A079/gui/ppms$97.class b/out/production/A079/gui/ppms$97.class
new file mode 100644
index 0000000..b60df62
Binary files /dev/null and b/out/production/A079/gui/ppms$97.class differ
diff --git a/out/production/A079/gui/ppms$98.class b/out/production/A079/gui/ppms$98.class
new file mode 100644
index 0000000..e05162b
Binary files /dev/null and b/out/production/A079/gui/ppms$98.class differ
diff --git a/out/production/A079/gui/ppms$99.class b/out/production/A079/gui/ppms$99.class
new file mode 100644
index 0000000..5659162
Binary files /dev/null and b/out/production/A079/gui/ppms$99.class differ
diff --git a/out/production/A079/gui/ppms.class b/out/production/A079/gui/ppms.class
new file mode 100644
index 0000000..4ac9b00
Binary files /dev/null and b/out/production/A079/gui/ppms.class differ
diff --git a/out/production/A079/gui/代码查询工具$1.class b/out/production/A079/gui/代码查询工具$1.class
new file mode 100644
index 0000000..15eaf57
Binary files /dev/null and b/out/production/A079/gui/代码查询工具$1.class differ
diff --git a/out/production/A079/gui/代码查询工具$2.class b/out/production/A079/gui/代码查询工具$2.class
new file mode 100644
index 0000000..4077c4f
Binary files /dev/null and b/out/production/A079/gui/代码查询工具$2.class differ
diff --git a/out/production/A079/gui/代码查询工具$3.class b/out/production/A079/gui/代码查询工具$3.class
new file mode 100644
index 0000000..6579a92
Binary files /dev/null and b/out/production/A079/gui/代码查询工具$3.class differ
diff --git a/out/production/A079/gui/代码查询工具.class b/out/production/A079/gui/代码查询工具.class
new file mode 100644
index 0000000..0cad3e0
Binary files /dev/null and b/out/production/A079/gui/代码查询工具.class differ
diff --git a/out/production/A079/gui/特殊控制台$1.class b/out/production/A079/gui/特殊控制台$1.class
new file mode 100644
index 0000000..429ae5f
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$1.class differ
diff --git a/out/production/A079/gui/特殊控制台$10.class b/out/production/A079/gui/特殊控制台$10.class
new file mode 100644
index 0000000..42992f3
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$10.class differ
diff --git a/out/production/A079/gui/特殊控制台$11.class b/out/production/A079/gui/特殊控制台$11.class
new file mode 100644
index 0000000..11b8b64
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$11.class differ
diff --git a/out/production/A079/gui/特殊控制台$12.class b/out/production/A079/gui/特殊控制台$12.class
new file mode 100644
index 0000000..b36474f
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$12.class differ
diff --git a/out/production/A079/gui/特殊控制台$13.class b/out/production/A079/gui/特殊控制台$13.class
new file mode 100644
index 0000000..3f20606
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$13.class differ
diff --git a/out/production/A079/gui/特殊控制台$14.class b/out/production/A079/gui/特殊控制台$14.class
new file mode 100644
index 0000000..e7aac0c
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$14.class differ
diff --git a/out/production/A079/gui/特殊控制台$15.class b/out/production/A079/gui/特殊控制台$15.class
new file mode 100644
index 0000000..fe1b079
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$15.class differ
diff --git a/out/production/A079/gui/特殊控制台$16.class b/out/production/A079/gui/特殊控制台$16.class
new file mode 100644
index 0000000..318900e
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$16.class differ
diff --git a/out/production/A079/gui/特殊控制台$17.class b/out/production/A079/gui/特殊控制台$17.class
new file mode 100644
index 0000000..b4d67fc
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$17.class differ
diff --git a/out/production/A079/gui/特殊控制台$18.class b/out/production/A079/gui/特殊控制台$18.class
new file mode 100644
index 0000000..5a08e26
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$18.class differ
diff --git a/out/production/A079/gui/特殊控制台$19.class b/out/production/A079/gui/特殊控制台$19.class
new file mode 100644
index 0000000..7377b4b
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$19.class differ
diff --git a/out/production/A079/gui/特殊控制台$2.class b/out/production/A079/gui/特殊控制台$2.class
new file mode 100644
index 0000000..984c11b
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$2.class differ
diff --git a/out/production/A079/gui/特殊控制台$20.class b/out/production/A079/gui/特殊控制台$20.class
new file mode 100644
index 0000000..ddaf4ef
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$20.class differ
diff --git a/out/production/A079/gui/特殊控制台$21.class b/out/production/A079/gui/特殊控制台$21.class
new file mode 100644
index 0000000..fe3b453
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$21.class differ
diff --git a/out/production/A079/gui/特殊控制台$22.class b/out/production/A079/gui/特殊控制台$22.class
new file mode 100644
index 0000000..a82bcf3
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$22.class differ
diff --git a/out/production/A079/gui/特殊控制台$23.class b/out/production/A079/gui/特殊控制台$23.class
new file mode 100644
index 0000000..82b25e4
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$23.class differ
diff --git a/out/production/A079/gui/特殊控制台$24.class b/out/production/A079/gui/特殊控制台$24.class
new file mode 100644
index 0000000..35e4d0f
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$24.class differ
diff --git a/out/production/A079/gui/特殊控制台$25.class b/out/production/A079/gui/特殊控制台$25.class
new file mode 100644
index 0000000..1c202cf
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$25.class differ
diff --git a/out/production/A079/gui/特殊控制台$26.class b/out/production/A079/gui/特殊控制台$26.class
new file mode 100644
index 0000000..938dbdd
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$26.class differ
diff --git a/out/production/A079/gui/特殊控制台$27.class b/out/production/A079/gui/特殊控制台$27.class
new file mode 100644
index 0000000..f5fd15b
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$27.class differ
diff --git a/out/production/A079/gui/特殊控制台$28.class b/out/production/A079/gui/特殊控制台$28.class
new file mode 100644
index 0000000..f7e36b7
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$28.class differ
diff --git a/out/production/A079/gui/特殊控制台$29.class b/out/production/A079/gui/特殊控制台$29.class
new file mode 100644
index 0000000..646f952
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$29.class differ
diff --git a/out/production/A079/gui/特殊控制台$3.class b/out/production/A079/gui/特殊控制台$3.class
new file mode 100644
index 0000000..35d78a2
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$3.class differ
diff --git a/out/production/A079/gui/特殊控制台$30.class b/out/production/A079/gui/特殊控制台$30.class
new file mode 100644
index 0000000..5412f1c
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$30.class differ
diff --git a/out/production/A079/gui/特殊控制台$31.class b/out/production/A079/gui/特殊控制台$31.class
new file mode 100644
index 0000000..63db252
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$31.class differ
diff --git a/out/production/A079/gui/特殊控制台$32.class b/out/production/A079/gui/特殊控制台$32.class
new file mode 100644
index 0000000..a179afe
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$32.class differ
diff --git a/out/production/A079/gui/特殊控制台$33.class b/out/production/A079/gui/特殊控制台$33.class
new file mode 100644
index 0000000..caa3505
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$33.class differ
diff --git a/out/production/A079/gui/特殊控制台$34.class b/out/production/A079/gui/特殊控制台$34.class
new file mode 100644
index 0000000..7617a18
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$34.class differ
diff --git a/out/production/A079/gui/特殊控制台$35.class b/out/production/A079/gui/特殊控制台$35.class
new file mode 100644
index 0000000..23ef0d0
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$35.class differ
diff --git a/out/production/A079/gui/特殊控制台$36.class b/out/production/A079/gui/特殊控制台$36.class
new file mode 100644
index 0000000..15c8332
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$36.class differ
diff --git a/out/production/A079/gui/特殊控制台$37.class b/out/production/A079/gui/特殊控制台$37.class
new file mode 100644
index 0000000..ecc6809
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$37.class differ
diff --git a/out/production/A079/gui/特殊控制台$38.class b/out/production/A079/gui/特殊控制台$38.class
new file mode 100644
index 0000000..ebf6618
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$38.class differ
diff --git a/out/production/A079/gui/特殊控制台$39.class b/out/production/A079/gui/特殊控制台$39.class
new file mode 100644
index 0000000..4310811
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$39.class differ
diff --git a/out/production/A079/gui/特殊控制台$4.class b/out/production/A079/gui/特殊控制台$4.class
new file mode 100644
index 0000000..51957da
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$4.class differ
diff --git a/out/production/A079/gui/特殊控制台$40.class b/out/production/A079/gui/特殊控制台$40.class
new file mode 100644
index 0000000..55302ac
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$40.class differ
diff --git a/out/production/A079/gui/特殊控制台$41.class b/out/production/A079/gui/特殊控制台$41.class
new file mode 100644
index 0000000..303a423
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$41.class differ
diff --git a/out/production/A079/gui/特殊控制台$42.class b/out/production/A079/gui/特殊控制台$42.class
new file mode 100644
index 0000000..04d4556
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$42.class differ
diff --git a/out/production/A079/gui/特殊控制台$43.class b/out/production/A079/gui/特殊控制台$43.class
new file mode 100644
index 0000000..15814f6
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$43.class differ
diff --git a/out/production/A079/gui/特殊控制台$44.class b/out/production/A079/gui/特殊控制台$44.class
new file mode 100644
index 0000000..af27226
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$44.class differ
diff --git a/out/production/A079/gui/特殊控制台$45.class b/out/production/A079/gui/特殊控制台$45.class
new file mode 100644
index 0000000..2bf0d18
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$45.class differ
diff --git a/out/production/A079/gui/特殊控制台$46.class b/out/production/A079/gui/特殊控制台$46.class
new file mode 100644
index 0000000..edebf12
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$46.class differ
diff --git a/out/production/A079/gui/特殊控制台$5.class b/out/production/A079/gui/特殊控制台$5.class
new file mode 100644
index 0000000..aeae054
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$5.class differ
diff --git a/out/production/A079/gui/特殊控制台$6.class b/out/production/A079/gui/特殊控制台$6.class
new file mode 100644
index 0000000..abc2771
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$6.class differ
diff --git a/out/production/A079/gui/特殊控制台$7.class b/out/production/A079/gui/特殊控制台$7.class
new file mode 100644
index 0000000..76c971c
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$7.class differ
diff --git a/out/production/A079/gui/特殊控制台$8.class b/out/production/A079/gui/特殊控制台$8.class
new file mode 100644
index 0000000..454b3d3
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$8.class differ
diff --git a/out/production/A079/gui/特殊控制台$9.class b/out/production/A079/gui/特殊控制台$9.class
new file mode 100644
index 0000000..7effaed
Binary files /dev/null and b/out/production/A079/gui/特殊控制台$9.class differ
diff --git a/out/production/A079/gui/特殊控制台.class b/out/production/A079/gui/特殊控制台.class
new file mode 100644
index 0000000..ec2a12e
Binary files /dev/null and b/out/production/A079/gui/特殊控制台.class differ
diff --git a/out/production/A079/gui/玩家控制台$1.class b/out/production/A079/gui/玩家控制台$1.class
new file mode 100644
index 0000000..d4377e5
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$1.class differ
diff --git a/out/production/A079/gui/玩家控制台$10.class b/out/production/A079/gui/玩家控制台$10.class
new file mode 100644
index 0000000..58a08af
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$10.class differ
diff --git a/out/production/A079/gui/玩家控制台$100.class b/out/production/A079/gui/玩家控制台$100.class
new file mode 100644
index 0000000..db516e1
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$100.class differ
diff --git a/out/production/A079/gui/玩家控制台$101.class b/out/production/A079/gui/玩家控制台$101.class
new file mode 100644
index 0000000..162416d
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$101.class differ
diff --git a/out/production/A079/gui/玩家控制台$102.class b/out/production/A079/gui/玩家控制台$102.class
new file mode 100644
index 0000000..46967c9
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$102.class differ
diff --git a/out/production/A079/gui/玩家控制台$103.class b/out/production/A079/gui/玩家控制台$103.class
new file mode 100644
index 0000000..c9bf866
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$103.class differ
diff --git a/out/production/A079/gui/玩家控制台$104.class b/out/production/A079/gui/玩家控制台$104.class
new file mode 100644
index 0000000..225df98
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$104.class differ
diff --git a/out/production/A079/gui/玩家控制台$105.class b/out/production/A079/gui/玩家控制台$105.class
new file mode 100644
index 0000000..1ae214d
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$105.class differ
diff --git a/out/production/A079/gui/玩家控制台$106.class b/out/production/A079/gui/玩家控制台$106.class
new file mode 100644
index 0000000..bbc4b37
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$106.class differ
diff --git a/out/production/A079/gui/玩家控制台$107.class b/out/production/A079/gui/玩家控制台$107.class
new file mode 100644
index 0000000..3fa55c6
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$107.class differ
diff --git a/out/production/A079/gui/玩家控制台$108.class b/out/production/A079/gui/玩家控制台$108.class
new file mode 100644
index 0000000..e2a29e1
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$108.class differ
diff --git a/out/production/A079/gui/玩家控制台$109.class b/out/production/A079/gui/玩家控制台$109.class
new file mode 100644
index 0000000..cadcbd6
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$109.class differ
diff --git a/out/production/A079/gui/玩家控制台$11.class b/out/production/A079/gui/玩家控制台$11.class
new file mode 100644
index 0000000..d558029
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$11.class differ
diff --git a/out/production/A079/gui/玩家控制台$110.class b/out/production/A079/gui/玩家控制台$110.class
new file mode 100644
index 0000000..5da9a42
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$110.class differ
diff --git a/out/production/A079/gui/玩家控制台$111.class b/out/production/A079/gui/玩家控制台$111.class
new file mode 100644
index 0000000..462cc51
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$111.class differ
diff --git a/out/production/A079/gui/玩家控制台$112.class b/out/production/A079/gui/玩家控制台$112.class
new file mode 100644
index 0000000..70b5bbf
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$112.class differ
diff --git a/out/production/A079/gui/玩家控制台$113.class b/out/production/A079/gui/玩家控制台$113.class
new file mode 100644
index 0000000..43c2cab
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$113.class differ
diff --git a/out/production/A079/gui/玩家控制台$114.class b/out/production/A079/gui/玩家控制台$114.class
new file mode 100644
index 0000000..2448b9c
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$114.class differ
diff --git a/out/production/A079/gui/玩家控制台$115.class b/out/production/A079/gui/玩家控制台$115.class
new file mode 100644
index 0000000..577e6eb
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$115.class differ
diff --git a/out/production/A079/gui/玩家控制台$116.class b/out/production/A079/gui/玩家控制台$116.class
new file mode 100644
index 0000000..1dad6c5
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$116.class differ
diff --git a/out/production/A079/gui/玩家控制台$117.class b/out/production/A079/gui/玩家控制台$117.class
new file mode 100644
index 0000000..fafe658
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$117.class differ
diff --git a/out/production/A079/gui/玩家控制台$118.class b/out/production/A079/gui/玩家控制台$118.class
new file mode 100644
index 0000000..d38406e
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$118.class differ
diff --git a/out/production/A079/gui/玩家控制台$119.class b/out/production/A079/gui/玩家控制台$119.class
new file mode 100644
index 0000000..b9fccc8
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$119.class differ
diff --git a/out/production/A079/gui/玩家控制台$12.class b/out/production/A079/gui/玩家控制台$12.class
new file mode 100644
index 0000000..accf2cf
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$12.class differ
diff --git a/out/production/A079/gui/玩家控制台$120.class b/out/production/A079/gui/玩家控制台$120.class
new file mode 100644
index 0000000..a20082d
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$120.class differ
diff --git a/out/production/A079/gui/玩家控制台$121.class b/out/production/A079/gui/玩家控制台$121.class
new file mode 100644
index 0000000..872215b
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$121.class differ
diff --git a/out/production/A079/gui/玩家控制台$122.class b/out/production/A079/gui/玩家控制台$122.class
new file mode 100644
index 0000000..d5cc456
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$122.class differ
diff --git a/out/production/A079/gui/玩家控制台$123.class b/out/production/A079/gui/玩家控制台$123.class
new file mode 100644
index 0000000..5796646
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$123.class differ
diff --git a/out/production/A079/gui/玩家控制台$124.class b/out/production/A079/gui/玩家控制台$124.class
new file mode 100644
index 0000000..8c11ca3
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$124.class differ
diff --git a/out/production/A079/gui/玩家控制台$125.class b/out/production/A079/gui/玩家控制台$125.class
new file mode 100644
index 0000000..12fe814
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$125.class differ
diff --git a/out/production/A079/gui/玩家控制台$126.class b/out/production/A079/gui/玩家控制台$126.class
new file mode 100644
index 0000000..9af2036
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$126.class differ
diff --git a/out/production/A079/gui/玩家控制台$127.class b/out/production/A079/gui/玩家控制台$127.class
new file mode 100644
index 0000000..d18f46a
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$127.class differ
diff --git a/out/production/A079/gui/玩家控制台$128.class b/out/production/A079/gui/玩家控制台$128.class
new file mode 100644
index 0000000..ba77ca8
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$128.class differ
diff --git a/out/production/A079/gui/玩家控制台$129.class b/out/production/A079/gui/玩家控制台$129.class
new file mode 100644
index 0000000..20f74e1
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$129.class differ
diff --git a/out/production/A079/gui/玩家控制台$13.class b/out/production/A079/gui/玩家控制台$13.class
new file mode 100644
index 0000000..858321f
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$13.class differ
diff --git a/out/production/A079/gui/玩家控制台$130.class b/out/production/A079/gui/玩家控制台$130.class
new file mode 100644
index 0000000..05e0325
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$130.class differ
diff --git a/out/production/A079/gui/玩家控制台$131.class b/out/production/A079/gui/玩家控制台$131.class
new file mode 100644
index 0000000..b78db30
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$131.class differ
diff --git a/out/production/A079/gui/玩家控制台$132.class b/out/production/A079/gui/玩家控制台$132.class
new file mode 100644
index 0000000..2b7a515
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$132.class differ
diff --git a/out/production/A079/gui/玩家控制台$133.class b/out/production/A079/gui/玩家控制台$133.class
new file mode 100644
index 0000000..14609d3
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$133.class differ
diff --git a/out/production/A079/gui/玩家控制台$134.class b/out/production/A079/gui/玩家控制台$134.class
new file mode 100644
index 0000000..5f4039e
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$134.class differ
diff --git a/out/production/A079/gui/玩家控制台$135.class b/out/production/A079/gui/玩家控制台$135.class
new file mode 100644
index 0000000..5e9ef60
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$135.class differ
diff --git a/out/production/A079/gui/玩家控制台$136.class b/out/production/A079/gui/玩家控制台$136.class
new file mode 100644
index 0000000..ab20e65
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$136.class differ
diff --git a/out/production/A079/gui/玩家控制台$137.class b/out/production/A079/gui/玩家控制台$137.class
new file mode 100644
index 0000000..f5be499
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$137.class differ
diff --git a/out/production/A079/gui/玩家控制台$138.class b/out/production/A079/gui/玩家控制台$138.class
new file mode 100644
index 0000000..6bfb1c9
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$138.class differ
diff --git a/out/production/A079/gui/玩家控制台$139.class b/out/production/A079/gui/玩家控制台$139.class
new file mode 100644
index 0000000..0c7b3aa
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$139.class differ
diff --git a/out/production/A079/gui/玩家控制台$14.class b/out/production/A079/gui/玩家控制台$14.class
new file mode 100644
index 0000000..ab3dc0f
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$14.class differ
diff --git a/out/production/A079/gui/玩家控制台$140.class b/out/production/A079/gui/玩家控制台$140.class
new file mode 100644
index 0000000..035f244
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$140.class differ
diff --git a/out/production/A079/gui/玩家控制台$15.class b/out/production/A079/gui/玩家控制台$15.class
new file mode 100644
index 0000000..701b826
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$15.class differ
diff --git a/out/production/A079/gui/玩家控制台$16.class b/out/production/A079/gui/玩家控制台$16.class
new file mode 100644
index 0000000..e9ca289
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$16.class differ
diff --git a/out/production/A079/gui/玩家控制台$17.class b/out/production/A079/gui/玩家控制台$17.class
new file mode 100644
index 0000000..3b338de
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$17.class differ
diff --git a/out/production/A079/gui/玩家控制台$18.class b/out/production/A079/gui/玩家控制台$18.class
new file mode 100644
index 0000000..ad01eeb
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$18.class differ
diff --git a/out/production/A079/gui/玩家控制台$19.class b/out/production/A079/gui/玩家控制台$19.class
new file mode 100644
index 0000000..f147d2f
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$19.class differ
diff --git a/out/production/A079/gui/玩家控制台$2.class b/out/production/A079/gui/玩家控制台$2.class
new file mode 100644
index 0000000..97f2009
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$2.class differ
diff --git a/out/production/A079/gui/玩家控制台$20.class b/out/production/A079/gui/玩家控制台$20.class
new file mode 100644
index 0000000..2a46b84
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$20.class differ
diff --git a/out/production/A079/gui/玩家控制台$21.class b/out/production/A079/gui/玩家控制台$21.class
new file mode 100644
index 0000000..fa76ce0
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$21.class differ
diff --git a/out/production/A079/gui/玩家控制台$22.class b/out/production/A079/gui/玩家控制台$22.class
new file mode 100644
index 0000000..b4af34a
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$22.class differ
diff --git a/out/production/A079/gui/玩家控制台$23.class b/out/production/A079/gui/玩家控制台$23.class
new file mode 100644
index 0000000..e3ffea5
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$23.class differ
diff --git a/out/production/A079/gui/玩家控制台$24.class b/out/production/A079/gui/玩家控制台$24.class
new file mode 100644
index 0000000..dd3d617
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$24.class differ
diff --git a/out/production/A079/gui/玩家控制台$25.class b/out/production/A079/gui/玩家控制台$25.class
new file mode 100644
index 0000000..b63625c
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$25.class differ
diff --git a/out/production/A079/gui/玩家控制台$26.class b/out/production/A079/gui/玩家控制台$26.class
new file mode 100644
index 0000000..c027595
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$26.class differ
diff --git a/out/production/A079/gui/玩家控制台$27.class b/out/production/A079/gui/玩家控制台$27.class
new file mode 100644
index 0000000..05a081c
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$27.class differ
diff --git a/out/production/A079/gui/玩家控制台$28.class b/out/production/A079/gui/玩家控制台$28.class
new file mode 100644
index 0000000..1ccd967
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$28.class differ
diff --git a/out/production/A079/gui/玩家控制台$29.class b/out/production/A079/gui/玩家控制台$29.class
new file mode 100644
index 0000000..74d8a54
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$29.class differ
diff --git a/out/production/A079/gui/玩家控制台$3.class b/out/production/A079/gui/玩家控制台$3.class
new file mode 100644
index 0000000..d54b431
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$3.class differ
diff --git a/out/production/A079/gui/玩家控制台$30.class b/out/production/A079/gui/玩家控制台$30.class
new file mode 100644
index 0000000..db042e2
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$30.class differ
diff --git a/out/production/A079/gui/玩家控制台$31.class b/out/production/A079/gui/玩家控制台$31.class
new file mode 100644
index 0000000..6948883
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$31.class differ
diff --git a/out/production/A079/gui/玩家控制台$32.class b/out/production/A079/gui/玩家控制台$32.class
new file mode 100644
index 0000000..d7abc2f
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$32.class differ
diff --git a/out/production/A079/gui/玩家控制台$33.class b/out/production/A079/gui/玩家控制台$33.class
new file mode 100644
index 0000000..0e2a9cb
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$33.class differ
diff --git a/out/production/A079/gui/玩家控制台$34.class b/out/production/A079/gui/玩家控制台$34.class
new file mode 100644
index 0000000..c9a5bda
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$34.class differ
diff --git a/out/production/A079/gui/玩家控制台$35.class b/out/production/A079/gui/玩家控制台$35.class
new file mode 100644
index 0000000..3d6f95b
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$35.class differ
diff --git a/out/production/A079/gui/玩家控制台$36.class b/out/production/A079/gui/玩家控制台$36.class
new file mode 100644
index 0000000..f25da0c
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$36.class differ
diff --git a/out/production/A079/gui/玩家控制台$37.class b/out/production/A079/gui/玩家控制台$37.class
new file mode 100644
index 0000000..ee4e98d
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$37.class differ
diff --git a/out/production/A079/gui/玩家控制台$38.class b/out/production/A079/gui/玩家控制台$38.class
new file mode 100644
index 0000000..b65f882
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$38.class differ
diff --git a/out/production/A079/gui/玩家控制台$39.class b/out/production/A079/gui/玩家控制台$39.class
new file mode 100644
index 0000000..f3d833c
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$39.class differ
diff --git a/out/production/A079/gui/玩家控制台$4.class b/out/production/A079/gui/玩家控制台$4.class
new file mode 100644
index 0000000..74b35ef
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$4.class differ
diff --git a/out/production/A079/gui/玩家控制台$40.class b/out/production/A079/gui/玩家控制台$40.class
new file mode 100644
index 0000000..7526c52
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$40.class differ
diff --git a/out/production/A079/gui/玩家控制台$41.class b/out/production/A079/gui/玩家控制台$41.class
new file mode 100644
index 0000000..25045a4
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$41.class differ
diff --git a/out/production/A079/gui/玩家控制台$42.class b/out/production/A079/gui/玩家控制台$42.class
new file mode 100644
index 0000000..0d76683
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$42.class differ
diff --git a/out/production/A079/gui/玩家控制台$43.class b/out/production/A079/gui/玩家控制台$43.class
new file mode 100644
index 0000000..459f4bf
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$43.class differ
diff --git a/out/production/A079/gui/玩家控制台$44.class b/out/production/A079/gui/玩家控制台$44.class
new file mode 100644
index 0000000..668a9ad
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$44.class differ
diff --git a/out/production/A079/gui/玩家控制台$45.class b/out/production/A079/gui/玩家控制台$45.class
new file mode 100644
index 0000000..42cd517
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$45.class differ
diff --git a/out/production/A079/gui/玩家控制台$46.class b/out/production/A079/gui/玩家控制台$46.class
new file mode 100644
index 0000000..9bd3a4f
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$46.class differ
diff --git a/out/production/A079/gui/玩家控制台$47.class b/out/production/A079/gui/玩家控制台$47.class
new file mode 100644
index 0000000..89af33e
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$47.class differ
diff --git a/out/production/A079/gui/玩家控制台$48.class b/out/production/A079/gui/玩家控制台$48.class
new file mode 100644
index 0000000..36cf589
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$48.class differ
diff --git a/out/production/A079/gui/玩家控制台$49.class b/out/production/A079/gui/玩家控制台$49.class
new file mode 100644
index 0000000..1f63707
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$49.class differ
diff --git a/out/production/A079/gui/玩家控制台$5.class b/out/production/A079/gui/玩家控制台$5.class
new file mode 100644
index 0000000..0ee2aa9
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$5.class differ
diff --git a/out/production/A079/gui/玩家控制台$50.class b/out/production/A079/gui/玩家控制台$50.class
new file mode 100644
index 0000000..772cddc
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$50.class differ
diff --git a/out/production/A079/gui/玩家控制台$51.class b/out/production/A079/gui/玩家控制台$51.class
new file mode 100644
index 0000000..559776a
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$51.class differ
diff --git a/out/production/A079/gui/玩家控制台$52.class b/out/production/A079/gui/玩家控制台$52.class
new file mode 100644
index 0000000..337fcd6
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$52.class differ
diff --git a/out/production/A079/gui/玩家控制台$53.class b/out/production/A079/gui/玩家控制台$53.class
new file mode 100644
index 0000000..504b587
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$53.class differ
diff --git a/out/production/A079/gui/玩家控制台$54.class b/out/production/A079/gui/玩家控制台$54.class
new file mode 100644
index 0000000..af6a803
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$54.class differ
diff --git a/out/production/A079/gui/玩家控制台$55.class b/out/production/A079/gui/玩家控制台$55.class
new file mode 100644
index 0000000..7e2f355
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$55.class differ
diff --git a/out/production/A079/gui/玩家控制台$56.class b/out/production/A079/gui/玩家控制台$56.class
new file mode 100644
index 0000000..442ffdf
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$56.class differ
diff --git a/out/production/A079/gui/玩家控制台$57.class b/out/production/A079/gui/玩家控制台$57.class
new file mode 100644
index 0000000..92f5350
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$57.class differ
diff --git a/out/production/A079/gui/玩家控制台$58.class b/out/production/A079/gui/玩家控制台$58.class
new file mode 100644
index 0000000..e43e4e2
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$58.class differ
diff --git a/out/production/A079/gui/玩家控制台$59.class b/out/production/A079/gui/玩家控制台$59.class
new file mode 100644
index 0000000..1f54d75
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$59.class differ
diff --git a/out/production/A079/gui/玩家控制台$6.class b/out/production/A079/gui/玩家控制台$6.class
new file mode 100644
index 0000000..6eb4be0
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$6.class differ
diff --git a/out/production/A079/gui/玩家控制台$60.class b/out/production/A079/gui/玩家控制台$60.class
new file mode 100644
index 0000000..58b4b67
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$60.class differ
diff --git a/out/production/A079/gui/玩家控制台$61.class b/out/production/A079/gui/玩家控制台$61.class
new file mode 100644
index 0000000..f037307
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$61.class differ
diff --git a/out/production/A079/gui/玩家控制台$62.class b/out/production/A079/gui/玩家控制台$62.class
new file mode 100644
index 0000000..d28a2b1
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$62.class differ
diff --git a/out/production/A079/gui/玩家控制台$63.class b/out/production/A079/gui/玩家控制台$63.class
new file mode 100644
index 0000000..b032c34
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$63.class differ
diff --git a/out/production/A079/gui/玩家控制台$64.class b/out/production/A079/gui/玩家控制台$64.class
new file mode 100644
index 0000000..931d864
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$64.class differ
diff --git a/out/production/A079/gui/玩家控制台$65.class b/out/production/A079/gui/玩家控制台$65.class
new file mode 100644
index 0000000..70c8431
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$65.class differ
diff --git a/out/production/A079/gui/玩家控制台$66.class b/out/production/A079/gui/玩家控制台$66.class
new file mode 100644
index 0000000..e23ca19
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$66.class differ
diff --git a/out/production/A079/gui/玩家控制台$67.class b/out/production/A079/gui/玩家控制台$67.class
new file mode 100644
index 0000000..75ce362
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$67.class differ
diff --git a/out/production/A079/gui/玩家控制台$68.class b/out/production/A079/gui/玩家控制台$68.class
new file mode 100644
index 0000000..981af2c
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$68.class differ
diff --git a/out/production/A079/gui/玩家控制台$69.class b/out/production/A079/gui/玩家控制台$69.class
new file mode 100644
index 0000000..f43f504
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$69.class differ
diff --git a/out/production/A079/gui/玩家控制台$7.class b/out/production/A079/gui/玩家控制台$7.class
new file mode 100644
index 0000000..f8a6533
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$7.class differ
diff --git a/out/production/A079/gui/玩家控制台$70.class b/out/production/A079/gui/玩家控制台$70.class
new file mode 100644
index 0000000..893cb5d
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$70.class differ
diff --git a/out/production/A079/gui/玩家控制台$71.class b/out/production/A079/gui/玩家控制台$71.class
new file mode 100644
index 0000000..97cc353
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$71.class differ
diff --git a/out/production/A079/gui/玩家控制台$72.class b/out/production/A079/gui/玩家控制台$72.class
new file mode 100644
index 0000000..f7b3252
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$72.class differ
diff --git a/out/production/A079/gui/玩家控制台$73.class b/out/production/A079/gui/玩家控制台$73.class
new file mode 100644
index 0000000..8b717f8
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$73.class differ
diff --git a/out/production/A079/gui/玩家控制台$74.class b/out/production/A079/gui/玩家控制台$74.class
new file mode 100644
index 0000000..872b72d
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$74.class differ
diff --git a/out/production/A079/gui/玩家控制台$75.class b/out/production/A079/gui/玩家控制台$75.class
new file mode 100644
index 0000000..83247bf
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$75.class differ
diff --git a/out/production/A079/gui/玩家控制台$76.class b/out/production/A079/gui/玩家控制台$76.class
new file mode 100644
index 0000000..acf8086
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$76.class differ
diff --git a/out/production/A079/gui/玩家控制台$77.class b/out/production/A079/gui/玩家控制台$77.class
new file mode 100644
index 0000000..74e6a5a
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$77.class differ
diff --git a/out/production/A079/gui/玩家控制台$78.class b/out/production/A079/gui/玩家控制台$78.class
new file mode 100644
index 0000000..24702e5
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$78.class differ
diff --git a/out/production/A079/gui/玩家控制台$79.class b/out/production/A079/gui/玩家控制台$79.class
new file mode 100644
index 0000000..a840bc7
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$79.class differ
diff --git a/out/production/A079/gui/玩家控制台$8.class b/out/production/A079/gui/玩家控制台$8.class
new file mode 100644
index 0000000..b35a2cb
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$8.class differ
diff --git a/out/production/A079/gui/玩家控制台$80.class b/out/production/A079/gui/玩家控制台$80.class
new file mode 100644
index 0000000..8326528
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$80.class differ
diff --git a/out/production/A079/gui/玩家控制台$81.class b/out/production/A079/gui/玩家控制台$81.class
new file mode 100644
index 0000000..3bbece7
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$81.class differ
diff --git a/out/production/A079/gui/玩家控制台$82.class b/out/production/A079/gui/玩家控制台$82.class
new file mode 100644
index 0000000..c0b56c1
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$82.class differ
diff --git a/out/production/A079/gui/玩家控制台$83.class b/out/production/A079/gui/玩家控制台$83.class
new file mode 100644
index 0000000..f05b089
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$83.class differ
diff --git a/out/production/A079/gui/玩家控制台$84.class b/out/production/A079/gui/玩家控制台$84.class
new file mode 100644
index 0000000..371ff04
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$84.class differ
diff --git a/out/production/A079/gui/玩家控制台$85.class b/out/production/A079/gui/玩家控制台$85.class
new file mode 100644
index 0000000..7f00f40
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$85.class differ
diff --git a/out/production/A079/gui/玩家控制台$86.class b/out/production/A079/gui/玩家控制台$86.class
new file mode 100644
index 0000000..371a8c9
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$86.class differ
diff --git a/out/production/A079/gui/玩家控制台$87.class b/out/production/A079/gui/玩家控制台$87.class
new file mode 100644
index 0000000..8d9b336
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$87.class differ
diff --git a/out/production/A079/gui/玩家控制台$88.class b/out/production/A079/gui/玩家控制台$88.class
new file mode 100644
index 0000000..2bce86a
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$88.class differ
diff --git a/out/production/A079/gui/玩家控制台$89.class b/out/production/A079/gui/玩家控制台$89.class
new file mode 100644
index 0000000..64ed3cb
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$89.class differ
diff --git a/out/production/A079/gui/玩家控制台$9.class b/out/production/A079/gui/玩家控制台$9.class
new file mode 100644
index 0000000..7d8beca
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$9.class differ
diff --git a/out/production/A079/gui/玩家控制台$90.class b/out/production/A079/gui/玩家控制台$90.class
new file mode 100644
index 0000000..8b0fcdb
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$90.class differ
diff --git a/out/production/A079/gui/玩家控制台$91.class b/out/production/A079/gui/玩家控制台$91.class
new file mode 100644
index 0000000..e6ca804
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$91.class differ
diff --git a/out/production/A079/gui/玩家控制台$92.class b/out/production/A079/gui/玩家控制台$92.class
new file mode 100644
index 0000000..bbf4626
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$92.class differ
diff --git a/out/production/A079/gui/玩家控制台$93.class b/out/production/A079/gui/玩家控制台$93.class
new file mode 100644
index 0000000..ad2e6a1
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$93.class differ
diff --git a/out/production/A079/gui/玩家控制台$94.class b/out/production/A079/gui/玩家控制台$94.class
new file mode 100644
index 0000000..2b771c5
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$94.class differ
diff --git a/out/production/A079/gui/玩家控制台$95.class b/out/production/A079/gui/玩家控制台$95.class
new file mode 100644
index 0000000..760a1ae
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$95.class differ
diff --git a/out/production/A079/gui/玩家控制台$96.class b/out/production/A079/gui/玩家控制台$96.class
new file mode 100644
index 0000000..1cbf8a0
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$96.class differ
diff --git a/out/production/A079/gui/玩家控制台$97.class b/out/production/A079/gui/玩家控制台$97.class
new file mode 100644
index 0000000..f5bf110
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$97.class differ
diff --git a/out/production/A079/gui/玩家控制台$98.class b/out/production/A079/gui/玩家控制台$98.class
new file mode 100644
index 0000000..96c4c3b
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$98.class differ
diff --git a/out/production/A079/gui/玩家控制台$99.class b/out/production/A079/gui/玩家控制台$99.class
new file mode 100644
index 0000000..5df38a8
Binary files /dev/null and b/out/production/A079/gui/玩家控制台$99.class differ
diff --git a/out/production/A079/gui/玩家控制台.class b/out/production/A079/gui/玩家控制台.class
new file mode 100644
index 0000000..a2aafce
Binary files /dev/null and b/out/production/A079/gui/玩家控制台.class differ
diff --git a/out/production/A079/gui/进阶BOSS/Mushplotact$1.class b/out/production/A079/gui/进阶BOSS/Mushplotact$1.class
new file mode 100644
index 0000000..e720baf
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/Mushplotact$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/Mushplotact$2.class b/out/production/A079/gui/进阶BOSS/Mushplotact$2.class
new file mode 100644
index 0000000..b2c351c
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/Mushplotact$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/Mushplotact.class b/out/production/A079/gui/进阶BOSS/Mushplotact.class
new file mode 100644
index 0000000..6573448
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/Mushplotact.class differ
diff --git a/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$1.class b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$1.class
new file mode 100644
index 0000000..04a5d81
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$2.class b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$2.class
new file mode 100644
index 0000000..bd205c2
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$3.class b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$3.class
new file mode 100644
index 0000000..9567c1f
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1$3.class differ
diff --git a/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1.class b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1.class
new file mode 100644
index 0000000..69e7aae
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$2.class b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$2.class
new file mode 100644
index 0000000..04eeac2
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/扎昆BOSS线程.class b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程.class
new file mode 100644
index 0000000..5aac5e0
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/扎昆BOSS线程.class differ
diff --git a/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$1.class b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$1.class
new file mode 100644
index 0000000..292c058
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$2.class b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$2.class
new file mode 100644
index 0000000..ac8548c
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$3.class b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$3.class
new file mode 100644
index 0000000..e8f37d2
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1$3.class differ
diff --git a/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1.class b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1.class
new file mode 100644
index 0000000..a015b1f
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/捉鬼任务线程$2.class b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$2.class
new file mode 100644
index 0000000..8d9aea9
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/捉鬼任务线程$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/捉鬼任务线程.class b/out/production/A079/gui/进阶BOSS/捉鬼任务线程.class
new file mode 100644
index 0000000..22526b7
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/捉鬼任务线程.class differ
diff --git a/out/production/A079/gui/进阶BOSS/活动捉鬼任务$1.class b/out/production/A079/gui/进阶BOSS/活动捉鬼任务$1.class
new file mode 100644
index 0000000..d9b6fe3
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/活动捉鬼任务$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/活动捉鬼任务.class b/out/production/A079/gui/进阶BOSS/活动捉鬼任务.class
new file mode 100644
index 0000000..3787f8c
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/活动捉鬼任务.class differ
diff --git a/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$1.class b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$1.class
new file mode 100644
index 0000000..c4d3953
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$2.class b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$2.class
new file mode 100644
index 0000000..257dfb7
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$3.class b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$3.class
new file mode 100644
index 0000000..0351aa7
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1$3.class differ
diff --git a/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1.class b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1.class
new file mode 100644
index 0000000..101786b
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$2.class b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$2.class
new file mode 100644
index 0000000..5451e7c
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程.class b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程.class
new file mode 100644
index 0000000..a5d18c8
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/蘑辣插BOSS线程.class differ
diff --git a/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$1.class b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$1.class
new file mode 100644
index 0000000..9fa3bcf
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$2.class b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$2.class
new file mode 100644
index 0000000..6f543e7
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$3.class b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$3.class
new file mode 100644
index 0000000..31d6353
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1$3.class differ
diff --git a/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1.class b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1.class
new file mode 100644
index 0000000..22fd7ce
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$1.class differ
diff --git a/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$2.class b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$2.class
new file mode 100644
index 0000000..3412cc9
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程$2.class differ
diff --git a/out/production/A079/gui/进阶BOSS/黑龙BOSS线程.class b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程.class
new file mode 100644
index 0000000..401fff5
Binary files /dev/null and b/out/production/A079/gui/进阶BOSS/黑龙BOSS线程.class differ
diff --git a/out/production/A079/handling/ExternalCodeTableGetter$1.class b/out/production/A079/handling/ExternalCodeTableGetter$1.class
new file mode 100644
index 0000000..4a23a09
Binary files /dev/null and b/out/production/A079/handling/ExternalCodeTableGetter$1.class differ
diff --git a/out/production/A079/handling/ExternalCodeTableGetter.class b/out/production/A079/handling/ExternalCodeTableGetter.class
new file mode 100644
index 0000000..886b16b
Binary files /dev/null and b/out/production/A079/handling/ExternalCodeTableGetter.class differ
diff --git a/out/production/A079/handling/MapleServerHandler$1.class b/out/production/A079/handling/MapleServerHandler$1.class
new file mode 100644
index 0000000..6c3a7f0
Binary files /dev/null and b/out/production/A079/handling/MapleServerHandler$1.class differ
diff --git a/out/production/A079/handling/MapleServerHandler.class b/out/production/A079/handling/MapleServerHandler.class
new file mode 100644
index 0000000..b9caba2
Binary files /dev/null and b/out/production/A079/handling/MapleServerHandler.class differ
diff --git a/out/production/A079/handling/RecvPacketOpcode.class b/out/production/A079/handling/RecvPacketOpcode.class
new file mode 100644
index 0000000..963df51
Binary files /dev/null and b/out/production/A079/handling/RecvPacketOpcode.class differ
diff --git a/out/production/A079/handling/SendPacketOpcode.class b/out/production/A079/handling/SendPacketOpcode.class
new file mode 100644
index 0000000..6626150
Binary files /dev/null and b/out/production/A079/handling/SendPacketOpcode.class differ
diff --git a/out/production/A079/handling/WritableIntValueHolder.class b/out/production/A079/handling/WritableIntValueHolder.class
new file mode 100644
index 0000000..031ea5c
Binary files /dev/null and b/out/production/A079/handling/WritableIntValueHolder.class differ
diff --git a/out/production/A079/handling/cashshop/CashShopServer.class b/out/production/A079/handling/cashshop/CashShopServer.class
new file mode 100644
index 0000000..1285ed4
Binary files /dev/null and b/out/production/A079/handling/cashshop/CashShopServer.class differ
diff --git a/out/production/A079/handling/cashshop/handler/CashShopOperation.class b/out/production/A079/handling/cashshop/handler/CashShopOperation.class
new file mode 100644
index 0000000..6f249ec
Binary files /dev/null and b/out/production/A079/handling/cashshop/handler/CashShopOperation.class differ
diff --git a/out/production/A079/handling/cashshop/handler/MTSOperation.class b/out/production/A079/handling/cashshop/handler/MTSOperation.class
new file mode 100644
index 0000000..7eaea01
Binary files /dev/null and b/out/production/A079/handling/cashshop/handler/MTSOperation.class differ
diff --git a/out/production/A079/handling/channel/ChannelServer.class b/out/production/A079/handling/channel/ChannelServer.class
new file mode 100644
index 0000000..29fe588
Binary files /dev/null and b/out/production/A079/handling/channel/ChannelServer.class differ
diff --git a/out/production/A079/handling/channel/MapleGuildRanking$GuildRankingInfo.class b/out/production/A079/handling/channel/MapleGuildRanking$GuildRankingInfo.class
new file mode 100644
index 0000000..1311560
Binary files /dev/null and b/out/production/A079/handling/channel/MapleGuildRanking$GuildRankingInfo.class differ
diff --git a/out/production/A079/handling/channel/MapleGuildRanking$JobRankingInfo.class b/out/production/A079/handling/channel/MapleGuildRanking$JobRankingInfo.class
new file mode 100644
index 0000000..db15665
Binary files /dev/null and b/out/production/A079/handling/channel/MapleGuildRanking$JobRankingInfo.class differ
diff --git a/out/production/A079/handling/channel/MapleGuildRanking$bossLogRankingInfo.class b/out/production/A079/handling/channel/MapleGuildRanking$bossLogRankingInfo.class
new file mode 100644
index 0000000..78b7679
Binary files /dev/null and b/out/production/A079/handling/channel/MapleGuildRanking$bossLogRankingInfo.class differ
diff --git a/out/production/A079/handling/channel/MapleGuildRanking$levelRankingInfo.class b/out/production/A079/handling/channel/MapleGuildRanking$levelRankingInfo.class
new file mode 100644
index 0000000..55257d5
Binary files /dev/null and b/out/production/A079/handling/channel/MapleGuildRanking$levelRankingInfo.class differ
diff --git a/out/production/A079/handling/channel/MapleGuildRanking$mesoRankingInfo.class b/out/production/A079/handling/channel/MapleGuildRanking$mesoRankingInfo.class
new file mode 100644
index 0000000..e947d5b
Binary files /dev/null and b/out/production/A079/handling/channel/MapleGuildRanking$mesoRankingInfo.class differ
diff --git a/out/production/A079/handling/channel/MapleGuildRanking.class b/out/production/A079/handling/channel/MapleGuildRanking.class
new file mode 100644
index 0000000..0a106d0
Binary files /dev/null and b/out/production/A079/handling/channel/MapleGuildRanking.class differ
diff --git a/out/production/A079/handling/channel/PlayerStorage$PersistingTask.class b/out/production/A079/handling/channel/PlayerStorage$PersistingTask.class
new file mode 100644
index 0000000..869b621
Binary files /dev/null and b/out/production/A079/handling/channel/PlayerStorage$PersistingTask.class differ
diff --git a/out/production/A079/handling/channel/PlayerStorage.class b/out/production/A079/handling/channel/PlayerStorage.class
new file mode 100644
index 0000000..0b445e1
Binary files /dev/null and b/out/production/A079/handling/channel/PlayerStorage.class differ
diff --git a/out/production/A079/handling/channel/handler/AllianceHandler.class b/out/production/A079/handling/channel/handler/AllianceHandler.class
new file mode 100644
index 0000000..6dbb53b
Binary files /dev/null and b/out/production/A079/handling/channel/handler/AllianceHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/AttackInfo.class b/out/production/A079/handling/channel/handler/AttackInfo.class
new file mode 100644
index 0000000..838c020
Binary files /dev/null and b/out/production/A079/handling/channel/handler/AttackInfo.class differ
diff --git a/out/production/A079/handling/channel/handler/AttackType.class b/out/production/A079/handling/channel/handler/AttackType.class
new file mode 100644
index 0000000..bf601de
Binary files /dev/null and b/out/production/A079/handling/channel/handler/AttackType.class differ
diff --git a/out/production/A079/handling/channel/handler/BBSHandler$1.class b/out/production/A079/handling/channel/handler/BBSHandler$1.class
new file mode 100644
index 0000000..54c95c1
Binary files /dev/null and b/out/production/A079/handling/channel/handler/BBSHandler$1.class differ
diff --git a/out/production/A079/handling/channel/handler/BBSHandler$BBSOperation.class b/out/production/A079/handling/channel/handler/BBSHandler$BBSOperation.class
new file mode 100644
index 0000000..d230be2
Binary files /dev/null and b/out/production/A079/handling/channel/handler/BBSHandler$BBSOperation.class differ
diff --git a/out/production/A079/handling/channel/handler/BBSHandler.class b/out/production/A079/handling/channel/handler/BBSHandler.class
new file mode 100644
index 0000000..b0e67fa
Binary files /dev/null and b/out/production/A079/handling/channel/handler/BBSHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/BeanGame$BeansType.class b/out/production/A079/handling/channel/handler/BeanGame$BeansType.class
new file mode 100644
index 0000000..48596e5
Binary files /dev/null and b/out/production/A079/handling/channel/handler/BeanGame$BeansType.class differ
diff --git a/out/production/A079/handling/channel/handler/BeanGame.class b/out/production/A079/handling/channel/handler/BeanGame.class
new file mode 100644
index 0000000..3e4d233
Binary files /dev/null and b/out/production/A079/handling/channel/handler/BeanGame.class differ
diff --git a/out/production/A079/handling/channel/handler/BuddyListHandler.class b/out/production/A079/handling/channel/handler/BuddyListHandler.class
new file mode 100644
index 0000000..7d70f95
Binary files /dev/null and b/out/production/A079/handling/channel/handler/BuddyListHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/ChatHandler$1$1.class b/out/production/A079/handling/channel/handler/ChatHandler$1$1.class
new file mode 100644
index 0000000..9c36e99
Binary files /dev/null and b/out/production/A079/handling/channel/handler/ChatHandler$1$1.class differ
diff --git a/out/production/A079/handling/channel/handler/ChatHandler$1.class b/out/production/A079/handling/channel/handler/ChatHandler$1.class
new file mode 100644
index 0000000..3d2d19f
Binary files /dev/null and b/out/production/A079/handling/channel/handler/ChatHandler$1.class differ
diff --git a/out/production/A079/handling/channel/handler/ChatHandler.class b/out/production/A079/handling/channel/handler/ChatHandler.class
new file mode 100644
index 0000000..48068e1
Binary files /dev/null and b/out/production/A079/handling/channel/handler/ChatHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/DamageParse$1.class b/out/production/A079/handling/channel/handler/DamageParse$1.class
new file mode 100644
index 0000000..dd69adb
Binary files /dev/null and b/out/production/A079/handling/channel/handler/DamageParse$1.class differ
diff --git a/out/production/A079/handling/channel/handler/DamageParse.class b/out/production/A079/handling/channel/handler/DamageParse.class
new file mode 100644
index 0000000..c79b80a
Binary files /dev/null and b/out/production/A079/handling/channel/handler/DamageParse.class differ
diff --git a/out/production/A079/handling/channel/handler/DueyHandler.class b/out/production/A079/handling/channel/handler/DueyHandler.class
new file mode 100644
index 0000000..c888cfc
Binary files /dev/null and b/out/production/A079/handling/channel/handler/DueyHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/FamilyHandler.class b/out/production/A079/handling/channel/handler/FamilyHandler.class
new file mode 100644
index 0000000..998b256
Binary files /dev/null and b/out/production/A079/handling/channel/handler/FamilyHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/GuildHandler$1.class b/out/production/A079/handling/channel/handler/GuildHandler$1.class
new file mode 100644
index 0000000..4de7380
Binary files /dev/null and b/out/production/A079/handling/channel/handler/GuildHandler$1.class differ
diff --git a/out/production/A079/handling/channel/handler/GuildHandler$GuildOperation.class b/out/production/A079/handling/channel/handler/GuildHandler$GuildOperation.class
new file mode 100644
index 0000000..fb8dbb5
Binary files /dev/null and b/out/production/A079/handling/channel/handler/GuildHandler$GuildOperation.class differ
diff --git a/out/production/A079/handling/channel/handler/GuildHandler$Invited.class b/out/production/A079/handling/channel/handler/GuildHandler$Invited.class
new file mode 100644
index 0000000..01f0307
Binary files /dev/null and b/out/production/A079/handling/channel/handler/GuildHandler$Invited.class differ
diff --git a/out/production/A079/handling/channel/handler/GuildHandler.class b/out/production/A079/handling/channel/handler/GuildHandler.class
new file mode 100644
index 0000000..a9bdeb2
Binary files /dev/null and b/out/production/A079/handling/channel/handler/GuildHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/HiredMerchantHandler.class b/out/production/A079/handling/channel/handler/HiredMerchantHandler.class
new file mode 100644
index 0000000..60a4751
Binary files /dev/null and b/out/production/A079/handling/channel/handler/HiredMerchantHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/InterServerHandler.class b/out/production/A079/handling/channel/handler/InterServerHandler.class
new file mode 100644
index 0000000..92f38ac
Binary files /dev/null and b/out/production/A079/handling/channel/handler/InterServerHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/InventoryHandler$1.class b/out/production/A079/handling/channel/handler/InventoryHandler$1.class
new file mode 100644
index 0000000..4b3fc8d
Binary files /dev/null and b/out/production/A079/handling/channel/handler/InventoryHandler$1.class differ
diff --git a/out/production/A079/handling/channel/handler/InventoryHandler.class b/out/production/A079/handling/channel/handler/InventoryHandler.class
new file mode 100644
index 0000000..a980196
Binary files /dev/null and b/out/production/A079/handling/channel/handler/InventoryHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/ItemMakerHandler.class b/out/production/A079/handling/channel/handler/ItemMakerHandler.class
new file mode 100644
index 0000000..e874226
Binary files /dev/null and b/out/production/A079/handling/channel/handler/ItemMakerHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/MobConstants.class b/out/production/A079/handling/channel/handler/MobConstants.class
new file mode 100644
index 0000000..0cc0eeb
Binary files /dev/null and b/out/production/A079/handling/channel/handler/MobConstants.class differ
diff --git a/out/production/A079/handling/channel/handler/MobHandler.class b/out/production/A079/handling/channel/handler/MobHandler.class
new file mode 100644
index 0000000..5f9c081
Binary files /dev/null and b/out/production/A079/handling/channel/handler/MobHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/MonsterCarnivalHandler.class b/out/production/A079/handling/channel/handler/MonsterCarnivalHandler.class
new file mode 100644
index 0000000..d872b6e
Binary files /dev/null and b/out/production/A079/handling/channel/handler/MonsterCarnivalHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/MovementParse.class b/out/production/A079/handling/channel/handler/MovementParse.class
new file mode 100644
index 0000000..d768329
Binary files /dev/null and b/out/production/A079/handling/channel/handler/MovementParse.class differ
diff --git a/out/production/A079/handling/channel/handler/NPCHandler.class b/out/production/A079/handling/channel/handler/NPCHandler.class
new file mode 100644
index 0000000..368ca0d
Binary files /dev/null and b/out/production/A079/handling/channel/handler/NPCHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/PartyHandler.class b/out/production/A079/handling/channel/handler/PartyHandler.class
new file mode 100644
index 0000000..f83937c
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PartyHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/PetHandler.class b/out/production/A079/handling/channel/handler/PetHandler.class
new file mode 100644
index 0000000..d8f6e3c
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PetHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayerHandler$1.class b/out/production/A079/handling/channel/handler/PlayerHandler$1.class
new file mode 100644
index 0000000..8669879
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayerHandler$1.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayerHandler$2.class b/out/production/A079/handling/channel/handler/PlayerHandler$2.class
new file mode 100644
index 0000000..55bd816
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayerHandler$2.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayerHandler$3.class b/out/production/A079/handling/channel/handler/PlayerHandler$3.class
new file mode 100644
index 0000000..5836ca8
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayerHandler$3.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayerHandler$4.class b/out/production/A079/handling/channel/handler/PlayerHandler$4.class
new file mode 100644
index 0000000..a35ca69
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayerHandler$4.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayerHandler$5.class b/out/production/A079/handling/channel/handler/PlayerHandler$5.class
new file mode 100644
index 0000000..94278e4
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayerHandler$5.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayerHandler.class b/out/production/A079/handling/channel/handler/PlayerHandler.class
new file mode 100644
index 0000000..0b6f400
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayerHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayerInteractionHandler.class b/out/production/A079/handling/channel/handler/PlayerInteractionHandler.class
new file mode 100644
index 0000000..5beaa5c
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayerInteractionHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayersHandler$1.class b/out/production/A079/handling/channel/handler/PlayersHandler$1.class
new file mode 100644
index 0000000..dc8056b
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayersHandler$1.class differ
diff --git a/out/production/A079/handling/channel/handler/PlayersHandler.class b/out/production/A079/handling/channel/handler/PlayersHandler.class
new file mode 100644
index 0000000..4c9633a
Binary files /dev/null and b/out/production/A079/handling/channel/handler/PlayersHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/SkillConstants.class b/out/production/A079/handling/channel/handler/SkillConstants.class
new file mode 100644
index 0000000..1dad5cd
Binary files /dev/null and b/out/production/A079/handling/channel/handler/SkillConstants.class differ
diff --git a/out/production/A079/handling/channel/handler/StatsHandling$1.class b/out/production/A079/handling/channel/handler/StatsHandling$1.class
new file mode 100644
index 0000000..0e223b0
Binary files /dev/null and b/out/production/A079/handling/channel/handler/StatsHandling$1.class differ
diff --git a/out/production/A079/handling/channel/handler/StatsHandling.class b/out/production/A079/handling/channel/handler/StatsHandling.class
new file mode 100644
index 0000000..0ebbfb5
Binary files /dev/null and b/out/production/A079/handling/channel/handler/StatsHandling.class differ
diff --git a/out/production/A079/handling/channel/handler/SummonHandler.class b/out/production/A079/handling/channel/handler/SummonHandler.class
new file mode 100644
index 0000000..f12e466
Binary files /dev/null and b/out/production/A079/handling/channel/handler/SummonHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/UserInterfaceHandler.class b/out/production/A079/handling/channel/handler/UserInterfaceHandler.class
new file mode 100644
index 0000000..b619546
Binary files /dev/null and b/out/production/A079/handling/channel/handler/UserInterfaceHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/ViciousHammerHandler.class b/out/production/A079/handling/channel/handler/ViciousHammerHandler.class
new file mode 100644
index 0000000..96ef011
Binary files /dev/null and b/out/production/A079/handling/channel/handler/ViciousHammerHandler.class differ
diff --git a/out/production/A079/handling/channel/handler/WorldConstants.class b/out/production/A079/handling/channel/handler/WorldConstants.class
new file mode 100644
index 0000000..6113c7a
Binary files /dev/null and b/out/production/A079/handling/channel/handler/WorldConstants.class differ
diff --git a/out/production/A079/handling/login/AccountStorage.class b/out/production/A079/handling/login/AccountStorage.class
new file mode 100644
index 0000000..ee92927
Binary files /dev/null and b/out/production/A079/handling/login/AccountStorage.class differ
diff --git a/out/production/A079/handling/login/LoginInformationProvider.class b/out/production/A079/handling/login/LoginInformationProvider.class
new file mode 100644
index 0000000..48b5cf6
Binary files /dev/null and b/out/production/A079/handling/login/LoginInformationProvider.class differ
diff --git a/out/production/A079/handling/login/LoginServer.class b/out/production/A079/handling/login/LoginServer.class
new file mode 100644
index 0000000..50a9549
Binary files /dev/null and b/out/production/A079/handling/login/LoginServer.class differ
diff --git a/out/production/A079/handling/login/LoginWorker$1.class b/out/production/A079/handling/login/LoginWorker$1.class
new file mode 100644
index 0000000..ba69b47
Binary files /dev/null and b/out/production/A079/handling/login/LoginWorker$1.class differ
diff --git a/out/production/A079/handling/login/LoginWorker.class b/out/production/A079/handling/login/LoginWorker.class
new file mode 100644
index 0000000..ecf62f1
Binary files /dev/null and b/out/production/A079/handling/login/LoginWorker.class differ
diff --git a/out/production/A079/handling/login/handler/AutoRegister.class b/out/production/A079/handling/login/handler/AutoRegister.class
new file mode 100644
index 0000000..bd5a1ec
Binary files /dev/null and b/out/production/A079/handling/login/handler/AutoRegister.class differ
diff --git a/out/production/A079/handling/login/handler/CharLoginHandler.class b/out/production/A079/handling/login/handler/CharLoginHandler.class
new file mode 100644
index 0000000..034e742
Binary files /dev/null and b/out/production/A079/handling/login/handler/CharLoginHandler.class differ
diff --git a/out/production/A079/handling/mina/MaplePacketDecoder$DecoderState.class b/out/production/A079/handling/mina/MaplePacketDecoder$DecoderState.class
new file mode 100644
index 0000000..732ab52
Binary files /dev/null and b/out/production/A079/handling/mina/MaplePacketDecoder$DecoderState.class differ
diff --git a/out/production/A079/handling/mina/MaplePacketDecoder.class b/out/production/A079/handling/mina/MaplePacketDecoder.class
new file mode 100644
index 0000000..5b4708f
Binary files /dev/null and b/out/production/A079/handling/mina/MaplePacketDecoder.class differ
diff --git a/out/production/A079/handling/mina/MaplePacketEncoder.class b/out/production/A079/handling/mina/MaplePacketEncoder.class
new file mode 100644
index 0000000..422944b
Binary files /dev/null and b/out/production/A079/handling/mina/MaplePacketEncoder.class differ
diff --git a/out/production/A079/handling/mina/ServerConnection.class b/out/production/A079/handling/mina/ServerConnection.class
new file mode 100644
index 0000000..ba8124f
Binary files /dev/null and b/out/production/A079/handling/mina/ServerConnection.class differ
diff --git a/out/production/A079/handling/mina/ServerInitializer.class b/out/production/A079/handling/mina/ServerInitializer.class
new file mode 100644
index 0000000..dd6baf0
Binary files /dev/null and b/out/production/A079/handling/mina/ServerInitializer.class differ
diff --git a/out/production/A079/handling/world/CharacterIdChannelPair.class b/out/production/A079/handling/world/CharacterIdChannelPair.class
new file mode 100644
index 0000000..c253d45
Binary files /dev/null and b/out/production/A079/handling/world/CharacterIdChannelPair.class differ
diff --git a/out/production/A079/handling/world/CharacterTransfer.class b/out/production/A079/handling/world/CharacterTransfer.class
new file mode 100644
index 0000000..48e927f
Binary files /dev/null and b/out/production/A079/handling/world/CharacterTransfer.class differ
diff --git a/out/production/A079/handling/world/CheaterData.class b/out/production/A079/handling/world/CheaterData.class
new file mode 100644
index 0000000..f5c1afa
Binary files /dev/null and b/out/production/A079/handling/world/CheaterData.class differ
diff --git a/out/production/A079/handling/world/MapleCharacterLook.class b/out/production/A079/handling/world/MapleCharacterLook.class
new file mode 100644
index 0000000..1acfe12
Binary files /dev/null and b/out/production/A079/handling/world/MapleCharacterLook.class differ
diff --git a/out/production/A079/handling/world/MapleMessenger.class b/out/production/A079/handling/world/MapleMessenger.class
new file mode 100644
index 0000000..cf47e6b
Binary files /dev/null and b/out/production/A079/handling/world/MapleMessenger.class differ
diff --git a/out/production/A079/handling/world/MapleMessengerCharacter.class b/out/production/A079/handling/world/MapleMessengerCharacter.class
new file mode 100644
index 0000000..6c10e59
Binary files /dev/null and b/out/production/A079/handling/world/MapleMessengerCharacter.class differ
diff --git a/out/production/A079/handling/world/MapleParty.class b/out/production/A079/handling/world/MapleParty.class
new file mode 100644
index 0000000..7a4672c
Binary files /dev/null and b/out/production/A079/handling/world/MapleParty.class differ
diff --git a/out/production/A079/handling/world/MaplePartyCharacter.class b/out/production/A079/handling/world/MaplePartyCharacter.class
new file mode 100644
index 0000000..fd35e04
Binary files /dev/null and b/out/production/A079/handling/world/MaplePartyCharacter.class differ
diff --git a/out/production/A079/handling/world/PartyOperation.class b/out/production/A079/handling/world/PartyOperation.class
new file mode 100644
index 0000000..7282c6e
Binary files /dev/null and b/out/production/A079/handling/world/PartyOperation.class differ
diff --git a/out/production/A079/handling/world/PlayerBuffStorage.class b/out/production/A079/handling/world/PlayerBuffStorage.class
new file mode 100644
index 0000000..d39297c
Binary files /dev/null and b/out/production/A079/handling/world/PlayerBuffStorage.class differ
diff --git a/out/production/A079/handling/world/PlayerBuffValueHolder.class b/out/production/A079/handling/world/PlayerBuffValueHolder.class
new file mode 100644
index 0000000..f204eaa
Binary files /dev/null and b/out/production/A079/handling/world/PlayerBuffValueHolder.class differ
diff --git a/out/production/A079/handling/world/World$1.class b/out/production/A079/handling/world/World$1.class
new file mode 100644
index 0000000..d9d153a
Binary files /dev/null and b/out/production/A079/handling/world/World$1.class differ
diff --git a/out/production/A079/handling/world/World$2.class b/out/production/A079/handling/world/World$2.class
new file mode 100644
index 0000000..778ff07
Binary files /dev/null and b/out/production/A079/handling/world/World$2.class differ
diff --git a/out/production/A079/handling/world/World$3.class b/out/production/A079/handling/world/World$3.class
new file mode 100644
index 0000000..75f4e89
Binary files /dev/null and b/out/production/A079/handling/world/World$3.class differ
diff --git a/out/production/A079/handling/world/World$4.class b/out/production/A079/handling/world/World$4.class
new file mode 100644
index 0000000..2da428c
Binary files /dev/null and b/out/production/A079/handling/world/World$4.class differ
diff --git a/out/production/A079/handling/world/World$5.class b/out/production/A079/handling/world/World$5.class
new file mode 100644
index 0000000..7e6d815
Binary files /dev/null and b/out/production/A079/handling/world/World$5.class differ
diff --git a/out/production/A079/handling/world/World$6.class b/out/production/A079/handling/world/World$6.class
new file mode 100644
index 0000000..a3b308c
Binary files /dev/null and b/out/production/A079/handling/world/World$6.class differ
diff --git a/out/production/A079/handling/world/World$Alliance.class b/out/production/A079/handling/world/World$Alliance.class
new file mode 100644
index 0000000..0cf0b16
Binary files /dev/null and b/out/production/A079/handling/world/World$Alliance.class differ
diff --git a/out/production/A079/handling/world/World$Broadcast.class b/out/production/A079/handling/world/World$Broadcast.class
new file mode 100644
index 0000000..0c4aaf8
Binary files /dev/null and b/out/production/A079/handling/world/World$Broadcast.class differ
diff --git a/out/production/A079/handling/world/World$Buddy.class b/out/production/A079/handling/world/World$Buddy.class
new file mode 100644
index 0000000..7cca542
Binary files /dev/null and b/out/production/A079/handling/world/World$Buddy.class differ
diff --git a/out/production/A079/handling/world/World$Family.class b/out/production/A079/handling/world/World$Family.class
new file mode 100644
index 0000000..f21a9b5
Binary files /dev/null and b/out/production/A079/handling/world/World$Family.class differ
diff --git a/out/production/A079/handling/world/World$Find.class b/out/production/A079/handling/world/World$Find.class
new file mode 100644
index 0000000..2b0208d
Binary files /dev/null and b/out/production/A079/handling/world/World$Find.class differ
diff --git a/out/production/A079/handling/world/World$Guild.class b/out/production/A079/handling/world/World$Guild.class
new file mode 100644
index 0000000..466cb9b
Binary files /dev/null and b/out/production/A079/handling/world/World$Guild.class differ
diff --git a/out/production/A079/handling/world/World$Messenger.class b/out/production/A079/handling/world/World$Messenger.class
new file mode 100644
index 0000000..eda2b74
Binary files /dev/null and b/out/production/A079/handling/world/World$Messenger.class differ
diff --git a/out/production/A079/handling/world/World$Party.class b/out/production/A079/handling/world/World$Party.class
new file mode 100644
index 0000000..d5dda63
Binary files /dev/null and b/out/production/A079/handling/world/World$Party.class differ
diff --git a/out/production/A079/handling/world/World$Respawn.class b/out/production/A079/handling/world/World$Respawn.class
new file mode 100644
index 0000000..41bc091
Binary files /dev/null and b/out/production/A079/handling/world/World$Respawn.class differ
diff --git a/out/production/A079/handling/world/World.class b/out/production/A079/handling/world/World.class
new file mode 100644
index 0000000..91b9fe6
Binary files /dev/null and b/out/production/A079/handling/world/World.class differ
diff --git a/out/production/A079/handling/world/family/MapleFamily$FCOp.class b/out/production/A079/handling/world/family/MapleFamily$FCOp.class
new file mode 100644
index 0000000..623f31c
Binary files /dev/null and b/out/production/A079/handling/world/family/MapleFamily$FCOp.class differ
diff --git a/out/production/A079/handling/world/family/MapleFamily.class b/out/production/A079/handling/world/family/MapleFamily.class
new file mode 100644
index 0000000..785b92c
Binary files /dev/null and b/out/production/A079/handling/world/family/MapleFamily.class differ
diff --git a/out/production/A079/handling/world/family/MapleFamilyBuff$MapleFamilyBuffEntry.class b/out/production/A079/handling/world/family/MapleFamilyBuff$MapleFamilyBuffEntry.class
new file mode 100644
index 0000000..c5b23c8
Binary files /dev/null and b/out/production/A079/handling/world/family/MapleFamilyBuff$MapleFamilyBuffEntry.class differ
diff --git a/out/production/A079/handling/world/family/MapleFamilyBuff.class b/out/production/A079/handling/world/family/MapleFamilyBuff.class
new file mode 100644
index 0000000..b0e5339
Binary files /dev/null and b/out/production/A079/handling/world/family/MapleFamilyBuff.class differ
diff --git a/out/production/A079/handling/world/family/MapleFamilyCharacter.class b/out/production/A079/handling/world/family/MapleFamilyCharacter.class
new file mode 100644
index 0000000..1f7383c
Binary files /dev/null and b/out/production/A079/handling/world/family/MapleFamilyCharacter.class differ
diff --git a/out/production/A079/handling/world/guild/MapleBBSThread$MapleBBSReply.class b/out/production/A079/handling/world/guild/MapleBBSThread$MapleBBSReply.class
new file mode 100644
index 0000000..248db7c
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleBBSThread$MapleBBSReply.class differ
diff --git a/out/production/A079/handling/world/guild/MapleBBSThread$ThreadComparator.class b/out/production/A079/handling/world/guild/MapleBBSThread$ThreadComparator.class
new file mode 100644
index 0000000..59e220c
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleBBSThread$ThreadComparator.class differ
diff --git a/out/production/A079/handling/world/guild/MapleBBSThread.class b/out/production/A079/handling/world/guild/MapleBBSThread.class
new file mode 100644
index 0000000..b506810
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleBBSThread.class differ
diff --git a/out/production/A079/handling/world/guild/MapleGuild$BCOp.class b/out/production/A079/handling/world/guild/MapleGuild$BCOp.class
new file mode 100644
index 0000000..f0cbce8
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleGuild$BCOp.class differ
diff --git a/out/production/A079/handling/world/guild/MapleGuild.class b/out/production/A079/handling/world/guild/MapleGuild.class
new file mode 100644
index 0000000..f6fa98e
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleGuild.class differ
diff --git a/out/production/A079/handling/world/guild/MapleGuildAlliance$GAOp.class b/out/production/A079/handling/world/guild/MapleGuildAlliance$GAOp.class
new file mode 100644
index 0000000..319e9a3
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleGuildAlliance$GAOp.class differ
diff --git a/out/production/A079/handling/world/guild/MapleGuildAlliance.class b/out/production/A079/handling/world/guild/MapleGuildAlliance.class
new file mode 100644
index 0000000..6e3a57a
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleGuildAlliance.class differ
diff --git a/out/production/A079/handling/world/guild/MapleGuildCharacter.class b/out/production/A079/handling/world/guild/MapleGuildCharacter.class
new file mode 100644
index 0000000..a7bd3b0
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleGuildCharacter.class differ
diff --git a/out/production/A079/handling/world/guild/MapleGuildResponse.class b/out/production/A079/handling/world/guild/MapleGuildResponse.class
new file mode 100644
index 0000000..0aad406
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleGuildResponse.class differ
diff --git a/out/production/A079/handling/world/guild/MapleGuildSummary.class b/out/production/A079/handling/world/guild/MapleGuildSummary.class
new file mode 100644
index 0000000..a7bda81
Binary files /dev/null and b/out/production/A079/handling/world/guild/MapleGuildSummary.class differ
diff --git a/out/production/A079/image/01003112.png b/out/production/A079/image/01003112.png
new file mode 100644
index 0000000..a75c093
Binary files /dev/null and b/out/production/A079/image/01003112.png differ
diff --git a/out/production/A079/image/01003824.png b/out/production/A079/image/01003824.png
new file mode 100644
index 0000000..33b1724
Binary files /dev/null and b/out/production/A079/image/01003824.png differ
diff --git a/out/production/A079/image/100.png b/out/production/A079/image/100.png
new file mode 100644
index 0000000..78ca240
Binary files /dev/null and b/out/production/A079/image/100.png differ
diff --git a/out/production/A079/image/101.png b/out/production/A079/image/101.png
new file mode 100644
index 0000000..58a57e5
Binary files /dev/null and b/out/production/A079/image/101.png differ
diff --git a/out/production/A079/image/111.png b/out/production/A079/image/111.png
new file mode 100644
index 0000000..a4d3fc1
Binary files /dev/null and b/out/production/A079/image/111.png differ
diff --git a/out/production/A079/image/123.png b/out/production/A079/image/123.png
new file mode 100644
index 0000000..09a9a81
Binary files /dev/null and b/out/production/A079/image/123.png differ
diff --git a/out/production/A079/image/1802034.png b/out/production/A079/image/1802034.png
new file mode 100644
index 0000000..6f0e052
Binary files /dev/null and b/out/production/A079/image/1802034.png differ
diff --git a/out/production/A079/image/1802665.png b/out/production/A079/image/1802665.png
new file mode 100644
index 0000000..034efb3
Binary files /dev/null and b/out/production/A079/image/1802665.png differ
diff --git a/out/production/A079/image/2000001.png b/out/production/A079/image/2000001.png
new file mode 100644
index 0000000..e0dff08
Binary files /dev/null and b/out/production/A079/image/2000001.png differ
diff --git a/out/production/A079/image/2022442.png b/out/production/A079/image/2022442.png
new file mode 100644
index 0000000..da2f386
Binary files /dev/null and b/out/production/A079/image/2022442.png differ
diff --git a/out/production/A079/image/2022451.png b/out/production/A079/image/2022451.png
new file mode 100644
index 0000000..08c7bd6
Binary files /dev/null and b/out/production/A079/image/2022451.png differ
diff --git a/out/production/A079/image/2022452.png b/out/production/A079/image/2022452.png
new file mode 100644
index 0000000..514462e
Binary files /dev/null and b/out/production/A079/image/2022452.png differ
diff --git a/out/production/A079/image/2030000.png b/out/production/A079/image/2030000.png
new file mode 100644
index 0000000..34c184e
Binary files /dev/null and b/out/production/A079/image/2030000.png differ
diff --git a/out/production/A079/image/2040236.png b/out/production/A079/image/2040236.png
new file mode 100644
index 0000000..b8031a9
Binary files /dev/null and b/out/production/A079/image/2040236.png differ
diff --git a/out/production/A079/image/2040335.png b/out/production/A079/image/2040335.png
new file mode 100644
index 0000000..d8cb4bc
Binary files /dev/null and b/out/production/A079/image/2040335.png differ
diff --git a/out/production/A079/image/2070005.png b/out/production/A079/image/2070005.png
new file mode 100644
index 0000000..5fd557b
Binary files /dev/null and b/out/production/A079/image/2070005.png differ
diff --git a/out/production/A079/image/2435108.png b/out/production/A079/image/2435108.png
new file mode 100644
index 0000000..eace636
Binary files /dev/null and b/out/production/A079/image/2435108.png differ
diff --git a/out/production/A079/image/2470000.png b/out/production/A079/image/2470000.png
new file mode 100644
index 0000000..241e3f4
Binary files /dev/null and b/out/production/A079/image/2470000.png differ
diff --git a/out/production/A079/image/2614075.png b/out/production/A079/image/2614075.png
new file mode 100644
index 0000000..8e32a98
Binary files /dev/null and b/out/production/A079/image/2614075.png differ
diff --git a/out/production/A079/image/2630205.png b/out/production/A079/image/2630205.png
new file mode 100644
index 0000000..37af20e
Binary files /dev/null and b/out/production/A079/image/2630205.png differ
diff --git a/out/production/A079/image/3010025.png b/out/production/A079/image/3010025.png
new file mode 100644
index 0000000..8fad018
Binary files /dev/null and b/out/production/A079/image/3010025.png differ
diff --git a/out/production/A079/image/3800131.png b/out/production/A079/image/3800131.png
new file mode 100644
index 0000000..a6be99a
Binary files /dev/null and b/out/production/A079/image/3800131.png differ
diff --git a/out/production/A079/image/3800157.png b/out/production/A079/image/3800157.png
new file mode 100644
index 0000000..5f89975
Binary files /dev/null and b/out/production/A079/image/3800157.png differ
diff --git a/out/production/A079/image/3800158.png b/out/production/A079/image/3800158.png
new file mode 100644
index 0000000..c72d088
Binary files /dev/null and b/out/production/A079/image/3800158.png differ
diff --git a/out/production/A079/image/3800159.png b/out/production/A079/image/3800159.png
new file mode 100644
index 0000000..88e0903
Binary files /dev/null and b/out/production/A079/image/3800159.png differ
diff --git a/out/production/A079/image/3800160.png b/out/production/A079/image/3800160.png
new file mode 100644
index 0000000..eac887a
Binary files /dev/null and b/out/production/A079/image/3800160.png differ
diff --git a/out/production/A079/image/3800161.png b/out/production/A079/image/3800161.png
new file mode 100644
index 0000000..e8fcce8
Binary files /dev/null and b/out/production/A079/image/3800161.png differ
diff --git a/out/production/A079/image/3800162.png b/out/production/A079/image/3800162.png
new file mode 100644
index 0000000..d51bee4
Binary files /dev/null and b/out/production/A079/image/3800162.png differ
diff --git a/out/production/A079/image/3800163.png b/out/production/A079/image/3800163.png
new file mode 100644
index 0000000..c9ee7cb
Binary files /dev/null and b/out/production/A079/image/3800163.png differ
diff --git a/out/production/A079/image/3800871.png b/out/production/A079/image/3800871.png
new file mode 100644
index 0000000..e5e5a67
Binary files /dev/null and b/out/production/A079/image/3800871.png differ
diff --git a/out/production/A079/image/3801286.png b/out/production/A079/image/3801286.png
new file mode 100644
index 0000000..0fd64ae
Binary files /dev/null and b/out/production/A079/image/3801286.png differ
diff --git a/out/production/A079/image/3801287.png b/out/production/A079/image/3801287.png
new file mode 100644
index 0000000..fa96591
Binary files /dev/null and b/out/production/A079/image/3801287.png differ
diff --git a/out/production/A079/image/3801288.png b/out/production/A079/image/3801288.png
new file mode 100644
index 0000000..a5486b9
Binary files /dev/null and b/out/production/A079/image/3801288.png differ
diff --git a/out/production/A079/image/3801289.png b/out/production/A079/image/3801289.png
new file mode 100644
index 0000000..ba2bfda
Binary files /dev/null and b/out/production/A079/image/3801289.png differ
diff --git a/out/production/A079/image/3801290.png b/out/production/A079/image/3801290.png
new file mode 100644
index 0000000..264cdcf
Binary files /dev/null and b/out/production/A079/image/3801290.png differ
diff --git a/out/production/A079/image/3801291.png b/out/production/A079/image/3801291.png
new file mode 100644
index 0000000..2be921f
Binary files /dev/null and b/out/production/A079/image/3801291.png differ
diff --git a/out/production/A079/image/3801292.png b/out/production/A079/image/3801292.png
new file mode 100644
index 0000000..23e6e2c
Binary files /dev/null and b/out/production/A079/image/3801292.png differ
diff --git a/out/production/A079/image/3801293.png b/out/production/A079/image/3801293.png
new file mode 100644
index 0000000..7cf79aa
Binary files /dev/null and b/out/production/A079/image/3801293.png differ
diff --git a/out/production/A079/image/3801294.png b/out/production/A079/image/3801294.png
new file mode 100644
index 0000000..02aa250
Binary files /dev/null and b/out/production/A079/image/3801294.png differ
diff --git a/out/production/A079/image/3801295.png b/out/production/A079/image/3801295.png
new file mode 100644
index 0000000..8b8bb3f
Binary files /dev/null and b/out/production/A079/image/3801295.png differ
diff --git a/out/production/A079/image/3801296.png b/out/production/A079/image/3801296.png
new file mode 100644
index 0000000..2f87541
Binary files /dev/null and b/out/production/A079/image/3801296.png differ
diff --git a/out/production/A079/image/3801297.png b/out/production/A079/image/3801297.png
new file mode 100644
index 0000000..3791974
Binary files /dev/null and b/out/production/A079/image/3801297.png differ
diff --git a/out/production/A079/image/3801309.png b/out/production/A079/image/3801309.png
new file mode 100644
index 0000000..2d87f61
Binary files /dev/null and b/out/production/A079/image/3801309.png differ
diff --git a/out/production/A079/image/3801310.png b/out/production/A079/image/3801310.png
new file mode 100644
index 0000000..b89128e
Binary files /dev/null and b/out/production/A079/image/3801310.png differ
diff --git a/out/production/A079/image/3801312.png b/out/production/A079/image/3801312.png
new file mode 100644
index 0000000..89d2301
Binary files /dev/null and b/out/production/A079/image/3801312.png differ
diff --git a/out/production/A079/image/3801313.png b/out/production/A079/image/3801313.png
new file mode 100644
index 0000000..178f85c
Binary files /dev/null and b/out/production/A079/image/3801313.png differ
diff --git a/out/production/A079/image/3801314.png b/out/production/A079/image/3801314.png
new file mode 100644
index 0000000..ddaf3c8
Binary files /dev/null and b/out/production/A079/image/3801314.png differ
diff --git a/out/production/A079/image/3801315.png b/out/production/A079/image/3801315.png
new file mode 100644
index 0000000..13614f7
Binary files /dev/null and b/out/production/A079/image/3801315.png differ
diff --git a/out/production/A079/image/3801316.png b/out/production/A079/image/3801316.png
new file mode 100644
index 0000000..7595955
Binary files /dev/null and b/out/production/A079/image/3801316.png differ
diff --git a/out/production/A079/image/3801462.png b/out/production/A079/image/3801462.png
new file mode 100644
index 0000000..8d65311
Binary files /dev/null and b/out/production/A079/image/3801462.png differ
diff --git a/out/production/A079/image/3801511.png b/out/production/A079/image/3801511.png
new file mode 100644
index 0000000..b0a8103
Binary files /dev/null and b/out/production/A079/image/3801511.png differ
diff --git a/out/production/A079/image/3801513.png b/out/production/A079/image/3801513.png
new file mode 100644
index 0000000..e653e42
Binary files /dev/null and b/out/production/A079/image/3801513.png differ
diff --git a/out/production/A079/image/3801514.png b/out/production/A079/image/3801514.png
new file mode 100644
index 0000000..d22ca58
Binary files /dev/null and b/out/production/A079/image/3801514.png differ
diff --git a/out/production/A079/image/3801515.png b/out/production/A079/image/3801515.png
new file mode 100644
index 0000000..b34b2ae
Binary files /dev/null and b/out/production/A079/image/3801515.png differ
diff --git a/out/production/A079/image/3994106.png b/out/production/A079/image/3994106.png
new file mode 100644
index 0000000..cdbd710
Binary files /dev/null and b/out/production/A079/image/3994106.png differ
diff --git a/out/production/A079/image/3994183.png b/out/production/A079/image/3994183.png
new file mode 100644
index 0000000..5b778ac
Binary files /dev/null and b/out/production/A079/image/3994183.png differ
diff --git a/out/production/A079/image/3994264.png b/out/production/A079/image/3994264.png
new file mode 100644
index 0000000..103d347
Binary files /dev/null and b/out/production/A079/image/3994264.png differ
diff --git a/out/production/A079/image/3994506.png b/out/production/A079/image/3994506.png
new file mode 100644
index 0000000..2d089fc
Binary files /dev/null and b/out/production/A079/image/3994506.png differ
diff --git a/out/production/A079/image/3994609.png b/out/production/A079/image/3994609.png
new file mode 100644
index 0000000..86b6af8
Binary files /dev/null and b/out/production/A079/image/3994609.png differ
diff --git a/out/production/A079/image/3994610.png b/out/production/A079/image/3994610.png
new file mode 100644
index 0000000..e3db6fe
Binary files /dev/null and b/out/production/A079/image/3994610.png differ
diff --git a/out/production/A079/image/3994691.png b/out/production/A079/image/3994691.png
new file mode 100644
index 0000000..3e9c324
Binary files /dev/null and b/out/production/A079/image/3994691.png differ
diff --git a/out/production/A079/image/3994706.png b/out/production/A079/image/3994706.png
new file mode 100644
index 0000000..85cf640
Binary files /dev/null and b/out/production/A079/image/3994706.png differ
diff --git a/out/production/A079/image/3994730.png b/out/production/A079/image/3994730.png
new file mode 100644
index 0000000..0683dbd
Binary files /dev/null and b/out/production/A079/image/3994730.png differ
diff --git a/out/production/A079/image/4030001.png b/out/production/A079/image/4030001.png
new file mode 100644
index 0000000..3cd4236
Binary files /dev/null and b/out/production/A079/image/4030001.png differ
diff --git a/out/production/A079/image/4030011.png b/out/production/A079/image/4030011.png
new file mode 100644
index 0000000..b2ab4cd
Binary files /dev/null and b/out/production/A079/image/4030011.png differ
diff --git a/out/production/A079/image/4031039.png b/out/production/A079/image/4031039.png
new file mode 100644
index 0000000..604c5ea
Binary files /dev/null and b/out/production/A079/image/4031039.png differ
diff --git a/out/production/A079/image/4031040.png b/out/production/A079/image/4031040.png
new file mode 100644
index 0000000..0cca619
Binary files /dev/null and b/out/production/A079/image/4031040.png differ
diff --git a/out/production/A079/image/4031041.png b/out/production/A079/image/4031041.png
new file mode 100644
index 0000000..73684f2
Binary files /dev/null and b/out/production/A079/image/4031041.png differ
diff --git a/out/production/A079/image/4031683.png b/out/production/A079/image/4031683.png
new file mode 100644
index 0000000..9d4ef55
Binary files /dev/null and b/out/production/A079/image/4031683.png differ
diff --git a/out/production/A079/image/4110000.png b/out/production/A079/image/4110000.png
new file mode 100644
index 0000000..511a9ec
Binary files /dev/null and b/out/production/A079/image/4110000.png differ
diff --git a/out/production/A079/image/4310003.png b/out/production/A079/image/4310003.png
new file mode 100644
index 0000000..0c1326f
Binary files /dev/null and b/out/production/A079/image/4310003.png differ
diff --git a/out/production/A079/image/5062006.png b/out/production/A079/image/5062006.png
new file mode 100644
index 0000000..b9f8a36
Binary files /dev/null and b/out/production/A079/image/5062006.png differ
diff --git a/out/production/A079/image/5680149.png b/out/production/A079/image/5680149.png
new file mode 100644
index 0000000..0e4ebfc
Binary files /dev/null and b/out/production/A079/image/5680149.png differ
diff --git a/out/production/A079/image/9104092.png b/out/production/A079/image/9104092.png
new file mode 100644
index 0000000..bb5a4f3
Binary files /dev/null and b/out/production/A079/image/9104092.png differ
diff --git a/out/production/A079/image/98.png b/out/production/A079/image/98.png
new file mode 100644
index 0000000..086b413
Binary files /dev/null and b/out/production/A079/image/98.png differ
diff --git a/out/production/A079/image/99.png b/out/production/A079/image/99.png
new file mode 100644
index 0000000..bae3c16
Binary files /dev/null and b/out/production/A079/image/99.png differ
diff --git a/out/production/A079/image/GM工具.png b/out/production/A079/image/GM工具.png
new file mode 100644
index 0000000..8b96537
Binary files /dev/null and b/out/production/A079/image/GM工具.png differ
diff --git a/out/production/A079/image/Icon.png b/out/production/A079/image/Icon.png
new file mode 100644
index 0000000..a0057f2
Binary files /dev/null and b/out/production/A079/image/Icon.png differ
diff --git a/out/production/A079/image/OFF1.png b/out/production/A079/image/OFF1.png
new file mode 100644
index 0000000..2f1ff9e
Binary files /dev/null and b/out/production/A079/image/OFF1.png differ
diff --git a/out/production/A079/image/OFF2.png b/out/production/A079/image/OFF2.png
new file mode 100644
index 0000000..ab4eb7e
Binary files /dev/null and b/out/production/A079/image/OFF2.png differ
diff --git a/out/production/A079/image/OFF3.png b/out/production/A079/image/OFF3.png
new file mode 100644
index 0000000..8b05d5a
Binary files /dev/null and b/out/production/A079/image/OFF3.png differ
diff --git a/out/production/A079/image/ON1.png b/out/production/A079/image/ON1.png
new file mode 100644
index 0000000..cb714d1
Binary files /dev/null and b/out/production/A079/image/ON1.png differ
diff --git a/out/production/A079/image/ON2.png b/out/production/A079/image/ON2.png
new file mode 100644
index 0000000..f442610
Binary files /dev/null and b/out/production/A079/image/ON2.png differ
diff --git a/out/production/A079/image/ON3.png b/out/production/A079/image/ON3.png
new file mode 100644
index 0000000..6265483
Binary files /dev/null and b/out/production/A079/image/ON3.png differ
diff --git a/out/production/A079/image/QQ.png b/out/production/A079/image/QQ.png
new file mode 100644
index 0000000..a7a2cb0
Binary files /dev/null and b/out/production/A079/image/QQ.png differ
diff --git a/out/production/A079/image/badge_magnolia_32px_16627_easyicon.net.png b/out/production/A079/image/badge_magnolia_32px_16627_easyicon.net.png
new file mode 100644
index 0000000..9fb5f1b
Binary files /dev/null and b/out/production/A079/image/badge_magnolia_32px_16627_easyicon.net.png differ
diff --git a/out/production/A079/image/bg.png b/out/production/A079/image/bg.png
new file mode 100644
index 0000000..1900743
Binary files /dev/null and b/out/production/A079/image/bg.png differ
diff --git a/out/production/A079/image/bg3.png b/out/production/A079/image/bg3.png
new file mode 100644
index 0000000..03e98d1
Binary files /dev/null and b/out/production/A079/image/bg3.png differ
diff --git a/out/production/A079/image/common_40_icon.png b/out/production/A079/image/common_40_icon.png
new file mode 100644
index 0000000..f46f9aa
Binary files /dev/null and b/out/production/A079/image/common_40_icon.png differ
diff --git a/out/production/A079/image/代码查询器.png b/out/production/A079/image/代码查询器.png
new file mode 100644
index 0000000..313777f
Binary files /dev/null and b/out/production/A079/image/代码查询器.png differ
diff --git a/out/production/A079/image/任务管理.png b/out/production/A079/image/任务管理.png
new file mode 100644
index 0000000..1ee3033
Binary files /dev/null and b/out/production/A079/image/任务管理.png differ
diff --git a/out/production/A079/image/信息日志.png b/out/production/A079/image/信息日志.png
new file mode 100644
index 0000000..7579af2
Binary files /dev/null and b/out/production/A079/image/信息日志.png differ
diff --git a/out/production/A079/image/充值.png b/out/production/A079/image/充值.png
new file mode 100644
index 0000000..f4644f8
Binary files /dev/null and b/out/production/A079/image/充值.png differ
diff --git a/out/production/A079/image/全部日志.png b/out/production/A079/image/全部日志.png
new file mode 100644
index 0000000..53623d0
Binary files /dev/null and b/out/production/A079/image/全部日志.png differ
diff --git a/out/production/A079/image/关于.png b/out/production/A079/image/关于.png
new file mode 100644
index 0000000..00e4919
Binary files /dev/null and b/out/production/A079/image/关于.png differ
diff --git a/out/production/A079/image/关闭.png b/out/production/A079/image/关闭.png
new file mode 100644
index 0000000..296b900
Binary files /dev/null and b/out/production/A079/image/关闭.png differ
diff --git a/out/production/A079/image/关闭服务器.png b/out/production/A079/image/关闭服务器.png
new file mode 100644
index 0000000..8b6f2e3
Binary files /dev/null and b/out/production/A079/image/关闭服务器.png differ
diff --git a/out/production/A079/image/冒险岛.png b/out/production/A079/image/冒险岛.png
new file mode 100644
index 0000000..a0057f2
Binary files /dev/null and b/out/production/A079/image/冒险岛.png differ
diff --git a/out/production/A079/image/发送.png b/out/production/A079/image/发送.png
new file mode 100644
index 0000000..760a97e
Binary files /dev/null and b/out/production/A079/image/发送.png differ
diff --git a/out/production/A079/image/发送物品.png b/out/production/A079/image/发送物品.png
new file mode 100644
index 0000000..a2dea94
Binary files /dev/null and b/out/production/A079/image/发送物品.png differ
diff --git a/out/production/A079/image/召唤生物.png b/out/production/A079/image/召唤生物.png
new file mode 100644
index 0000000..51e96df
Binary files /dev/null and b/out/production/A079/image/召唤生物.png differ
diff --git a/out/production/A079/image/后台.png b/out/production/A079/image/后台.png
new file mode 100644
index 0000000..2f6cf34
Binary files /dev/null and b/out/production/A079/image/后台.png differ
diff --git a/out/production/A079/image/商店管理.png b/out/production/A079/image/商店管理.png
new file mode 100644
index 0000000..9250336
Binary files /dev/null and b/out/production/A079/image/商店管理.png differ
diff --git a/out/production/A079/image/喇叭1.png b/out/production/A079/image/喇叭1.png
new file mode 100644
index 0000000..8096df9
Binary files /dev/null and b/out/production/A079/image/喇叭1.png differ
diff --git a/out/production/A079/image/喇叭2.png b/out/production/A079/image/喇叭2.png
new file mode 100644
index 0000000..ff36723
Binary files /dev/null and b/out/production/A079/image/喇叭2.png differ
diff --git a/out/production/A079/image/喇叭3.png b/out/production/A079/image/喇叭3.png
new file mode 100644
index 0000000..a0b2d6e
Binary files /dev/null and b/out/production/A079/image/喇叭3.png differ
diff --git a/out/production/A079/image/喇叭4.png b/out/production/A079/image/喇叭4.png
new file mode 100644
index 0000000..f8136f7
Binary files /dev/null and b/out/production/A079/image/喇叭4.png differ
diff --git a/out/production/A079/image/喇叭5.png b/out/production/A079/image/喇叭5.png
new file mode 100644
index 0000000..c561f43
Binary files /dev/null and b/out/production/A079/image/喇叭5.png differ
diff --git a/out/production/A079/image/大勺爸爸.png b/out/production/A079/image/大勺爸爸.png
new file mode 100644
index 0000000..6c759f6
Binary files /dev/null and b/out/production/A079/image/大勺爸爸.png differ
diff --git a/out/production/A079/image/封包日志.png b/out/production/A079/image/封包日志.png
new file mode 100644
index 0000000..568181d
Binary files /dev/null and b/out/production/A079/image/封包日志.png differ
diff --git a/out/production/A079/image/工具.png b/out/production/A079/image/工具.png
new file mode 100644
index 0000000..e1c6154
Binary files /dev/null and b/out/production/A079/image/工具.png differ
diff --git a/out/production/A079/image/常用功能.png b/out/production/A079/image/常用功能.png
new file mode 100644
index 0000000..66576f6
Binary files /dev/null and b/out/production/A079/image/常用功能.png differ
diff --git a/out/production/A079/image/开启.png b/out/production/A079/image/开启.png
new file mode 100644
index 0000000..fc618bd
Binary files /dev/null and b/out/production/A079/image/开启.png differ
diff --git a/out/production/A079/image/怪物血量.png b/out/production/A079/image/怪物血量.png
new file mode 100644
index 0000000..4bc5bb8
Binary files /dev/null and b/out/production/A079/image/怪物血量.png differ
diff --git a/out/production/A079/image/扳手.png b/out/production/A079/image/扳手.png
new file mode 100644
index 0000000..9136f76
Binary files /dev/null and b/out/production/A079/image/扳手.png differ
diff --git a/out/production/A079/image/技能魔改.png b/out/production/A079/image/技能魔改.png
new file mode 100644
index 0000000..545c491
Binary files /dev/null and b/out/production/A079/image/技能魔改.png differ
diff --git a/out/production/A079/image/提交问题反馈.png b/out/production/A079/image/提交问题反馈.png
new file mode 100644
index 0000000..bba29b2
Binary files /dev/null and b/out/production/A079/image/提交问题反馈.png differ
diff --git a/out/production/A079/image/教程.png b/out/production/A079/image/教程.png
new file mode 100644
index 0000000..ea368a1
Binary files /dev/null and b/out/production/A079/image/教程.png differ
diff --git a/out/production/A079/image/日志.png b/out/production/A079/image/日志.png
new file mode 100644
index 0000000..1c94ad1
Binary files /dev/null and b/out/production/A079/image/日志.png differ
diff --git a/out/production/A079/image/更多设置.png b/out/production/A079/image/更多设置.png
new file mode 100644
index 0000000..43f11a0
Binary files /dev/null and b/out/production/A079/image/更多设置.png differ
diff --git a/out/production/A079/image/更新.png b/out/production/A079/image/更新.png
new file mode 100644
index 0000000..4776d5b
Binary files /dev/null and b/out/production/A079/image/更新.png differ
diff --git a/out/production/A079/image/服务设置.png b/out/production/A079/image/服务设置.png
new file mode 100644
index 0000000..6f82801
Binary files /dev/null and b/out/production/A079/image/服务设置.png differ
diff --git a/out/production/A079/image/模拟玩家.png b/out/production/A079/image/模拟玩家.png
new file mode 100644
index 0000000..d79331c
Binary files /dev/null and b/out/production/A079/image/模拟玩家.png differ
diff --git a/out/production/A079/image/游戏通知.png b/out/production/A079/image/游戏通知.png
new file mode 100644
index 0000000..bdabe6c
Binary files /dev/null and b/out/production/A079/image/游戏通知.png differ
diff --git a/out/production/A079/image/爆率.png b/out/production/A079/image/爆率.png
new file mode 100644
index 0000000..78b058d
Binary files /dev/null and b/out/production/A079/image/爆率.png differ
diff --git a/out/production/A079/image/玩家监控.png b/out/production/A079/image/玩家监控.png
new file mode 100644
index 0000000..811dea7
Binary files /dev/null and b/out/production/A079/image/玩家监控.png differ
diff --git a/out/production/A079/image/玩家装备背包.png b/out/production/A079/image/玩家装备背包.png
new file mode 100644
index 0000000..9d363a3
Binary files /dev/null and b/out/production/A079/image/玩家装备背包.png differ
diff --git a/out/production/A079/image/管理.png b/out/production/A079/image/管理.png
new file mode 100644
index 0000000..f624084
Binary files /dev/null and b/out/production/A079/image/管理.png differ
diff --git a/out/production/A079/image/管理全域掉落.png b/out/production/A079/image/管理全域掉落.png
new file mode 100644
index 0000000..0065d47
Binary files /dev/null and b/out/production/A079/image/管理全域掉落.png differ
diff --git a/out/production/A079/image/管理背包.png b/out/production/A079/image/管理背包.png
new file mode 100644
index 0000000..9cf1074
Binary files /dev/null and b/out/production/A079/image/管理背包.png differ
diff --git a/out/production/A079/image/管理自定义掉落.png b/out/production/A079/image/管理自定义掉落.png
new file mode 100644
index 0000000..560158d
Binary files /dev/null and b/out/production/A079/image/管理自定义掉落.png differ
diff --git a/out/production/A079/image/经验1.png b/out/production/A079/image/经验1.png
new file mode 100644
index 0000000..3dffb1b
Binary files /dev/null and b/out/production/A079/image/经验1.png differ
diff --git a/out/production/A079/image/自定义BUFF.png b/out/production/A079/image/自定义BUFF.png
new file mode 100644
index 0000000..5c89850
Binary files /dev/null and b/out/production/A079/image/自定义BUFF.png differ
diff --git a/out/production/A079/image/自定义购物中心.png b/out/production/A079/image/自定义购物中心.png
new file mode 100644
index 0000000..b0804d9
Binary files /dev/null and b/out/production/A079/image/自定义购物中心.png differ
diff --git a/out/production/A079/image/至尊版工具.png b/out/production/A079/image/至尊版工具.png
new file mode 100644
index 0000000..7b16cc3
Binary files /dev/null and b/out/production/A079/image/至尊版工具.png differ
diff --git a/out/production/A079/image/装备修改.png b/out/production/A079/image/装备修改.png
new file mode 100644
index 0000000..b64391e
Binary files /dev/null and b/out/production/A079/image/装备修改.png differ
diff --git a/out/production/A079/image/角色管理.png b/out/production/A079/image/角色管理.png
new file mode 100644
index 0000000..9947c77
Binary files /dev/null and b/out/production/A079/image/角色管理.png differ
diff --git a/out/production/A079/image/警告日志.png b/out/production/A079/image/警告日志.png
new file mode 100644
index 0000000..3bd8233
Binary files /dev/null and b/out/production/A079/image/警告日志.png differ
diff --git a/out/production/A079/image/设置.png b/out/production/A079/image/设置.png
new file mode 100644
index 0000000..6a92c59
Binary files /dev/null and b/out/production/A079/image/设置.png differ
diff --git a/out/production/A079/image/设置扳手.png b/out/production/A079/image/设置扳手.png
new file mode 100644
index 0000000..e709e4b
Binary files /dev/null and b/out/production/A079/image/设置扳手.png differ
diff --git a/out/production/A079/image/调试日志.png b/out/production/A079/image/调试日志.png
new file mode 100644
index 0000000..b2098ec
Binary files /dev/null and b/out/production/A079/image/调试日志.png differ
diff --git a/out/production/A079/image/通用设置.png b/out/production/A079/image/通用设置.png
new file mode 100644
index 0000000..a8299e2
Binary files /dev/null and b/out/production/A079/image/通用设置.png differ
diff --git a/out/production/A079/image/钓鱼.png b/out/production/A079/image/钓鱼.png
new file mode 100644
index 0000000..a6db77f
Binary files /dev/null and b/out/production/A079/image/钓鱼.png differ
diff --git a/out/production/A079/image/错误日志.png b/out/production/A079/image/错误日志.png
new file mode 100644
index 0000000..6e335cf
Binary files /dev/null and b/out/production/A079/image/错误日志.png differ
diff --git a/out/production/A079/image/问题.png b/out/production/A079/image/问题.png
new file mode 100644
index 0000000..31e768d
Binary files /dev/null and b/out/production/A079/image/问题.png differ
diff --git a/out/production/A079/image/静止.png b/out/production/A079/image/静止.png
new file mode 100644
index 0000000..d8f5aa0
Binary files /dev/null and b/out/production/A079/image/静止.png differ
diff --git a/out/production/A079/image/骰子.png b/out/production/A079/image/骰子.png
new file mode 100644
index 0000000..73e5216
Binary files /dev/null and b/out/production/A079/image/骰子.png differ
diff --git a/out/production/A079/image/魔方.png b/out/production/A079/image/魔方.png
new file mode 100644
index 0000000..5d4c456
Binary files /dev/null and b/out/production/A079/image/魔方.png differ
diff --git a/out/production/A079/org/netbeans/lib/awtextra/AbsoluteConstraints.class b/out/production/A079/org/netbeans/lib/awtextra/AbsoluteConstraints.class
new file mode 100644
index 0000000..49358d3
Binary files /dev/null and b/out/production/A079/org/netbeans/lib/awtextra/AbsoluteConstraints.class differ
diff --git a/out/production/A079/org/netbeans/lib/awtextra/AbsoluteLayout.class b/out/production/A079/org/netbeans/lib/awtextra/AbsoluteLayout.class
new file mode 100644
index 0000000..9b5a0ee
Binary files /dev/null and b/out/production/A079/org/netbeans/lib/awtextra/AbsoluteLayout.class differ
diff --git a/out/production/A079/ppSetting/Game.class b/out/production/A079/ppSetting/Game.class
new file mode 100644
index 0000000..cd99bc5
Binary files /dev/null and b/out/production/A079/ppSetting/Game.class differ
diff --git a/out/production/A079/properties/recv.ini b/out/production/A079/properties/recv.ini
new file mode 100644
index 0000000..9cfd90a
--- /dev/null
+++ b/out/production/A079/properties/recv.ini
@@ -0,0 +1,190 @@
+PONG = 0x13
+QUEST_MAPLEPOINTS = 0x6A
+LOGIN_PASSWORD = 0x01
+SERVERLIST_REQUEST = 0x02
+LICENSE_REQUEST = 0x03
+SET_GENDER = 0x04
+SERVERSTATUS_REQUEST = 0x05
+CHARLIST_REQUEST = 0x09
+CHAR_SELECT = 0x0A
+PLAYER_LOGGEDIN = 0x0B
+CHECK_CHAR_NAME = 0x0C
+CHECK_REGISTER_ACCOUNT = 0x0D
+CHECK_ACCOUNT = 0x0E
+REGISTER_ACCOUNT = 0x0F
+CREATE_CHAR = 0x11
+DELETE_CHAR = 0x12
+CLIENT_ERROR = 0x14
+STRANGE_DATA = 0x15
+#CLIENT_FEEDBACK = 0x0F
+#AUTH_SECOND_PASSWORD = 0x13
+#HELLO_LOGIN = 0x17
+#CLIENT_LOGOUT = 0x1A
+#HELLO_CHANNEL = 0xDA
+#RSA_KEY = 0x1C
+VICIOUS_HAMMER = 0x10D
+CHANGE_MAP = 0x21
+CHANGE_CHANNEL = 0x22
+ENTER_CASH_SHOP = 0x23
+MOVE_PLAYER = 0x24
+CANCEL_CHAIR = 0x25
+USE_CHAIR = 0x26
+#SHOW_EXP_CHAIR = 0x27
+CLOSE_RANGE_ATTACK = 0x28
+RANGED_ATTACK = 0x29
+MAGIC_ATTACK = 0x2A
+PASSIVE_ENERGY = 0x2B
+TAKE_DAMAGE = 0x2C
+GENERAL_CHAT = 0x2D
+CLOSE_CHALKBOARD = 0x2E
+FACE_EXPRESSION = 0x2F
+USE_ITEMEFFECT = 0x30
+WHEEL_OF_FORTUNE = 0x31
+MONSTER_BOOK_COVER = 0x35
+NPC_TALK = 0x36
+#REMOTE_STORE = 0x37
+NPC_TALK_MORE = 0x38
+NPC_SHOP = 0x3A
+STORAGE = 0x3B
+USE_HIRED_MERCHANT = 0x3C
+#USE_HIRED_FISHING = 0x3D
+MERCH_ITEM_STORE = 0x3D
+DUEY_ACTION = 0x3E
+OWL = 0x3F
+OWL_WARP = 0x40
+#USE_OWL_MINERVA = 0xFF
+
+ITEM_SORT = 0x42
+ITEM_GATHER = 0x43
+ITEM_MOVE = 0x44
+USE_ITEM = 0x45
+CANCEL_ITEM_EFFECT = 0x46
+USE_SUMMON_BAG = 0x48
+PET_FOOD = 0x49
+USE_MOUNT_FOOD = 0x4A
+USE_SCRIPTED_NPC_ITEM = 0x4B
+USE_CASH_ITEM = 0x4C
+USE_CATCH_ITEM = 0x4E
+USE_SKILL_BOOK = 0x4F
+#USE_TELE_ROCK = 0x51
+USE_RETURN_SCROLL = 0x52
+USE_UPGRADE_SCROLL = 0x53
+#USE_EQUIP_SCROLL = 0x52
+#USE_POTENTIAL_SCROLL = 0x53
+#USE_MAGNIFY_GLASS = 0x54
+DISTRIBUTE_AP = 0x54
+AUTO_ASSIGN_AP = 0x55
+HEAL_OVER_TIME = 0x56
+DISTRIBUTE_SP = 0x57
+SPECIAL_MOVE = 0x58
+CANCEL_BUFF = 0x59
+SKILL_EFFECT = 0x5A
+MESO_DROP = 0x5B
+GIVE_FAME = 0x5C
+CHAR_INFO_REQUEST = 0x5E
+SPAWN_PET = 0x5F
+CANCEL_DEBUFF = 0x60
+CHANGE_MAP_SPECIAL = 0x61
+USE_INNER_PORTAL = 0x62
+TROCK_ADD_MAP = 0x63
+LIE_DETECTOR = 0x64
+LIE_DETECTOR_SKILL = 0x65
+LIE_DETECTOR_RESPONSE = 0x66
+LIE_DETECTOR_REFRESH = 0x67
+QUEST_ACTION = 0x68
+
+SPECIAL_ATTACK = 0x6C
+SKILL_MACRO = 0x6D
+
+REWARD_ITEM = 0x72
+ITEM_MAKER = 0x71
+#REPAIR_ALL = 0x72
+#REPAIR = 0x73
+#FOLLOW_REQUEST = 0x78
+#FOLLOW_REPLY = 0x7A
+USE_TREASUER_CHEST = 0x73
+PARTYCHAT = 0x74
+WHISPER = 0x75
+MESSENGER = 0x76
+PLAYER_INTERACTION = 0x77
+PARTY_OPERATION = 0x78
+DENY_PARTY_REQUEST = 0x79
+#EXPEDITION_OPERATION = 0x76
+#EXPEDITION_LISTING = 0x77
+GUILD_OPERATION = 0x7A
+DENY_GUILD_REQUEST = 0x7B
+BUDDYLIST_MODIFY = 0x7E
+NOTE_ACTION = 0x7F
+USE_DOOR = 0x81
+CHANGE_KEYMAP = 0x83
+RPS_GAME = 0x84
+RING_ACTION = 0x85
+ALLIANCE_OPERATION = 0x93
+DENY_ALLIANCE_REQUEST = 0x94
+#BBS_OPERATION = 0x8C
+ENTER_MTS = 0x8D
+ITEM_BAOWU = 0x70
+ITEM_SUNZI = 0x8E
+REQUEST_FAMILY = 0x95
+OPEN_FAMILY = 0x96
+FAMILY_OPERATION = 0x97
+DELETE_JUNIOR = 0x98
+DELETE_SENIOR = 0x99
+ACCEPT_FAMILY = 0x9A
+USE_FAMILY = 0x9B
+FAMILY_PRECEPT = 0x9C
+FAMILY_SUMMON = 0x9D
+CYGNUS_SUMMON = 0x9E
+ARAN_COMBO = 0x9F
+#ITEM_UNLOCK = 0x95
+#UPDATE_CHAR_INFO = 0x97
+#SOLOMON = 0x9C
+#GACH_EXP = 0x9D
+#TRANSFORM_PLAYER = 0xA2
+#XMAS_SURPRISE = 0xA3
+#GAME_POLL = 0xA4
+MOVE_PET = 0xA5
+PET_CHAT = 0xA6
+PET_COMMAND = 0xA7
+PET_LOOT = 0xA8
+PET_AUTO_POT = 0xA9
+PET_IGNORE = 0xAA
+MOVE_SUMMON = 0xAD
+SUMMON_ATTACK = 0xAE
+DAMAGE_SUMMON = 0xAF
+#MOVE_DRAGON = 0xC2
+MOVE_LIFE = 0xB7
+AUTO_AGGRO = 0xB8
+FRIENDLY_DAMAGE = 0xBB
+MONSTER_BOMB = 0xBC
+#HYPNOTIZE_DMG = 0xBD
+#MOB_NODE = 0xBE
+#DISPLAY_NODE = 0xBF
+NPC_ACTION = 0xC0
+ITEM_PICKUP = 0xC6
+DAMAGE_REACTOR = 0xC9
+TOUCH_REACTOR = 0xCA
+SNOWBALL = 0xCF
+LEFT_KNOCK_BACK = 0xD0
+COCONUT = 0xD1
+MONSTER_CARNIVAL = 0xD7
+#PARTY_SEARCH_START = 0xDB
+#PARTY_SEARCH_STOP = 0xDC
+PARTY_SS = 0xDF
+#SHIP_OBJECT = 0xD9
+BEANS_OPERATION = 0xE2
+BEANS_UPDATE = 0xE3
+CS_UPDATE = 0xE8
+CASHSHOP_OPERATION = 0xE9
+COUPON_CODE = 0xEA
+
+#MAPLETV = 0xF6
+#UPDATE_QUEST = 0xF7
+#QUEST_ITEM = 0xF8
+#USE_ITEM_QUEST = 0xFA
+#TOUCHING_MTS = 0xFB
+#MTS_TAB = 0xFC
+
+
+ChatRoom_SYSTEM = 0x104
+Use_ViciousHammer = 0x10D
\ No newline at end of file
diff --git a/out/production/A079/properties/send.ini b/out/production/A079/properties/send.ini
new file mode 100644
index 0000000..42d3f3e
--- /dev/null
+++ b/out/production/A079/properties/send.ini
@@ -0,0 +1,222 @@
+ SPAWN_KITE_ERROR = 0x109
+ SPAWN_KITE = 0x10A
+ DESTROY_KITE = 0x10B
+ LOGIN_STATUS = 0x00
+ SERVERLIST = 0x09
+ CHARLIST = 0x0A
+ SERVER_IP = 0x0B
+ CHAR_NAME_RESPONSE = 0x0C
+ LICENSE_RESULT = 0x02
+ ADD_NEW_CHAR_ENTRY = 0x11
+ DELETE_CHAR_RESPONSE = 0xFF
+ CHANGE_CHANNEL = 0x13
+ PING = 0x14
+ CS_USE = 0x15
+ CHANNEL_SELECTED = 0x18
+ RELOG_RESPONSE = 0x16
+ SECONDPW_ERROR
+ CHOOSE_GENDER = 0x04
+ GENDER_SET = 0x05
+ SERVERSTATUS = 0x06
+ OPEN_WEB =0x76
+ INVENTORY_OPERATION = 0x20
+ MODIFY_INVENTORY_ITEM = 0x20
+ UPDATE_INVENTORY_SLOT = 0x21
+ UPDATE_STATS = 0x22
+ GIVE_BUFF = 0x23
+ CANCEL_BUFF = 0x24
+ TEMP_STATS = 0x25
+ TEMP_STATS_RESET = 0x26
+ UPDATE_SKILLS = 0x27
+ SKILL_USE_RESULT = 0x28
+ FAME_RESPONSE = 0x29
+ SHOW_STATUS_INFO = 0x2A
+ SHOW_NOTES = 0x2B
+ MAP_TRANSFER_RESULT = 0x2C
+ LIE_DETECTOR = 0x2D
+ CLAIM_RESULT = 0x2F
+ CLAIM_STATUS_CHANGED = 0x30
+ SET_TAMING_MOB_INFO = 0x31
+ SHOW_QUEST_COMPLETION = 0x33
+ ENTRUSTED_SHOP_CHECK_RESULT = 0x34
+ USE_SKILL_BOOK = 0x35
+ GATHER_ITEM_RESULT = 0x36
+ SORT_ITEM_RESULT = 0x37
+ CHAR_INFO = 0x3A
+ PARTY_OPERATION = 0x3B
+ BUDDYLIST = 0x3C
+ GUILD_OPERATION = 0x3E
+ ALLIANCE_OPERATION = 0x3F
+ SPAWN_PORTAL = 0x40
+ SERVERMESSAGE = 0x41
+ SHOP_SCANNER_RESULT = 0x43
+ SHOP_LINK_RESULT= 0x44
+ MARRIAGE_REQUEST = 0x49
+ MARRIAGE_RESULT = 0x4A
+ MARRAGE_EFFECT
+ SET_WEEK_EVENT_MESSAGE = 0x4E
+ IMITATED_NPC_DATA = 0x5A
+ MONSTERBOOK_ADD = 0x5B
+ MONSTERBOOK_CHANGE_COVER = 0x5C
+ SESSION_VALUE = 0x62
+ FAMILY_CHART_RESULT = 0x64
+ FAMILY_INFO_RESULT = 0x65
+ FAMILY_JOIN_REQUEST = 0x67
+ FAMILY_JOIN_REQUEST_RESULT = 0x68
+ FAMILY_JOIN_ACCEPTED = 0x69
+ FAMILY_PRIVILEGE_LIST = 0x6A
+ FAMILY_FAMOUS_POINT_INC_RESULT = 0x6B
+ FAMILY_NOTIFY_LOGIN_OR_LOGOUT = 0x6C
+ FAMILY_SET_PRIVILEGE = 0x6D
+ FAMILY_SUMMON_REQUEST = 0x6E
+ LEVEL_UPDATE = 0x6F
+ MARRIAGE_UPDATE = 0x70
+ JOB_UPDATE = 0x71
+ SET_BUY_EQUIP_EXT = 0x72
+ SCRIPT_PROGRESS_MESSAGE = 0x73
+ BBS_OPERATION = 0x77
+ FISHING_BOARD_UPDATE = 0x75
+ AVATAR_MEGA = 0x56
+ SKILL_MACRO = 0x80
+ SET_FIELD = 0x81
+ SET_ITC = 0x82
+ SET_CASH_SHOP = 0x83
+ SERVER_BLOCKED
+ SHOW_EQUIP_EFFECT
+ MULTICHAT = 0x8A
+ WHISPER = 0x8B
+ SPOUSE_CHAT = 0x8C
+ BOSS_ENV = 0x8D
+ MOVE_ENV = 0x91
+ CASH_SONG = 0x92
+ GM_EFFECT = 0x93
+ OX_QUIZ = 0x94
+ GMEVENT_INSTRUCTIONS = 0x95
+ CLOCK = 0x96
+ BOAT_EFFECT = 0x97
+ BOAT_PACKET = 0x98
+ BOAT_HIDE =0x99
+ STOP_CLOCK = 0x9c
+ PYRAMID_UPDATE = 0xA0
+ PYRAMID_RESULT = 0xA1
+ MOVE_PLATFORM = 0x9F
+ SPAWN_PLAYER = 0xA2
+ REMOVE_PLAYER_FROM_MAP = 0xA3
+ CHATTEXT = 0xA4
+ CHALKBOARD = 0xA6
+ UPDATE_CHAR_BOX = 0xA7
+ SHOW_SCROLL_EFFECT = 0xA9
+ FISHING_CAUGHT = 0xAB
+ SPAWN_PET = 0xAD
+ MOVE_PET = 0xAF
+ PET_CHAT = 0xB0
+ PET_NAMECHANGE = 0xB1
+ PET_EXCEPTION_LIST =0xB2
+ PET_COMMAND = 0xB3
+ SPAWN_SUMMON = 0xB4
+ REMOVE_SUMMON = 0xB5
+ SUMMON_ATTACK = 0xB7
+ MOVE_SUMMON = 0xB6
+ DAMAGE_SUMMON = 0xB9
+ MOVE_PLAYER = 0xBB
+ CLOSE_RANGE_ATTACK = 0xBC
+ RANGED_ATTACK = 0xBD
+ MAGIC_ATTACK = 0xBE
+ ENERGY_ATTACK = 0xBF
+ SKILL_EFFECT = 0xC0
+ CANCEL_SKILL_EFFECT = 0xC1
+ DAMAGE_PLAYER = 0xC2
+ FACIAL_EXPRESSION = 0xC3
+ SHOW_ITEM_EFFECT = 0xC4
+ SHOW_CHAIR = 0xC6
+ UPDATE_CHAR_LOOK = 0xC7
+ SHOW_FOREIGN_EFFECT = 0xC8
+ GIVE_FOREIGN_BUFF = 0xC9
+ CANCEL_FOREIGN_BUFF = 0xCA
+ UPDATE_PARTYMEMBER_HP = 0xCB
+ CANCEL_CHAIR = 0xCF
+ SHOW_ITEM_GAIN_INCHAT = 0xD0
+ DOJO_WARP_UP = 0xD1
+ MESOBAG_SUCCESS =0xD4
+ MESOBAG_FAILURE =0xD5
+ CURRENT_MAP_WARP = 0x147
+ UPDATE_QUEST_INFO = 0xD6
+ PET_FLAG_CHANGE = 0xD8
+ PLAYER_HINT = 0xD9
+ REPAIR_WINDOW = 0x9A
+ CYGNUS_INTRO_LOCK = 0xE4
+ CYGNUS_INTRO_DISABLE_UI = 0xE3
+ CS_UPDATE = 0x161
+ CS_OPERATION = 0x162
+ SPAWN_NPC = 0x104
+ REMOVE_NPC = 0x105
+ SPAWN_NPC_REQUEST_CONTROLLER = 0x106
+ SPAWN_MONSTER = 0xEE
+ SPAWN_MONSTER_CONTROL = 0xF0
+ MOVE_MONSTER_RESPONSE = 0xF2
+ KILL_MONSTER = 0xEF
+ DROP_ITEM_FROM_MAPOBJECT = 0x110
+ MOVE_MONSTER = 0xF1
+ OPEN_NPC_SHOP = 0x146
+ CONFIRM_SHOP_TRANSACTION = 0x147
+ OPEN_STORAGE = 0x14A
+ REMOVE_ITEM_FROM_MAP = 0x111
+ PLAYER_INTERACTION = 0x14F
+ NPC_TALK = 0x145
+ KEYMAP = 0x16F
+ SHOW_MONSTER_HP = 0xFC
+ APPLY_MONSTER_STATUS = 0xF4
+ CANCEL_MONSTER_STATUS = 0xF5
+ SPAWN_DOOR = 0x117
+ REMOVE_DOOR = 0x118
+ SPAWN_MIST = 0x115
+ REMOVE_MIST = 0x116
+ DAMAGE_MONSTER = 0xF8
+ REACTOR_SPAWN = 0x11E
+ REACTOR_HIT = 0x11C
+ REACTOR_DESTROY = 0x11F
+ SHOW_MAGNET = 0xFD
+ MERCH_ITEM_MSG = 0x14B
+ MERCH_ITEM_STORE = 0x14C
+ MESSENGER = 0x14E
+ COOLDOWN = 0xEC
+ SUMMON_HINT = 0xE5
+ SUMMON_HINT_MSG = 0xE6
+ SUMMON_SKILL = 0xBA
+ ARIANT_PQ_START
+ CATCH_MONSTER = 0x103
+ ARIANT_SCOREBOARD = 0x9A
+ ZAKUM_SHRINE = 0x144
+ DUEY = 0x15F
+ MONSTER_CARNIVAL_START = 0x129
+ MONSTER_CARNIVAL_OBTAINED_CP = 0x12A
+ MONSTER_CARNIVAL_PARTY_CP = 0x12B
+ MONSTER_CARNIVAL_SUMMON = 0x12C
+ MONSTER_CARNIVAL_DIED = 0x12E
+ SPAWN_HIRED_MERCHANT = 0x10D
+ UPDATE_HIRED_MERCHANT = 0x10F
+ DESTROY_HIRED_MERCHANT = 0x10E
+ FAIRY_PEND_MSG = 0x60
+ VICIOUS_HAMMER = 0x183
+ ROLL_SNOWBALL = 0x120
+ HIT_SNOWBALL = 0x121
+ SNOWBALL_MESSAGE = 0x122
+ LEFT_KNOCK_BACK = 0x123
+ HIT_COCONUT = 0x124
+ COCONUT_SCORE = 0x125
+ ARAN_COMBO = 0xE7
+ MTS_OPERATION = 0x17C
+ ENGAGE_RESULT = 0x46
+ ENGLISH_QUIZ = 0x130
+ UPDATE_BEANS = 0x15E
+ TIP_BEANS = 0x15B
+ OPEN_BEANS = 0x15C
+ SHOOT_BEANS = 0x15D
+ START_TV = 0x16B
+ REMOVE_TV = 0x16C
+ ENABLE_TV = 0x16D
+ PET_AUTO_HP = 0x170
+ PET_AUTO_MP = 0x171
+ TOP_MSG = 0x73
+ CHAR_CASH = 0x7D
+ TOP_MSG = 0x999
\ No newline at end of file
diff --git a/out/production/A079/provider/MapleCanvas.class b/out/production/A079/provider/MapleCanvas.class
new file mode 100644
index 0000000..1110538
Binary files /dev/null and b/out/production/A079/provider/MapleCanvas.class differ
diff --git a/out/production/A079/provider/MapleData.class b/out/production/A079/provider/MapleData.class
new file mode 100644
index 0000000..6213337
Binary files /dev/null and b/out/production/A079/provider/MapleData.class differ
diff --git a/out/production/A079/provider/MapleDataDirectoryEntry.class b/out/production/A079/provider/MapleDataDirectoryEntry.class
new file mode 100644
index 0000000..9ad1bfa
Binary files /dev/null and b/out/production/A079/provider/MapleDataDirectoryEntry.class differ
diff --git a/out/production/A079/provider/MapleDataEntity.class b/out/production/A079/provider/MapleDataEntity.class
new file mode 100644
index 0000000..6870d74
Binary files /dev/null and b/out/production/A079/provider/MapleDataEntity.class differ
diff --git a/out/production/A079/provider/MapleDataEntry.class b/out/production/A079/provider/MapleDataEntry.class
new file mode 100644
index 0000000..b9cfe82
Binary files /dev/null and b/out/production/A079/provider/MapleDataEntry.class differ
diff --git a/out/production/A079/provider/MapleDataFileEntry.class b/out/production/A079/provider/MapleDataFileEntry.class
new file mode 100644
index 0000000..edc433d
Binary files /dev/null and b/out/production/A079/provider/MapleDataFileEntry.class differ
diff --git a/out/production/A079/provider/MapleDataProvider.class b/out/production/A079/provider/MapleDataProvider.class
new file mode 100644
index 0000000..c5342e2
Binary files /dev/null and b/out/production/A079/provider/MapleDataProvider.class differ
diff --git a/out/production/A079/provider/MapleDataProviderFactory.class b/out/production/A079/provider/MapleDataProviderFactory.class
new file mode 100644
index 0000000..351714f
Binary files /dev/null and b/out/production/A079/provider/MapleDataProviderFactory.class differ
diff --git a/out/production/A079/provider/MapleDataTool.class b/out/production/A079/provider/MapleDataTool.class
new file mode 100644
index 0000000..2b1b1d4
Binary files /dev/null and b/out/production/A079/provider/MapleDataTool.class differ
diff --git a/out/production/A079/provider/WzXML/FileStoredPngMapleCanvas.class b/out/production/A079/provider/WzXML/FileStoredPngMapleCanvas.class
new file mode 100644
index 0000000..072848a
Binary files /dev/null and b/out/production/A079/provider/WzXML/FileStoredPngMapleCanvas.class differ
diff --git a/out/production/A079/provider/WzXML/MapleDataType.class b/out/production/A079/provider/WzXML/MapleDataType.class
new file mode 100644
index 0000000..d676975
Binary files /dev/null and b/out/production/A079/provider/WzXML/MapleDataType.class differ
diff --git a/out/production/A079/provider/WzXML/PNGMapleCanvas.class b/out/production/A079/provider/WzXML/PNGMapleCanvas.class
new file mode 100644
index 0000000..8b51f4c
Binary files /dev/null and b/out/production/A079/provider/WzXML/PNGMapleCanvas.class differ
diff --git a/out/production/A079/provider/WzXML/WZDirectoryEntry.class b/out/production/A079/provider/WzXML/WZDirectoryEntry.class
new file mode 100644
index 0000000..43f024a
Binary files /dev/null and b/out/production/A079/provider/WzXML/WZDirectoryEntry.class differ
diff --git a/out/production/A079/provider/WzXML/WZEntry.class b/out/production/A079/provider/WzXML/WZEntry.class
new file mode 100644
index 0000000..f286e15
Binary files /dev/null and b/out/production/A079/provider/WzXML/WZEntry.class differ
diff --git a/out/production/A079/provider/WzXML/WZFileEntry.class b/out/production/A079/provider/WzXML/WZFileEntry.class
new file mode 100644
index 0000000..cae8ed1
Binary files /dev/null and b/out/production/A079/provider/WzXML/WZFileEntry.class differ
diff --git a/out/production/A079/provider/WzXML/XMLDomMapleData$1.class b/out/production/A079/provider/WzXML/XMLDomMapleData$1.class
new file mode 100644
index 0000000..8044328
Binary files /dev/null and b/out/production/A079/provider/WzXML/XMLDomMapleData$1.class differ
diff --git a/out/production/A079/provider/WzXML/XMLDomMapleData.class b/out/production/A079/provider/WzXML/XMLDomMapleData.class
new file mode 100644
index 0000000..e1cd044
Binary files /dev/null and b/out/production/A079/provider/WzXML/XMLDomMapleData.class differ
diff --git a/out/production/A079/provider/WzXML/XMLWZFile.class b/out/production/A079/provider/WzXML/XMLWZFile.class
new file mode 100644
index 0000000..b823e94
Binary files /dev/null and b/out/production/A079/provider/WzXML/XMLWZFile.class differ
diff --git a/out/production/A079/scripting/AbstractPlayerInteraction.class b/out/production/A079/scripting/AbstractPlayerInteraction.class
new file mode 100644
index 0000000..800f3ea
Binary files /dev/null and b/out/production/A079/scripting/AbstractPlayerInteraction.class differ
diff --git a/out/production/A079/scripting/AbstractScriptManager.class b/out/production/A079/scripting/AbstractScriptManager.class
new file mode 100644
index 0000000..0ea1f66
Binary files /dev/null and b/out/production/A079/scripting/AbstractScriptManager.class differ
diff --git a/out/production/A079/scripting/EventInstanceManager$1.class b/out/production/A079/scripting/EventInstanceManager$1.class
new file mode 100644
index 0000000..bc41de7
Binary files /dev/null and b/out/production/A079/scripting/EventInstanceManager$1.class differ
diff --git a/out/production/A079/scripting/EventInstanceManager$2.class b/out/production/A079/scripting/EventInstanceManager$2.class
new file mode 100644
index 0000000..afc74bc
Binary files /dev/null and b/out/production/A079/scripting/EventInstanceManager$2.class differ
diff --git a/out/production/A079/scripting/EventInstanceManager.class b/out/production/A079/scripting/EventInstanceManager.class
new file mode 100644
index 0000000..4a6b5d5
Binary files /dev/null and b/out/production/A079/scripting/EventInstanceManager.class differ
diff --git a/out/production/A079/scripting/EventManager$1.class b/out/production/A079/scripting/EventManager$1.class
new file mode 100644
index 0000000..98f5582
Binary files /dev/null and b/out/production/A079/scripting/EventManager$1.class differ
diff --git a/out/production/A079/scripting/EventManager$2.class b/out/production/A079/scripting/EventManager$2.class
new file mode 100644
index 0000000..f1767c3
Binary files /dev/null and b/out/production/A079/scripting/EventManager$2.class differ
diff --git a/out/production/A079/scripting/EventManager$3.class b/out/production/A079/scripting/EventManager$3.class
new file mode 100644
index 0000000..31622a8
Binary files /dev/null and b/out/production/A079/scripting/EventManager$3.class differ
diff --git a/out/production/A079/scripting/EventManager$4.class b/out/production/A079/scripting/EventManager$4.class
new file mode 100644
index 0000000..71821f4
Binary files /dev/null and b/out/production/A079/scripting/EventManager$4.class differ
diff --git a/out/production/A079/scripting/EventManager.class b/out/production/A079/scripting/EventManager.class
new file mode 100644
index 0000000..16b8534
Binary files /dev/null and b/out/production/A079/scripting/EventManager.class differ
diff --git a/out/production/A079/scripting/EventScriptManager$EventEntry.class b/out/production/A079/scripting/EventScriptManager$EventEntry.class
new file mode 100644
index 0000000..a709a2e
Binary files /dev/null and b/out/production/A079/scripting/EventScriptManager$EventEntry.class differ
diff --git a/out/production/A079/scripting/EventScriptManager.class b/out/production/A079/scripting/EventScriptManager.class
new file mode 100644
index 0000000..319b6b1
Binary files /dev/null and b/out/production/A079/scripting/EventScriptManager.class differ
diff --git a/out/production/A079/scripting/LieDetectorScript.class b/out/production/A079/scripting/LieDetectorScript.class
new file mode 100644
index 0000000..36160df
Binary files /dev/null and b/out/production/A079/scripting/LieDetectorScript.class differ
diff --git a/out/production/A079/scripting/NPCConversationManager$1.class b/out/production/A079/scripting/NPCConversationManager$1.class
new file mode 100644
index 0000000..0f4e090
Binary files /dev/null and b/out/production/A079/scripting/NPCConversationManager$1.class differ
diff --git a/out/production/A079/scripting/NPCConversationManager$2.class b/out/production/A079/scripting/NPCConversationManager$2.class
new file mode 100644
index 0000000..2cf780d
Binary files /dev/null and b/out/production/A079/scripting/NPCConversationManager$2.class differ
diff --git a/out/production/A079/scripting/NPCConversationManager$3.class b/out/production/A079/scripting/NPCConversationManager$3.class
new file mode 100644
index 0000000..cec01a0
Binary files /dev/null and b/out/production/A079/scripting/NPCConversationManager$3.class differ
diff --git a/out/production/A079/scripting/NPCConversationManager$4.class b/out/production/A079/scripting/NPCConversationManager$4.class
new file mode 100644
index 0000000..f626436
Binary files /dev/null and b/out/production/A079/scripting/NPCConversationManager$4.class differ
diff --git a/out/production/A079/scripting/NPCConversationManager.class b/out/production/A079/scripting/NPCConversationManager.class
new file mode 100644
index 0000000..f29348f
Binary files /dev/null and b/out/production/A079/scripting/NPCConversationManager.class differ
diff --git a/out/production/A079/scripting/NPCScriptManager.class b/out/production/A079/scripting/NPCScriptManager.class
new file mode 100644
index 0000000..bd8d8fa
Binary files /dev/null and b/out/production/A079/scripting/NPCScriptManager.class differ
diff --git a/out/production/A079/scripting/PortalPlayerInteraction.class b/out/production/A079/scripting/PortalPlayerInteraction.class
new file mode 100644
index 0000000..0377953
Binary files /dev/null and b/out/production/A079/scripting/PortalPlayerInteraction.class differ
diff --git a/out/production/A079/scripting/PortalScript.class b/out/production/A079/scripting/PortalScript.class
new file mode 100644
index 0000000..6992909
Binary files /dev/null and b/out/production/A079/scripting/PortalScript.class differ
diff --git a/out/production/A079/scripting/PortalScriptManager.class b/out/production/A079/scripting/PortalScriptManager.class
new file mode 100644
index 0000000..7da865c
Binary files /dev/null and b/out/production/A079/scripting/PortalScriptManager.class differ
diff --git a/out/production/A079/scripting/ReactorActionManager.class b/out/production/A079/scripting/ReactorActionManager.class
new file mode 100644
index 0000000..24b44e4
Binary files /dev/null and b/out/production/A079/scripting/ReactorActionManager.class differ
diff --git a/out/production/A079/scripting/ReactorScriptManager.class b/out/production/A079/scripting/ReactorScriptManager.class
new file mode 100644
index 0000000..c7fc28a
Binary files /dev/null and b/out/production/A079/scripting/ReactorScriptManager.class differ
diff --git a/out/production/A079/server/AutobanManager$ExpirationEntry.class b/out/production/A079/server/AutobanManager$ExpirationEntry.class
new file mode 100644
index 0000000..896a3b8
Binary files /dev/null and b/out/production/A079/server/AutobanManager$ExpirationEntry.class differ
diff --git a/out/production/A079/server/AutobanManager.class b/out/production/A079/server/AutobanManager.class
new file mode 100644
index 0000000..9aa3de7
Binary files /dev/null and b/out/production/A079/server/AutobanManager.class differ
diff --git a/out/production/A079/server/BossInMap.class b/out/production/A079/server/BossInMap.class
new file mode 100644
index 0000000..2ea1260
Binary files /dev/null and b/out/production/A079/server/BossInMap.class differ
diff --git a/out/production/A079/server/CashItem.class b/out/production/A079/server/CashItem.class
new file mode 100644
index 0000000..a737087
Binary files /dev/null and b/out/production/A079/server/CashItem.class differ
diff --git a/out/production/A079/server/CashItemFactory.class b/out/production/A079/server/CashItemFactory.class
new file mode 100644
index 0000000..f32ddcd
Binary files /dev/null and b/out/production/A079/server/CashItemFactory.class differ
diff --git a/out/production/A079/server/CashItemInfo$CashModInfo.class b/out/production/A079/server/CashItemInfo$CashModInfo.class
new file mode 100644
index 0000000..12ab80d
Binary files /dev/null and b/out/production/A079/server/CashItemInfo$CashModInfo.class differ
diff --git a/out/production/A079/server/CashItemInfo.class b/out/production/A079/server/CashItemInfo.class
new file mode 100644
index 0000000..aa19725
Binary files /dev/null and b/out/production/A079/server/CashItemInfo.class differ
diff --git a/out/production/A079/server/CashShop.class b/out/production/A079/server/CashShop.class
new file mode 100644
index 0000000..e14a5fe
Binary files /dev/null and b/out/production/A079/server/CashShop.class differ
diff --git a/out/production/A079/server/FishingRewardFactory$FishingReward.class b/out/production/A079/server/FishingRewardFactory$FishingReward.class
new file mode 100644
index 0000000..f1b826c
Binary files /dev/null and b/out/production/A079/server/FishingRewardFactory$FishingReward.class differ
diff --git a/out/production/A079/server/FishingRewardFactory.class b/out/production/A079/server/FishingRewardFactory.class
new file mode 100644
index 0000000..860a413
Binary files /dev/null and b/out/production/A079/server/FishingRewardFactory.class differ
diff --git a/out/production/A079/server/ItemInformation.class b/out/production/A079/server/ItemInformation.class
new file mode 100644
index 0000000..8ef8160
Binary files /dev/null and b/out/production/A079/server/ItemInformation.class differ
diff --git a/out/production/A079/server/ItemMakerFactory$GemCreateEntry.class b/out/production/A079/server/ItemMakerFactory$GemCreateEntry.class
new file mode 100644
index 0000000..f88b8a9
Binary files /dev/null and b/out/production/A079/server/ItemMakerFactory$GemCreateEntry.class differ
diff --git a/out/production/A079/server/ItemMakerFactory$ItemMakerCreateEntry.class b/out/production/A079/server/ItemMakerFactory$ItemMakerCreateEntry.class
new file mode 100644
index 0000000..439ea34
Binary files /dev/null and b/out/production/A079/server/ItemMakerFactory$ItemMakerCreateEntry.class differ
diff --git a/out/production/A079/server/ItemMakerFactory.class b/out/production/A079/server/ItemMakerFactory.class
new file mode 100644
index 0000000..30c7b41
Binary files /dev/null and b/out/production/A079/server/ItemMakerFactory.class differ
diff --git a/out/production/A079/server/MTSCart.class b/out/production/A079/server/MTSCart.class
new file mode 100644
index 0000000..66fd9d7
Binary files /dev/null and b/out/production/A079/server/MTSCart.class differ
diff --git a/out/production/A079/server/MTSStorage$MTSItemInfo.class b/out/production/A079/server/MTSStorage$MTSItemInfo.class
new file mode 100644
index 0000000..1c5a0ab
Binary files /dev/null and b/out/production/A079/server/MTSStorage$MTSItemInfo.class differ
diff --git a/out/production/A079/server/MTSStorage.class b/out/production/A079/server/MTSStorage.class
new file mode 100644
index 0000000..a0f616f
Binary files /dev/null and b/out/production/A079/server/MTSStorage.class differ
diff --git a/out/production/A079/server/MapleAchievement.class b/out/production/A079/server/MapleAchievement.class
new file mode 100644
index 0000000..f4fe8ae
Binary files /dev/null and b/out/production/A079/server/MapleAchievement.class differ
diff --git a/out/production/A079/server/MapleAchievements.class b/out/production/A079/server/MapleAchievements.class
new file mode 100644
index 0000000..41005ba
Binary files /dev/null and b/out/production/A079/server/MapleAchievements.class differ
diff --git a/out/production/A079/server/MapleCarnivalChallenge.class b/out/production/A079/server/MapleCarnivalChallenge.class
new file mode 100644
index 0000000..3dd888a
Binary files /dev/null and b/out/production/A079/server/MapleCarnivalChallenge.class differ
diff --git a/out/production/A079/server/MapleCarnivalFactory$MCSkill.class b/out/production/A079/server/MapleCarnivalFactory$MCSkill.class
new file mode 100644
index 0000000..51c7329
Binary files /dev/null and b/out/production/A079/server/MapleCarnivalFactory$MCSkill.class differ
diff --git a/out/production/A079/server/MapleCarnivalFactory.class b/out/production/A079/server/MapleCarnivalFactory.class
new file mode 100644
index 0000000..b082f26
Binary files /dev/null and b/out/production/A079/server/MapleCarnivalFactory.class differ
diff --git a/out/production/A079/server/MapleCarnivalParty.class b/out/production/A079/server/MapleCarnivalParty.class
new file mode 100644
index 0000000..ec663ce
Binary files /dev/null and b/out/production/A079/server/MapleCarnivalParty.class differ
diff --git a/out/production/A079/server/MapleDueyActions.class b/out/production/A079/server/MapleDueyActions.class
new file mode 100644
index 0000000..3a75299
Binary files /dev/null and b/out/production/A079/server/MapleDueyActions.class differ
diff --git a/out/production/A079/server/MapleInventoryManipulator.class b/out/production/A079/server/MapleInventoryManipulator.class
new file mode 100644
index 0000000..7f79f93
Binary files /dev/null and b/out/production/A079/server/MapleInventoryManipulator.class differ
diff --git a/out/production/A079/server/MapleItemInformationProvider$1.class b/out/production/A079/server/MapleItemInformationProvider$1.class
new file mode 100644
index 0000000..19a788a
Binary files /dev/null and b/out/production/A079/server/MapleItemInformationProvider$1.class differ
diff --git a/out/production/A079/server/MapleItemInformationProvider.class b/out/production/A079/server/MapleItemInformationProvider.class
new file mode 100644
index 0000000..69b7f64
Binary files /dev/null and b/out/production/A079/server/MapleItemInformationProvider.class differ
diff --git a/out/production/A079/server/MaplePortal.class b/out/production/A079/server/MaplePortal.class
new file mode 100644
index 0000000..16ec125
Binary files /dev/null and b/out/production/A079/server/MaplePortal.class differ
diff --git a/out/production/A079/server/MapleShop.class b/out/production/A079/server/MapleShop.class
new file mode 100644
index 0000000..cd9526d
Binary files /dev/null and b/out/production/A079/server/MapleShop.class differ
diff --git a/out/production/A079/server/MapleShopFactory.class b/out/production/A079/server/MapleShopFactory.class
new file mode 100644
index 0000000..81793fd
Binary files /dev/null and b/out/production/A079/server/MapleShopFactory.class differ
diff --git a/out/production/A079/server/MapleShopItem.class b/out/production/A079/server/MapleShopItem.class
new file mode 100644
index 0000000..e300888
Binary files /dev/null and b/out/production/A079/server/MapleShopItem.class differ
diff --git a/out/production/A079/server/MapleSquad$1.class b/out/production/A079/server/MapleSquad$1.class
new file mode 100644
index 0000000..9e09b50
Binary files /dev/null and b/out/production/A079/server/MapleSquad$1.class differ
diff --git a/out/production/A079/server/MapleSquad$MapleSquadType.class b/out/production/A079/server/MapleSquad$MapleSquadType.class
new file mode 100644
index 0000000..34f9bd6
Binary files /dev/null and b/out/production/A079/server/MapleSquad$MapleSquadType.class differ
diff --git a/out/production/A079/server/MapleSquad.class b/out/production/A079/server/MapleSquad.class
new file mode 100644
index 0000000..daab342
Binary files /dev/null and b/out/production/A079/server/MapleSquad.class differ
diff --git a/out/production/A079/server/MapleStatEffect$CancelEffectAction.class b/out/production/A079/server/MapleStatEffect$CancelEffectAction.class
new file mode 100644
index 0000000..04ce016
Binary files /dev/null and b/out/production/A079/server/MapleStatEffect$CancelEffectAction.class differ
diff --git a/out/production/A079/server/MapleStatEffect.class b/out/production/A079/server/MapleStatEffect.class
new file mode 100644
index 0000000..fc20424
Binary files /dev/null and b/out/production/A079/server/MapleStatEffect.class differ
diff --git a/out/production/A079/server/MapleStorage$1.class b/out/production/A079/server/MapleStorage$1.class
new file mode 100644
index 0000000..1373510
Binary files /dev/null and b/out/production/A079/server/MapleStorage$1.class differ
diff --git a/out/production/A079/server/MapleStorage$2.class b/out/production/A079/server/MapleStorage$2.class
new file mode 100644
index 0000000..a4363e4
Binary files /dev/null and b/out/production/A079/server/MapleStorage$2.class differ
diff --git a/out/production/A079/server/MapleStorage.class b/out/production/A079/server/MapleStorage.class
new file mode 100644
index 0000000..ca180e2
Binary files /dev/null and b/out/production/A079/server/MapleStorage.class differ
diff --git a/out/production/A079/server/MapleTVEffect$1.class b/out/production/A079/server/MapleTVEffect$1.class
new file mode 100644
index 0000000..be4c1a2
Binary files /dev/null and b/out/production/A079/server/MapleTVEffect$1.class differ
diff --git a/out/production/A079/server/MapleTVEffect.class b/out/production/A079/server/MapleTVEffect.class
new file mode 100644
index 0000000..da707d6
Binary files /dev/null and b/out/production/A079/server/MapleTVEffect.class differ
diff --git a/out/production/A079/server/MapleTrade$1.class b/out/production/A079/server/MapleTrade$1.class
new file mode 100644
index 0000000..a682bfd
Binary files /dev/null and b/out/production/A079/server/MapleTrade$1.class differ
diff --git a/out/production/A079/server/MapleTrade.class b/out/production/A079/server/MapleTrade.class
new file mode 100644
index 0000000..158a483
Binary files /dev/null and b/out/production/A079/server/MapleTrade.class differ
diff --git a/out/production/A079/server/MerchItemPackage.class b/out/production/A079/server/MerchItemPackage.class
new file mode 100644
index 0000000..fa4fab1
Binary files /dev/null and b/out/production/A079/server/MerchItemPackage.class differ
diff --git a/out/production/A079/server/PortalFactory.class b/out/production/A079/server/PortalFactory.class
new file mode 100644
index 0000000..86f92ec
Binary files /dev/null and b/out/production/A079/server/PortalFactory.class differ
diff --git a/out/production/A079/server/PredictCardFactory$PredictCard.class b/out/production/A079/server/PredictCardFactory$PredictCard.class
new file mode 100644
index 0000000..5395bb1
Binary files /dev/null and b/out/production/A079/server/PredictCardFactory$PredictCard.class differ
diff --git a/out/production/A079/server/PredictCardFactory$PredictCardComment.class b/out/production/A079/server/PredictCardFactory$PredictCardComment.class
new file mode 100644
index 0000000..df936d0
Binary files /dev/null and b/out/production/A079/server/PredictCardFactory$PredictCardComment.class differ
diff --git a/out/production/A079/server/PredictCardFactory.class b/out/production/A079/server/PredictCardFactory.class
new file mode 100644
index 0000000..4adada5
Binary files /dev/null and b/out/production/A079/server/PredictCardFactory.class differ
diff --git a/out/production/A079/server/RandomRewards.class b/out/production/A079/server/RandomRewards.class
new file mode 100644
index 0000000..83dc350
Binary files /dev/null and b/out/production/A079/server/RandomRewards.class differ
diff --git a/out/production/A079/server/Randomizer.class b/out/production/A079/server/Randomizer.class
new file mode 100644
index 0000000..2159999
Binary files /dev/null and b/out/production/A079/server/Randomizer.class differ
diff --git a/out/production/A079/server/RankingWorker$RankingInformation.class b/out/production/A079/server/RankingWorker$RankingInformation.class
new file mode 100644
index 0000000..a9aaaf4
Binary files /dev/null and b/out/production/A079/server/RankingWorker$RankingInformation.class differ
diff --git a/out/production/A079/server/RankingWorker.class b/out/production/A079/server/RankingWorker.class
new file mode 100644
index 0000000..0c5f0c8
Binary files /dev/null and b/out/production/A079/server/RankingWorker.class differ
diff --git a/out/production/A079/server/ServerProperties.class b/out/production/A079/server/ServerProperties.class
new file mode 100644
index 0000000..d347671
Binary files /dev/null and b/out/production/A079/server/ServerProperties.class differ
diff --git a/out/production/A079/server/ShutdownServer.class b/out/production/A079/server/ShutdownServer.class
new file mode 100644
index 0000000..cc58981
Binary files /dev/null and b/out/production/A079/server/ShutdownServer.class differ
diff --git a/out/production/A079/server/ShutdownServerMBean.class b/out/production/A079/server/ShutdownServerMBean.class
new file mode 100644
index 0000000..9865e86
Binary files /dev/null and b/out/production/A079/server/ShutdownServerMBean.class differ
diff --git a/out/production/A079/server/SkillType.class b/out/production/A079/server/SkillType.class
new file mode 100644
index 0000000..658b652
Binary files /dev/null and b/out/production/A079/server/SkillType.class differ
diff --git a/out/production/A079/server/SpeedRunner.class b/out/production/A079/server/SpeedRunner.class
new file mode 100644
index 0000000..921fc4b
Binary files /dev/null and b/out/production/A079/server/SpeedRunner.class differ
diff --git a/out/production/A079/server/StructPotentialItem.class b/out/production/A079/server/StructPotentialItem.class
new file mode 100644
index 0000000..afaee98
Binary files /dev/null and b/out/production/A079/server/StructPotentialItem.class differ
diff --git a/out/production/A079/server/StructRewardItem.class b/out/production/A079/server/StructRewardItem.class
new file mode 100644
index 0000000..c5a3a75
Binary files /dev/null and b/out/production/A079/server/StructRewardItem.class differ
diff --git a/out/production/A079/server/StructSetItem$SetItem.class b/out/production/A079/server/StructSetItem$SetItem.class
new file mode 100644
index 0000000..2f00365
Binary files /dev/null and b/out/production/A079/server/StructSetItem$SetItem.class differ
diff --git a/out/production/A079/server/StructSetItem.class b/out/production/A079/server/StructSetItem.class
new file mode 100644
index 0000000..96d4a36
Binary files /dev/null and b/out/production/A079/server/StructSetItem.class differ
diff --git a/out/production/A079/server/Timer$1.class b/out/production/A079/server/Timer$1.class
new file mode 100644
index 0000000..6de239e
Binary files /dev/null and b/out/production/A079/server/Timer$1.class differ
diff --git a/out/production/A079/server/Timer$BuffTimer.class b/out/production/A079/server/Timer$BuffTimer.class
new file mode 100644
index 0000000..b02578d
Binary files /dev/null and b/out/production/A079/server/Timer$BuffTimer.class differ
diff --git a/out/production/A079/server/Timer$CheatTimer.class b/out/production/A079/server/Timer$CheatTimer.class
new file mode 100644
index 0000000..a164cc3
Binary files /dev/null and b/out/production/A079/server/Timer$CheatTimer.class differ
diff --git a/out/production/A079/server/Timer$CloneTimer.class b/out/production/A079/server/Timer$CloneTimer.class
new file mode 100644
index 0000000..3d46a85
Binary files /dev/null and b/out/production/A079/server/Timer$CloneTimer.class differ
diff --git a/out/production/A079/server/Timer$EtcTimer.class b/out/production/A079/server/Timer$EtcTimer.class
new file mode 100644
index 0000000..67666a3
Binary files /dev/null and b/out/production/A079/server/Timer$EtcTimer.class differ
diff --git a/out/production/A079/server/Timer$EventTimer.class b/out/production/A079/server/Timer$EventTimer.class
new file mode 100644
index 0000000..788f1d6
Binary files /dev/null and b/out/production/A079/server/Timer$EventTimer.class differ
diff --git a/out/production/A079/server/Timer$LoggingSaveRunnable.class b/out/production/A079/server/Timer$LoggingSaveRunnable.class
new file mode 100644
index 0000000..f66f241
Binary files /dev/null and b/out/production/A079/server/Timer$LoggingSaveRunnable.class differ
diff --git a/out/production/A079/server/Timer$MapTimer.class b/out/production/A079/server/Timer$MapTimer.class
new file mode 100644
index 0000000..064862a
Binary files /dev/null and b/out/production/A079/server/Timer$MapTimer.class differ
diff --git a/out/production/A079/server/Timer$MobTimer.class b/out/production/A079/server/Timer$MobTimer.class
new file mode 100644
index 0000000..e63e61c
Binary files /dev/null and b/out/production/A079/server/Timer$MobTimer.class differ
diff --git a/out/production/A079/server/Timer$PingTimer.class b/out/production/A079/server/Timer$PingTimer.class
new file mode 100644
index 0000000..b45e2d6
Binary files /dev/null and b/out/production/A079/server/Timer$PingTimer.class differ
diff --git a/out/production/A079/server/Timer$WorldTimer.class b/out/production/A079/server/Timer$WorldTimer.class
new file mode 100644
index 0000000..2da1ec4
Binary files /dev/null and b/out/production/A079/server/Timer$WorldTimer.class differ
diff --git a/out/production/A079/server/Timer.class b/out/production/A079/server/Timer.class
new file mode 100644
index 0000000..80cd5cd
Binary files /dev/null and b/out/production/A079/server/Timer.class differ
diff --git a/out/production/A079/server/events/MapleCoconut$1.class b/out/production/A079/server/events/MapleCoconut$1.class
new file mode 100644
index 0000000..821e921
Binary files /dev/null and b/out/production/A079/server/events/MapleCoconut$1.class differ
diff --git a/out/production/A079/server/events/MapleCoconut$2.class b/out/production/A079/server/events/MapleCoconut$2.class
new file mode 100644
index 0000000..9f669d8
Binary files /dev/null and b/out/production/A079/server/events/MapleCoconut$2.class differ
diff --git a/out/production/A079/server/events/MapleCoconut$3.class b/out/production/A079/server/events/MapleCoconut$3.class
new file mode 100644
index 0000000..cd9636d
Binary files /dev/null and b/out/production/A079/server/events/MapleCoconut$3.class differ
diff --git a/out/production/A079/server/events/MapleCoconut$MapleCoconuts.class b/out/production/A079/server/events/MapleCoconut$MapleCoconuts.class
new file mode 100644
index 0000000..09ca50b
Binary files /dev/null and b/out/production/A079/server/events/MapleCoconut$MapleCoconuts.class differ
diff --git a/out/production/A079/server/events/MapleCoconut.class b/out/production/A079/server/events/MapleCoconut.class
new file mode 100644
index 0000000..642d77b
Binary files /dev/null and b/out/production/A079/server/events/MapleCoconut.class differ
diff --git a/out/production/A079/server/events/MapleEvent$1.class b/out/production/A079/server/events/MapleEvent$1.class
new file mode 100644
index 0000000..33672d8
Binary files /dev/null and b/out/production/A079/server/events/MapleEvent$1.class differ
diff --git a/out/production/A079/server/events/MapleEvent.class b/out/production/A079/server/events/MapleEvent.class
new file mode 100644
index 0000000..bc92025
Binary files /dev/null and b/out/production/A079/server/events/MapleEvent.class differ
diff --git a/out/production/A079/server/events/MapleEventType.class b/out/production/A079/server/events/MapleEventType.class
new file mode 100644
index 0000000..cfc1452
Binary files /dev/null and b/out/production/A079/server/events/MapleEventType.class differ
diff --git a/out/production/A079/server/events/MapleFitness$1.class b/out/production/A079/server/events/MapleFitness$1.class
new file mode 100644
index 0000000..e1aafdd
Binary files /dev/null and b/out/production/A079/server/events/MapleFitness$1.class differ
diff --git a/out/production/A079/server/events/MapleFitness$2.class b/out/production/A079/server/events/MapleFitness$2.class
new file mode 100644
index 0000000..92d119a
Binary files /dev/null and b/out/production/A079/server/events/MapleFitness$2.class differ
diff --git a/out/production/A079/server/events/MapleFitness.class b/out/production/A079/server/events/MapleFitness.class
new file mode 100644
index 0000000..942babc
Binary files /dev/null and b/out/production/A079/server/events/MapleFitness.class differ
diff --git a/out/production/A079/server/events/MapleJewel$1.class b/out/production/A079/server/events/MapleJewel$1.class
new file mode 100644
index 0000000..4892104
Binary files /dev/null and b/out/production/A079/server/events/MapleJewel$1.class differ
diff --git a/out/production/A079/server/events/MapleJewel.class b/out/production/A079/server/events/MapleJewel.class
new file mode 100644
index 0000000..3f4b7c8
Binary files /dev/null and b/out/production/A079/server/events/MapleJewel.class differ
diff --git a/out/production/A079/server/events/MapleOla$1.class b/out/production/A079/server/events/MapleOla$1.class
new file mode 100644
index 0000000..096d8f0
Binary files /dev/null and b/out/production/A079/server/events/MapleOla$1.class differ
diff --git a/out/production/A079/server/events/MapleOla.class b/out/production/A079/server/events/MapleOla.class
new file mode 100644
index 0000000..5b3750f
Binary files /dev/null and b/out/production/A079/server/events/MapleOla.class differ
diff --git a/out/production/A079/server/events/MapleOxQuiz$1$1.class b/out/production/A079/server/events/MapleOxQuiz$1$1.class
new file mode 100644
index 0000000..41c04a8
Binary files /dev/null and b/out/production/A079/server/events/MapleOxQuiz$1$1.class differ
diff --git a/out/production/A079/server/events/MapleOxQuiz$1.class b/out/production/A079/server/events/MapleOxQuiz$1.class
new file mode 100644
index 0000000..8487e6f
Binary files /dev/null and b/out/production/A079/server/events/MapleOxQuiz$1.class differ
diff --git a/out/production/A079/server/events/MapleOxQuiz.class b/out/production/A079/server/events/MapleOxQuiz.class
new file mode 100644
index 0000000..8860ddb
Binary files /dev/null and b/out/production/A079/server/events/MapleOxQuiz.class differ
diff --git a/out/production/A079/server/events/MapleOxQuizFactory$MapleOxQuizEntry.class b/out/production/A079/server/events/MapleOxQuizFactory$MapleOxQuizEntry.class
new file mode 100644
index 0000000..1db7a26
Binary files /dev/null and b/out/production/A079/server/events/MapleOxQuizFactory$MapleOxQuizEntry.class differ
diff --git a/out/production/A079/server/events/MapleOxQuizFactory.class b/out/production/A079/server/events/MapleOxQuizFactory.class
new file mode 100644
index 0000000..3e39352
Binary files /dev/null and b/out/production/A079/server/events/MapleOxQuizFactory.class differ
diff --git a/out/production/A079/server/events/MapleSnowball$MapleSnowballs$1.class b/out/production/A079/server/events/MapleSnowball$MapleSnowballs$1.class
new file mode 100644
index 0000000..fb2ddeb
Binary files /dev/null and b/out/production/A079/server/events/MapleSnowball$MapleSnowballs$1.class differ
diff --git a/out/production/A079/server/events/MapleSnowball$MapleSnowballs.class b/out/production/A079/server/events/MapleSnowball$MapleSnowballs.class
new file mode 100644
index 0000000..215296f
Binary files /dev/null and b/out/production/A079/server/events/MapleSnowball$MapleSnowballs.class differ
diff --git a/out/production/A079/server/events/MapleSnowball.class b/out/production/A079/server/events/MapleSnowball.class
new file mode 100644
index 0000000..3425707
Binary files /dev/null and b/out/production/A079/server/events/MapleSnowball.class differ
diff --git a/out/production/A079/server/gashapon/Gashapon.class b/out/production/A079/server/gashapon/Gashapon.class
new file mode 100644
index 0000000..40352b2
Binary files /dev/null and b/out/production/A079/server/gashapon/Gashapon.class differ
diff --git a/out/production/A079/server/gashapon/GashaponFactory.class b/out/production/A079/server/gashapon/GashaponFactory.class
new file mode 100644
index 0000000..6fbd7ec
Binary files /dev/null and b/out/production/A079/server/gashapon/GashaponFactory.class differ
diff --git a/out/production/A079/server/gashapon/GashaponReward.class b/out/production/A079/server/gashapon/GashaponReward.class
new file mode 100644
index 0000000..37b24ef
Binary files /dev/null and b/out/production/A079/server/gashapon/GashaponReward.class differ
diff --git a/out/production/A079/server/life/AbstractLoadedMapleLife.class b/out/production/A079/server/life/AbstractLoadedMapleLife.class
new file mode 100644
index 0000000..2942308
Binary files /dev/null and b/out/production/A079/server/life/AbstractLoadedMapleLife.class differ
diff --git a/out/production/A079/server/life/BanishInfo.class b/out/production/A079/server/life/BanishInfo.class
new file mode 100644
index 0000000..1d90d70
Binary files /dev/null and b/out/production/A079/server/life/BanishInfo.class differ
diff --git a/out/production/A079/server/life/Element.class b/out/production/A079/server/life/Element.class
new file mode 100644
index 0000000..ee1a3cd
Binary files /dev/null and b/out/production/A079/server/life/Element.class differ
diff --git a/out/production/A079/server/life/ElementalEffectiveness.class b/out/production/A079/server/life/ElementalEffectiveness.class
new file mode 100644
index 0000000..e6be381
Binary files /dev/null and b/out/production/A079/server/life/ElementalEffectiveness.class differ
diff --git a/out/production/A079/server/life/MapleLifeFactory.class b/out/production/A079/server/life/MapleLifeFactory.class
new file mode 100644
index 0000000..beadd9c
Binary files /dev/null and b/out/production/A079/server/life/MapleLifeFactory.class differ
diff --git a/out/production/A079/server/life/MapleMonster$1.class b/out/production/A079/server/life/MapleMonster$1.class
new file mode 100644
index 0000000..7417578
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$1.class differ
diff --git a/out/production/A079/server/life/MapleMonster$2.class b/out/production/A079/server/life/MapleMonster$2.class
new file mode 100644
index 0000000..862f24a
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$2.class differ
diff --git a/out/production/A079/server/life/MapleMonster$3.class b/out/production/A079/server/life/MapleMonster$3.class
new file mode 100644
index 0000000..cbadf1f
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$3.class differ
diff --git a/out/production/A079/server/life/MapleMonster$AttackerEntry.class b/out/production/A079/server/life/MapleMonster$AttackerEntry.class
new file mode 100644
index 0000000..4562c0a
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$AttackerEntry.class differ
diff --git a/out/production/A079/server/life/MapleMonster$AttackingMapleCharacter.class b/out/production/A079/server/life/MapleMonster$AttackingMapleCharacter.class
new file mode 100644
index 0000000..aff592d
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$AttackingMapleCharacter.class differ
diff --git a/out/production/A079/server/life/MapleMonster$ExpMap.class b/out/production/A079/server/life/MapleMonster$ExpMap.class
new file mode 100644
index 0000000..8123703
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$ExpMap.class differ
diff --git a/out/production/A079/server/life/MapleMonster$OnePartyAttacker.class b/out/production/A079/server/life/MapleMonster$OnePartyAttacker.class
new file mode 100644
index 0000000..4253f9d
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$OnePartyAttacker.class differ
diff --git a/out/production/A079/server/life/MapleMonster$PartyAttackerEntry.class b/out/production/A079/server/life/MapleMonster$PartyAttackerEntry.class
new file mode 100644
index 0000000..2ba8855
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$PartyAttackerEntry.class differ
diff --git a/out/production/A079/server/life/MapleMonster$PoisonTask.class b/out/production/A079/server/life/MapleMonster$PoisonTask.class
new file mode 100644
index 0000000..fadc306
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$PoisonTask.class differ
diff --git a/out/production/A079/server/life/MapleMonster$SingleAttackerEntry.class b/out/production/A079/server/life/MapleMonster$SingleAttackerEntry.class
new file mode 100644
index 0000000..8785902
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster$SingleAttackerEntry.class differ
diff --git a/out/production/A079/server/life/MapleMonster.class b/out/production/A079/server/life/MapleMonster.class
new file mode 100644
index 0000000..54d661d
Binary files /dev/null and b/out/production/A079/server/life/MapleMonster.class differ
diff --git a/out/production/A079/server/life/MapleMonsterInformationProvider.class b/out/production/A079/server/life/MapleMonsterInformationProvider.class
new file mode 100644
index 0000000..b4b63e6
Binary files /dev/null and b/out/production/A079/server/life/MapleMonsterInformationProvider.class differ
diff --git a/out/production/A079/server/life/MapleMonsterStats.class b/out/production/A079/server/life/MapleMonsterStats.class
new file mode 100644
index 0000000..a9d60db
Binary files /dev/null and b/out/production/A079/server/life/MapleMonsterStats.class differ
diff --git a/out/production/A079/server/life/MapleNPC.class b/out/production/A079/server/life/MapleNPC.class
new file mode 100644
index 0000000..940a76c
Binary files /dev/null and b/out/production/A079/server/life/MapleNPC.class differ
diff --git a/out/production/A079/server/life/MobAttackInfo.class b/out/production/A079/server/life/MobAttackInfo.class
new file mode 100644
index 0000000..c4b1d61
Binary files /dev/null and b/out/production/A079/server/life/MobAttackInfo.class differ
diff --git a/out/production/A079/server/life/MobAttackInfoFactory.class b/out/production/A079/server/life/MobAttackInfoFactory.class
new file mode 100644
index 0000000..d5c7175
Binary files /dev/null and b/out/production/A079/server/life/MobAttackInfoFactory.class differ
diff --git a/out/production/A079/server/life/MobSkill.class b/out/production/A079/server/life/MobSkill.class
new file mode 100644
index 0000000..946d8c1
Binary files /dev/null and b/out/production/A079/server/life/MobSkill.class differ
diff --git a/out/production/A079/server/life/MobSkillFactory.class b/out/production/A079/server/life/MobSkillFactory.class
new file mode 100644
index 0000000..8449657
Binary files /dev/null and b/out/production/A079/server/life/MobSkillFactory.class differ
diff --git a/out/production/A079/server/life/MonsterDropEntry.class b/out/production/A079/server/life/MonsterDropEntry.class
new file mode 100644
index 0000000..2dc8813
Binary files /dev/null and b/out/production/A079/server/life/MonsterDropEntry.class differ
diff --git a/out/production/A079/server/life/MonsterGlobalDropEntry.class b/out/production/A079/server/life/MonsterGlobalDropEntry.class
new file mode 100644
index 0000000..40eab30
Binary files /dev/null and b/out/production/A079/server/life/MonsterGlobalDropEntry.class differ
diff --git a/out/production/A079/server/life/MonsterListener.class b/out/production/A079/server/life/MonsterListener.class
new file mode 100644
index 0000000..a9a7cd6
Binary files /dev/null and b/out/production/A079/server/life/MonsterListener.class differ
diff --git a/out/production/A079/server/life/OverrideMonsterStats.class b/out/production/A079/server/life/OverrideMonsterStats.class
new file mode 100644
index 0000000..7cbe49e
Binary files /dev/null and b/out/production/A079/server/life/OverrideMonsterStats.class differ
diff --git a/out/production/A079/server/life/PlayerNPC.class b/out/production/A079/server/life/PlayerNPC.class
new file mode 100644
index 0000000..ccb96b8
Binary files /dev/null and b/out/production/A079/server/life/PlayerNPC.class differ
diff --git a/out/production/A079/server/life/SpawnPoint$1.class b/out/production/A079/server/life/SpawnPoint$1.class
new file mode 100644
index 0000000..41a9628
Binary files /dev/null and b/out/production/A079/server/life/SpawnPoint$1.class differ
diff --git a/out/production/A079/server/life/SpawnPoint.class b/out/production/A079/server/life/SpawnPoint.class
new file mode 100644
index 0000000..41e2d6f
Binary files /dev/null and b/out/production/A079/server/life/SpawnPoint.class differ
diff --git a/out/production/A079/server/life/SpawnPointAreaBoss$1.class b/out/production/A079/server/life/SpawnPointAreaBoss$1.class
new file mode 100644
index 0000000..5c48063
Binary files /dev/null and b/out/production/A079/server/life/SpawnPointAreaBoss$1.class differ
diff --git a/out/production/A079/server/life/SpawnPointAreaBoss.class b/out/production/A079/server/life/SpawnPointAreaBoss.class
new file mode 100644
index 0000000..b43e8ac
Binary files /dev/null and b/out/production/A079/server/life/SpawnPointAreaBoss.class differ
diff --git a/out/production/A079/server/life/Spawns.class b/out/production/A079/server/life/Spawns.class
new file mode 100644
index 0000000..7e6961d
Binary files /dev/null and b/out/production/A079/server/life/Spawns.class differ
diff --git a/out/production/A079/server/life/SummonAttackEntry.class b/out/production/A079/server/life/SummonAttackEntry.class
new file mode 100644
index 0000000..70fa348
Binary files /dev/null and b/out/production/A079/server/life/SummonAttackEntry.class differ
diff --git a/out/production/A079/server/maps/AbstractAnimatedMapleMapObject.class b/out/production/A079/server/maps/AbstractAnimatedMapleMapObject.class
new file mode 100644
index 0000000..1b0c1e6
Binary files /dev/null and b/out/production/A079/server/maps/AbstractAnimatedMapleMapObject.class differ
diff --git a/out/production/A079/server/maps/AbstractMapleMapObject.class b/out/production/A079/server/maps/AbstractMapleMapObject.class
new file mode 100644
index 0000000..128bb56
Binary files /dev/null and b/out/production/A079/server/maps/AbstractMapleMapObject.class differ
diff --git a/out/production/A079/server/maps/AnimatedMapleMapObject.class b/out/production/A079/server/maps/AnimatedMapleMapObject.class
new file mode 100644
index 0000000..372e0b9
Binary files /dev/null and b/out/production/A079/server/maps/AnimatedMapleMapObject.class differ
diff --git a/out/production/A079/server/maps/AramiaFireWorks$1.class b/out/production/A079/server/maps/AramiaFireWorks$1.class
new file mode 100644
index 0000000..2689486
Binary files /dev/null and b/out/production/A079/server/maps/AramiaFireWorks$1.class differ
diff --git a/out/production/A079/server/maps/AramiaFireWorks$2.class b/out/production/A079/server/maps/AramiaFireWorks$2.class
new file mode 100644
index 0000000..7cee3e7
Binary files /dev/null and b/out/production/A079/server/maps/AramiaFireWorks$2.class differ
diff --git a/out/production/A079/server/maps/AramiaFireWorks$3.class b/out/production/A079/server/maps/AramiaFireWorks$3.class
new file mode 100644
index 0000000..47e549b
Binary files /dev/null and b/out/production/A079/server/maps/AramiaFireWorks$3.class differ
diff --git a/out/production/A079/server/maps/AramiaFireWorks$4.class b/out/production/A079/server/maps/AramiaFireWorks$4.class
new file mode 100644
index 0000000..f1bdf05
Binary files /dev/null and b/out/production/A079/server/maps/AramiaFireWorks$4.class differ
diff --git a/out/production/A079/server/maps/AramiaFireWorks$5.class b/out/production/A079/server/maps/AramiaFireWorks$5.class
new file mode 100644
index 0000000..48f7224
Binary files /dev/null and b/out/production/A079/server/maps/AramiaFireWorks$5.class differ
diff --git a/out/production/A079/server/maps/AramiaFireWorks$6.class b/out/production/A079/server/maps/AramiaFireWorks$6.class
new file mode 100644
index 0000000..1d34c36
Binary files /dev/null and b/out/production/A079/server/maps/AramiaFireWorks$6.class differ
diff --git a/out/production/A079/server/maps/AramiaFireWorks.class b/out/production/A079/server/maps/AramiaFireWorks.class
new file mode 100644
index 0000000..c3ca7ba
Binary files /dev/null and b/out/production/A079/server/maps/AramiaFireWorks.class differ
diff --git a/out/production/A079/server/maps/Event_DojoAgent$1.class b/out/production/A079/server/maps/Event_DojoAgent$1.class
new file mode 100644
index 0000000..bdfc869
Binary files /dev/null and b/out/production/A079/server/maps/Event_DojoAgent$1.class differ
diff --git a/out/production/A079/server/maps/Event_DojoAgent.class b/out/production/A079/server/maps/Event_DojoAgent.class
new file mode 100644
index 0000000..062b68b
Binary files /dev/null and b/out/production/A079/server/maps/Event_DojoAgent.class differ
diff --git a/out/production/A079/server/maps/Event_PyramidSubway$1.class b/out/production/A079/server/maps/Event_PyramidSubway$1.class
new file mode 100644
index 0000000..8236146
Binary files /dev/null and b/out/production/A079/server/maps/Event_PyramidSubway$1.class differ
diff --git a/out/production/A079/server/maps/Event_PyramidSubway$2.class b/out/production/A079/server/maps/Event_PyramidSubway$2.class
new file mode 100644
index 0000000..f66f295
Binary files /dev/null and b/out/production/A079/server/maps/Event_PyramidSubway$2.class differ
diff --git a/out/production/A079/server/maps/Event_PyramidSubway$3.class b/out/production/A079/server/maps/Event_PyramidSubway$3.class
new file mode 100644
index 0000000..5cba68f
Binary files /dev/null and b/out/production/A079/server/maps/Event_PyramidSubway$3.class differ
diff --git a/out/production/A079/server/maps/Event_PyramidSubway.class b/out/production/A079/server/maps/Event_PyramidSubway.class
new file mode 100644
index 0000000..72d1503
Binary files /dev/null and b/out/production/A079/server/maps/Event_PyramidSubway.class differ
diff --git a/out/production/A079/server/maps/FieldLimitType.class b/out/production/A079/server/maps/FieldLimitType.class
new file mode 100644
index 0000000..22a7d91
Binary files /dev/null and b/out/production/A079/server/maps/FieldLimitType.class differ
diff --git a/out/production/A079/server/maps/MapScriptMethods$1.class b/out/production/A079/server/maps/MapScriptMethods$1.class
new file mode 100644
index 0000000..2644c9e
Binary files /dev/null and b/out/production/A079/server/maps/MapScriptMethods$1.class differ
diff --git a/out/production/A079/server/maps/MapScriptMethods$onFirstUserEnter.class b/out/production/A079/server/maps/MapScriptMethods$onFirstUserEnter.class
new file mode 100644
index 0000000..a99d29a
Binary files /dev/null and b/out/production/A079/server/maps/MapScriptMethods$onFirstUserEnter.class differ
diff --git a/out/production/A079/server/maps/MapScriptMethods$onUserEnter.class b/out/production/A079/server/maps/MapScriptMethods$onUserEnter.class
new file mode 100644
index 0000000..be1cdcb
Binary files /dev/null and b/out/production/A079/server/maps/MapScriptMethods$onUserEnter.class differ
diff --git a/out/production/A079/server/maps/MapScriptMethods.class b/out/production/A079/server/maps/MapScriptMethods.class
new file mode 100644
index 0000000..66dbfb5
Binary files /dev/null and b/out/production/A079/server/maps/MapScriptMethods.class differ
diff --git a/out/production/A079/server/maps/MapleDoor$1.class b/out/production/A079/server/maps/MapleDoor$1.class
new file mode 100644
index 0000000..3360877
Binary files /dev/null and b/out/production/A079/server/maps/MapleDoor$1.class differ
diff --git a/out/production/A079/server/maps/MapleDoor.class b/out/production/A079/server/maps/MapleDoor.class
new file mode 100644
index 0000000..56e6d0f
Binary files /dev/null and b/out/production/A079/server/maps/MapleDoor.class differ
diff --git a/out/production/A079/server/maps/MapleFoothold.class b/out/production/A079/server/maps/MapleFoothold.class
new file mode 100644
index 0000000..e1ad09d
Binary files /dev/null and b/out/production/A079/server/maps/MapleFoothold.class differ
diff --git a/out/production/A079/server/maps/MapleFootholdTree.class b/out/production/A079/server/maps/MapleFootholdTree.class
new file mode 100644
index 0000000..1693f32
Binary files /dev/null and b/out/production/A079/server/maps/MapleFootholdTree.class differ
diff --git a/out/production/A079/server/maps/MapleGenericPortal.class b/out/production/A079/server/maps/MapleGenericPortal.class
new file mode 100644
index 0000000..1f15c01
Binary files /dev/null and b/out/production/A079/server/maps/MapleGenericPortal.class differ
diff --git a/out/production/A079/server/maps/MapleKite.class b/out/production/A079/server/maps/MapleKite.class
new file mode 100644
index 0000000..51052b0
Binary files /dev/null and b/out/production/A079/server/maps/MapleKite.class differ
diff --git a/out/production/A079/server/maps/MapleMap$1.class b/out/production/A079/server/maps/MapleMap$1.class
new file mode 100644
index 0000000..88d75de
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$1.class differ
diff --git a/out/production/A079/server/maps/MapleMap$10.class b/out/production/A079/server/maps/MapleMap$10.class
new file mode 100644
index 0000000..5df5a8e
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$10.class differ
diff --git a/out/production/A079/server/maps/MapleMap$11.class b/out/production/A079/server/maps/MapleMap$11.class
new file mode 100644
index 0000000..4eaa7f4
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$11.class differ
diff --git a/out/production/A079/server/maps/MapleMap$12.class b/out/production/A079/server/maps/MapleMap$12.class
new file mode 100644
index 0000000..490963c
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$12.class differ
diff --git a/out/production/A079/server/maps/MapleMap$13.class b/out/production/A079/server/maps/MapleMap$13.class
new file mode 100644
index 0000000..9bc4cda
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$13.class differ
diff --git a/out/production/A079/server/maps/MapleMap$14.class b/out/production/A079/server/maps/MapleMap$14.class
new file mode 100644
index 0000000..cffcbe1
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$14.class differ
diff --git a/out/production/A079/server/maps/MapleMap$15.class b/out/production/A079/server/maps/MapleMap$15.class
new file mode 100644
index 0000000..8d93f88
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$15.class differ
diff --git a/out/production/A079/server/maps/MapleMap$16.class b/out/production/A079/server/maps/MapleMap$16.class
new file mode 100644
index 0000000..221f249
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$16.class differ
diff --git a/out/production/A079/server/maps/MapleMap$17.class b/out/production/A079/server/maps/MapleMap$17.class
new file mode 100644
index 0000000..0d7c93b
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$17.class differ
diff --git a/out/production/A079/server/maps/MapleMap$18.class b/out/production/A079/server/maps/MapleMap$18.class
new file mode 100644
index 0000000..5245e45
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$18.class differ
diff --git a/out/production/A079/server/maps/MapleMap$19.class b/out/production/A079/server/maps/MapleMap$19.class
new file mode 100644
index 0000000..8cf60dc
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$19.class differ
diff --git a/out/production/A079/server/maps/MapleMap$2.class b/out/production/A079/server/maps/MapleMap$2.class
new file mode 100644
index 0000000..f937e34
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$2.class differ
diff --git a/out/production/A079/server/maps/MapleMap$20.class b/out/production/A079/server/maps/MapleMap$20.class
new file mode 100644
index 0000000..871d639
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$20.class differ
diff --git a/out/production/A079/server/maps/MapleMap$21.class b/out/production/A079/server/maps/MapleMap$21.class
new file mode 100644
index 0000000..2ddf50e
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$21.class differ
diff --git a/out/production/A079/server/maps/MapleMap$22.class b/out/production/A079/server/maps/MapleMap$22.class
new file mode 100644
index 0000000..5b91f50
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$22.class differ
diff --git a/out/production/A079/server/maps/MapleMap$23.class b/out/production/A079/server/maps/MapleMap$23.class
new file mode 100644
index 0000000..71fd1ec
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$23.class differ
diff --git a/out/production/A079/server/maps/MapleMap$24.class b/out/production/A079/server/maps/MapleMap$24.class
new file mode 100644
index 0000000..b6828c9
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$24.class differ
diff --git a/out/production/A079/server/maps/MapleMap$25.class b/out/production/A079/server/maps/MapleMap$25.class
new file mode 100644
index 0000000..99dd7a6
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$25.class differ
diff --git a/out/production/A079/server/maps/MapleMap$26.class b/out/production/A079/server/maps/MapleMap$26.class
new file mode 100644
index 0000000..7bcff2c
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$26.class differ
diff --git a/out/production/A079/server/maps/MapleMap$27.class b/out/production/A079/server/maps/MapleMap$27.class
new file mode 100644
index 0000000..0a89422
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$27.class differ
diff --git a/out/production/A079/server/maps/MapleMap$3.class b/out/production/A079/server/maps/MapleMap$3.class
new file mode 100644
index 0000000..ac0bcaf
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$3.class differ
diff --git a/out/production/A079/server/maps/MapleMap$4.class b/out/production/A079/server/maps/MapleMap$4.class
new file mode 100644
index 0000000..059fe7d
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$4.class differ
diff --git a/out/production/A079/server/maps/MapleMap$5.class b/out/production/A079/server/maps/MapleMap$5.class
new file mode 100644
index 0000000..4c329c9
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$5.class differ
diff --git a/out/production/A079/server/maps/MapleMap$6.class b/out/production/A079/server/maps/MapleMap$6.class
new file mode 100644
index 0000000..5ec754d
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$6.class differ
diff --git a/out/production/A079/server/maps/MapleMap$7.class b/out/production/A079/server/maps/MapleMap$7.class
new file mode 100644
index 0000000..8ba7023
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$7.class differ
diff --git a/out/production/A079/server/maps/MapleMap$8.class b/out/production/A079/server/maps/MapleMap$8.class
new file mode 100644
index 0000000..227e212
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$8.class differ
diff --git a/out/production/A079/server/maps/MapleMap$9.class b/out/production/A079/server/maps/MapleMap$9.class
new file mode 100644
index 0000000..ad30444
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$9.class differ
diff --git a/out/production/A079/server/maps/MapleMap$ActivateItemReactor$1.class b/out/production/A079/server/maps/MapleMap$ActivateItemReactor$1.class
new file mode 100644
index 0000000..212e3ab
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$ActivateItemReactor$1.class differ
diff --git a/out/production/A079/server/maps/MapleMap$ActivateItemReactor.class b/out/production/A079/server/maps/MapleMap$ActivateItemReactor.class
new file mode 100644
index 0000000..74ad328
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$ActivateItemReactor.class differ
diff --git a/out/production/A079/server/maps/MapleMap$DelayedPacketCreation.class b/out/production/A079/server/maps/MapleMap$DelayedPacketCreation.class
new file mode 100644
index 0000000..f903440
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$DelayedPacketCreation.class differ
diff --git a/out/production/A079/server/maps/MapleMap$SpawnCondition.class b/out/production/A079/server/maps/MapleMap$SpawnCondition.class
new file mode 100644
index 0000000..f66eca9
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap$SpawnCondition.class differ
diff --git a/out/production/A079/server/maps/MapleMap.class b/out/production/A079/server/maps/MapleMap.class
new file mode 100644
index 0000000..1b8f85a
Binary files /dev/null and b/out/production/A079/server/maps/MapleMap.class differ
diff --git a/out/production/A079/server/maps/MapleMapEffect.class b/out/production/A079/server/maps/MapleMapEffect.class
new file mode 100644
index 0000000..d45313b
Binary files /dev/null and b/out/production/A079/server/maps/MapleMapEffect.class differ
diff --git a/out/production/A079/server/maps/MapleMapFactory.class b/out/production/A079/server/maps/MapleMapFactory.class
new file mode 100644
index 0000000..a991c13
Binary files /dev/null and b/out/production/A079/server/maps/MapleMapFactory.class differ
diff --git a/out/production/A079/server/maps/MapleMapItem.class b/out/production/A079/server/maps/MapleMapItem.class
new file mode 100644
index 0000000..8b1c611
Binary files /dev/null and b/out/production/A079/server/maps/MapleMapItem.class differ
diff --git a/out/production/A079/server/maps/MapleMapObject.class b/out/production/A079/server/maps/MapleMapObject.class
new file mode 100644
index 0000000..28124a1
Binary files /dev/null and b/out/production/A079/server/maps/MapleMapObject.class differ
diff --git a/out/production/A079/server/maps/MapleMapObjectType.class b/out/production/A079/server/maps/MapleMapObjectType.class
new file mode 100644
index 0000000..487555c
Binary files /dev/null and b/out/production/A079/server/maps/MapleMapObjectType.class differ
diff --git a/out/production/A079/server/maps/MapleMapPortal.class b/out/production/A079/server/maps/MapleMapPortal.class
new file mode 100644
index 0000000..eb4d085
Binary files /dev/null and b/out/production/A079/server/maps/MapleMapPortal.class differ
diff --git a/out/production/A079/server/maps/MapleMist.class b/out/production/A079/server/maps/MapleMist.class
new file mode 100644
index 0000000..9e68689
Binary files /dev/null and b/out/production/A079/server/maps/MapleMist.class differ
diff --git a/out/production/A079/server/maps/MapleNodes$MapleNodeInfo.class b/out/production/A079/server/maps/MapleNodes$MapleNodeInfo.class
new file mode 100644
index 0000000..5ddae40
Binary files /dev/null and b/out/production/A079/server/maps/MapleNodes$MapleNodeInfo.class differ
diff --git a/out/production/A079/server/maps/MapleNodes$MaplePlatform.class b/out/production/A079/server/maps/MapleNodes$MaplePlatform.class
new file mode 100644
index 0000000..0331353
Binary files /dev/null and b/out/production/A079/server/maps/MapleNodes$MaplePlatform.class differ
diff --git a/out/production/A079/server/maps/MapleNodes$MonsterPoint.class b/out/production/A079/server/maps/MapleNodes$MonsterPoint.class
new file mode 100644
index 0000000..3d9046f
Binary files /dev/null and b/out/production/A079/server/maps/MapleNodes$MonsterPoint.class differ
diff --git a/out/production/A079/server/maps/MapleNodes.class b/out/production/A079/server/maps/MapleNodes.class
new file mode 100644
index 0000000..f030c16
Binary files /dev/null and b/out/production/A079/server/maps/MapleNodes.class differ
diff --git a/out/production/A079/server/maps/MaplePvp.class b/out/production/A079/server/maps/MaplePvp.class
new file mode 100644
index 0000000..ec788b9
Binary files /dev/null and b/out/production/A079/server/maps/MaplePvp.class differ
diff --git a/out/production/A079/server/maps/MapleReactor$1.class b/out/production/A079/server/maps/MapleReactor$1.class
new file mode 100644
index 0000000..4aaa9b7
Binary files /dev/null and b/out/production/A079/server/maps/MapleReactor$1.class differ
diff --git a/out/production/A079/server/maps/MapleReactor$2.class b/out/production/A079/server/maps/MapleReactor$2.class
new file mode 100644
index 0000000..f1ce16d
Binary files /dev/null and b/out/production/A079/server/maps/MapleReactor$2.class differ
diff --git a/out/production/A079/server/maps/MapleReactor$3.class b/out/production/A079/server/maps/MapleReactor$3.class
new file mode 100644
index 0000000..f5149f5
Binary files /dev/null and b/out/production/A079/server/maps/MapleReactor$3.class differ
diff --git a/out/production/A079/server/maps/MapleReactor.class b/out/production/A079/server/maps/MapleReactor.class
new file mode 100644
index 0000000..b14b6c5
Binary files /dev/null and b/out/production/A079/server/maps/MapleReactor.class differ
diff --git a/out/production/A079/server/maps/MapleReactorFactory.class b/out/production/A079/server/maps/MapleReactorFactory.class
new file mode 100644
index 0000000..24ae0ba
Binary files /dev/null and b/out/production/A079/server/maps/MapleReactorFactory.class differ
diff --git a/out/production/A079/server/maps/MapleReactorStats$1.class b/out/production/A079/server/maps/MapleReactorStats$1.class
new file mode 100644
index 0000000..80f7aee
Binary files /dev/null and b/out/production/A079/server/maps/MapleReactorStats$1.class differ
diff --git a/out/production/A079/server/maps/MapleReactorStats$StateData.class b/out/production/A079/server/maps/MapleReactorStats$StateData.class
new file mode 100644
index 0000000..4fa3cad
Binary files /dev/null and b/out/production/A079/server/maps/MapleReactorStats$StateData.class differ
diff --git a/out/production/A079/server/maps/MapleReactorStats.class b/out/production/A079/server/maps/MapleReactorStats.class
new file mode 100644
index 0000000..8ab3811
Binary files /dev/null and b/out/production/A079/server/maps/MapleReactorStats.class differ
diff --git a/out/production/A079/server/maps/MapleSummon.class b/out/production/A079/server/maps/MapleSummon.class
new file mode 100644
index 0000000..3f11a35
Binary files /dev/null and b/out/production/A079/server/maps/MapleSummon.class differ
diff --git a/out/production/A079/server/maps/ReactorDropEntry.class b/out/production/A079/server/maps/ReactorDropEntry.class
new file mode 100644
index 0000000..c4db44b
Binary files /dev/null and b/out/production/A079/server/maps/ReactorDropEntry.class differ
diff --git a/out/production/A079/server/maps/SavedLocationType.class b/out/production/A079/server/maps/SavedLocationType.class
new file mode 100644
index 0000000..bcf8ca9
Binary files /dev/null and b/out/production/A079/server/maps/SavedLocationType.class differ
diff --git a/out/production/A079/server/maps/SpeedRunType.class b/out/production/A079/server/maps/SpeedRunType.class
new file mode 100644
index 0000000..23fe812
Binary files /dev/null and b/out/production/A079/server/maps/SpeedRunType.class differ
diff --git a/out/production/A079/server/maps/SummonMovementType.class b/out/production/A079/server/maps/SummonMovementType.class
new file mode 100644
index 0000000..fe2cb45
Binary files /dev/null and b/out/production/A079/server/maps/SummonMovementType.class differ
diff --git a/out/production/A079/server/movement/AbstractLifeMovement.class b/out/production/A079/server/movement/AbstractLifeMovement.class
new file mode 100644
index 0000000..90bc0c5
Binary files /dev/null and b/out/production/A079/server/movement/AbstractLifeMovement.class differ
diff --git a/out/production/A079/server/movement/LifeMovement.class b/out/production/A079/server/movement/LifeMovement.class
new file mode 100644
index 0000000..f308414
Binary files /dev/null and b/out/production/A079/server/movement/LifeMovement.class differ
diff --git a/out/production/A079/server/movement/LifeMovementFragment.class b/out/production/A079/server/movement/LifeMovementFragment.class
new file mode 100644
index 0000000..e0d2147
Binary files /dev/null and b/out/production/A079/server/movement/LifeMovementFragment.class differ
diff --git a/out/production/A079/server/movement/StaticLifeMovement.class b/out/production/A079/server/movement/StaticLifeMovement.class
new file mode 100644
index 0000000..9cfe639
Binary files /dev/null and b/out/production/A079/server/movement/StaticLifeMovement.class differ
diff --git a/out/production/A079/server/player.class b/out/production/A079/server/player.class
new file mode 100644
index 0000000..8a049a2
Binary files /dev/null and b/out/production/A079/server/player.class differ
diff --git a/out/production/A079/server/quest/MapleQuest$MedalQuest.class b/out/production/A079/server/quest/MapleQuest$MedalQuest.class
new file mode 100644
index 0000000..ed6abaa
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuest$MedalQuest.class differ
diff --git a/out/production/A079/server/quest/MapleQuest.class b/out/production/A079/server/quest/MapleQuest.class
new file mode 100644
index 0000000..2793de8
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuest.class differ
diff --git a/out/production/A079/server/quest/MapleQuestAction$1.class b/out/production/A079/server/quest/MapleQuestAction$1.class
new file mode 100644
index 0000000..78786a4
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuestAction$1.class differ
diff --git a/out/production/A079/server/quest/MapleQuestAction$QuestItem.class b/out/production/A079/server/quest/MapleQuestAction$QuestItem.class
new file mode 100644
index 0000000..0babd17
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuestAction$QuestItem.class differ
diff --git a/out/production/A079/server/quest/MapleQuestAction.class b/out/production/A079/server/quest/MapleQuestAction.class
new file mode 100644
index 0000000..210975a
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuestAction.class differ
diff --git a/out/production/A079/server/quest/MapleQuestActionType.class b/out/production/A079/server/quest/MapleQuestActionType.class
new file mode 100644
index 0000000..c36b1bf
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuestActionType.class differ
diff --git a/out/production/A079/server/quest/MapleQuestRequirement$1.class b/out/production/A079/server/quest/MapleQuestRequirement$1.class
new file mode 100644
index 0000000..1a11c47
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuestRequirement$1.class differ
diff --git a/out/production/A079/server/quest/MapleQuestRequirement.class b/out/production/A079/server/quest/MapleQuestRequirement.class
new file mode 100644
index 0000000..48954ac
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuestRequirement.class differ
diff --git a/out/production/A079/server/quest/MapleQuestRequirementType.class b/out/production/A079/server/quest/MapleQuestRequirementType.class
new file mode 100644
index 0000000..71f7f05
Binary files /dev/null and b/out/production/A079/server/quest/MapleQuestRequirementType.class differ
diff --git a/out/production/A079/server/shops/AbstractPlayerStore$BoughtItem.class b/out/production/A079/server/shops/AbstractPlayerStore$BoughtItem.class
new file mode 100644
index 0000000..3ad17a1
Binary files /dev/null and b/out/production/A079/server/shops/AbstractPlayerStore$BoughtItem.class differ
diff --git a/out/production/A079/server/shops/AbstractPlayerStore.class b/out/production/A079/server/shops/AbstractPlayerStore.class
new file mode 100644
index 0000000..bc01949
Binary files /dev/null and b/out/production/A079/server/shops/AbstractPlayerStore.class differ
diff --git a/out/production/A079/server/shops/HiredMerchant$1.class b/out/production/A079/server/shops/HiredMerchant$1.class
new file mode 100644
index 0000000..6fd24f9
Binary files /dev/null and b/out/production/A079/server/shops/HiredMerchant$1.class differ
diff --git a/out/production/A079/server/shops/HiredMerchant.class b/out/production/A079/server/shops/HiredMerchant.class
new file mode 100644
index 0000000..f063049
Binary files /dev/null and b/out/production/A079/server/shops/HiredMerchant.class differ
diff --git a/out/production/A079/server/shops/HiredMerchantSave$1.class b/out/production/A079/server/shops/HiredMerchantSave$1.class
new file mode 100644
index 0000000..78e3e26
Binary files /dev/null and b/out/production/A079/server/shops/HiredMerchantSave$1.class differ
diff --git a/out/production/A079/server/shops/HiredMerchantSave$HiredMerchantSaveRunnable.class b/out/production/A079/server/shops/HiredMerchantSave$HiredMerchantSaveRunnable.class
new file mode 100644
index 0000000..c84b135
Binary files /dev/null and b/out/production/A079/server/shops/HiredMerchantSave$HiredMerchantSaveRunnable.class differ
diff --git a/out/production/A079/server/shops/HiredMerchantSave$TimingThread.class b/out/production/A079/server/shops/HiredMerchantSave$TimingThread.class
new file mode 100644
index 0000000..61c23f7
Binary files /dev/null and b/out/production/A079/server/shops/HiredMerchantSave$TimingThread.class differ
diff --git a/out/production/A079/server/shops/HiredMerchantSave.class b/out/production/A079/server/shops/HiredMerchantSave.class
new file mode 100644
index 0000000..2e1f645
Binary files /dev/null and b/out/production/A079/server/shops/HiredMerchantSave.class differ
diff --git a/out/production/A079/server/shops/IMaplePlayerShop.class b/out/production/A079/server/shops/IMaplePlayerShop.class
new file mode 100644
index 0000000..c307e38
Binary files /dev/null and b/out/production/A079/server/shops/IMaplePlayerShop.class differ
diff --git a/out/production/A079/server/shops/MapleMiniGame.class b/out/production/A079/server/shops/MapleMiniGame.class
new file mode 100644
index 0000000..47008fa
Binary files /dev/null and b/out/production/A079/server/shops/MapleMiniGame.class differ
diff --git a/out/production/A079/server/shops/MaplePlayerShop.class b/out/production/A079/server/shops/MaplePlayerShop.class
new file mode 100644
index 0000000..01f820a
Binary files /dev/null and b/out/production/A079/server/shops/MaplePlayerShop.class differ
diff --git a/out/production/A079/server/shops/MaplePlayerShopItem.class b/out/production/A079/server/shops/MaplePlayerShopItem.class
new file mode 100644
index 0000000..6a69a86
Binary files /dev/null and b/out/production/A079/server/shops/MaplePlayerShopItem.class differ
diff --git a/out/production/A079/tools/ArrayMap$1.class b/out/production/A079/tools/ArrayMap$1.class
new file mode 100644
index 0000000..f591dfe
Binary files /dev/null and b/out/production/A079/tools/ArrayMap$1.class differ
diff --git a/out/production/A079/tools/ArrayMap$Entry.class b/out/production/A079/tools/ArrayMap$Entry.class
new file mode 100644
index 0000000..3ce1303
Binary files /dev/null and b/out/production/A079/tools/ArrayMap$Entry.class differ
diff --git a/out/production/A079/tools/ArrayMap.class b/out/production/A079/tools/ArrayMap.class
new file mode 100644
index 0000000..f841d1b
Binary files /dev/null and b/out/production/A079/tools/ArrayMap.class differ
diff --git a/out/production/A079/tools/AttackPair.class b/out/production/A079/tools/AttackPair.class
new file mode 100644
index 0000000..4842d7d
Binary files /dev/null and b/out/production/A079/tools/AttackPair.class differ
diff --git a/out/production/A079/tools/BitTools.class b/out/production/A079/tools/BitTools.class
new file mode 100644
index 0000000..dc41a15
Binary files /dev/null and b/out/production/A079/tools/BitTools.class differ
diff --git a/out/production/A079/tools/BytesEncodingDetect.class b/out/production/A079/tools/BytesEncodingDetect.class
new file mode 100644
index 0000000..a9c964a
Binary files /dev/null and b/out/production/A079/tools/BytesEncodingDetect.class differ
diff --git a/out/production/A079/tools/CPUSampler$1.class b/out/production/A079/tools/CPUSampler$1.class
new file mode 100644
index 0000000..5eb4816
Binary files /dev/null and b/out/production/A079/tools/CPUSampler$1.class differ
diff --git a/out/production/A079/tools/CPUSampler$SampledStacktraces.class b/out/production/A079/tools/CPUSampler$SampledStacktraces.class
new file mode 100644
index 0000000..4e3b8fe
Binary files /dev/null and b/out/production/A079/tools/CPUSampler$SampledStacktraces.class differ
diff --git a/out/production/A079/tools/CPUSampler$SamplerThread.class b/out/production/A079/tools/CPUSampler$SamplerThread.class
new file mode 100644
index 0000000..537d79c
Binary files /dev/null and b/out/production/A079/tools/CPUSampler$SamplerThread.class differ
diff --git a/out/production/A079/tools/CPUSampler$StackTrace.class b/out/production/A079/tools/CPUSampler$StackTrace.class
new file mode 100644
index 0000000..db8c3e9
Binary files /dev/null and b/out/production/A079/tools/CPUSampler$StackTrace.class differ
diff --git a/out/production/A079/tools/CPUSampler$StacktraceWithCount.class b/out/production/A079/tools/CPUSampler$StacktraceWithCount.class
new file mode 100644
index 0000000..27cf700
Binary files /dev/null and b/out/production/A079/tools/CPUSampler$StacktraceWithCount.class differ
diff --git a/out/production/A079/tools/CPUSampler.class b/out/production/A079/tools/CPUSampler.class
new file mode 100644
index 0000000..245f02a
Binary files /dev/null and b/out/production/A079/tools/CPUSampler.class differ
diff --git a/out/production/A079/tools/CollectionUtil.class b/out/production/A079/tools/CollectionUtil.class
new file mode 100644
index 0000000..f6acc98
Binary files /dev/null and b/out/production/A079/tools/CollectionUtil.class differ
diff --git a/out/production/A079/tools/ConcurrentEnumMap.class b/out/production/A079/tools/ConcurrentEnumMap.class
new file mode 100644
index 0000000..05e8e6a
Binary files /dev/null and b/out/production/A079/tools/ConcurrentEnumMap.class differ
diff --git a/out/production/A079/tools/Encoding.class b/out/production/A079/tools/Encoding.class
new file mode 100644
index 0000000..02f6f8c
Binary files /dev/null and b/out/production/A079/tools/Encoding.class differ
diff --git a/out/production/A079/tools/EncodingDetect.class b/out/production/A079/tools/EncodingDetect.class
new file mode 100644
index 0000000..23be384
Binary files /dev/null and b/out/production/A079/tools/EncodingDetect.class differ
diff --git a/out/production/A079/tools/Eval$1.class b/out/production/A079/tools/Eval$1.class
new file mode 100644
index 0000000..a06d0d6
Binary files /dev/null and b/out/production/A079/tools/Eval$1.class differ
diff --git a/out/production/A079/tools/Eval$Compiler.class b/out/production/A079/tools/Eval$Compiler.class
new file mode 100644
index 0000000..da43c86
Binary files /dev/null and b/out/production/A079/tools/Eval$Compiler.class differ
diff --git a/out/production/A079/tools/Eval$Operation.class b/out/production/A079/tools/Eval$Operation.class
new file mode 100644
index 0000000..2d09af4
Binary files /dev/null and b/out/production/A079/tools/Eval$Operation.class differ
diff --git a/out/production/A079/tools/Eval$Operator$1.class b/out/production/A079/tools/Eval$Operator$1.class
new file mode 100644
index 0000000..e190767
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$1.class differ
diff --git a/out/production/A079/tools/Eval$Operator$10.class b/out/production/A079/tools/Eval$Operator$10.class
new file mode 100644
index 0000000..d02d8da
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$10.class differ
diff --git a/out/production/A079/tools/Eval$Operator$11.class b/out/production/A079/tools/Eval$Operator$11.class
new file mode 100644
index 0000000..b2f0bc4
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$11.class differ
diff --git a/out/production/A079/tools/Eval$Operator$12.class b/out/production/A079/tools/Eval$Operator$12.class
new file mode 100644
index 0000000..ae8f200
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$12.class differ
diff --git a/out/production/A079/tools/Eval$Operator$13.class b/out/production/A079/tools/Eval$Operator$13.class
new file mode 100644
index 0000000..9d825e7
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$13.class differ
diff --git a/out/production/A079/tools/Eval$Operator$14.class b/out/production/A079/tools/Eval$Operator$14.class
new file mode 100644
index 0000000..dd48e39
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$14.class differ
diff --git a/out/production/A079/tools/Eval$Operator$15.class b/out/production/A079/tools/Eval$Operator$15.class
new file mode 100644
index 0000000..bed3326
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$15.class differ
diff --git a/out/production/A079/tools/Eval$Operator$16.class b/out/production/A079/tools/Eval$Operator$16.class
new file mode 100644
index 0000000..585e805
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$16.class differ
diff --git a/out/production/A079/tools/Eval$Operator$17.class b/out/production/A079/tools/Eval$Operator$17.class
new file mode 100644
index 0000000..2c04105
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$17.class differ
diff --git a/out/production/A079/tools/Eval$Operator$18.class b/out/production/A079/tools/Eval$Operator$18.class
new file mode 100644
index 0000000..4d2b078
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$18.class differ
diff --git a/out/production/A079/tools/Eval$Operator$19.class b/out/production/A079/tools/Eval$Operator$19.class
new file mode 100644
index 0000000..a288d52
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$19.class differ
diff --git a/out/production/A079/tools/Eval$Operator$2.class b/out/production/A079/tools/Eval$Operator$2.class
new file mode 100644
index 0000000..805801c
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$2.class differ
diff --git a/out/production/A079/tools/Eval$Operator$20.class b/out/production/A079/tools/Eval$Operator$20.class
new file mode 100644
index 0000000..497879e
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$20.class differ
diff --git a/out/production/A079/tools/Eval$Operator$21.class b/out/production/A079/tools/Eval$Operator$21.class
new file mode 100644
index 0000000..d54a976
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$21.class differ
diff --git a/out/production/A079/tools/Eval$Operator$22.class b/out/production/A079/tools/Eval$Operator$22.class
new file mode 100644
index 0000000..9d0fd36
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$22.class differ
diff --git a/out/production/A079/tools/Eval$Operator$23.class b/out/production/A079/tools/Eval$Operator$23.class
new file mode 100644
index 0000000..a87f1db
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$23.class differ
diff --git a/out/production/A079/tools/Eval$Operator$3.class b/out/production/A079/tools/Eval$Operator$3.class
new file mode 100644
index 0000000..0642830
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$3.class differ
diff --git a/out/production/A079/tools/Eval$Operator$4.class b/out/production/A079/tools/Eval$Operator$4.class
new file mode 100644
index 0000000..7be49c9
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$4.class differ
diff --git a/out/production/A079/tools/Eval$Operator$5.class b/out/production/A079/tools/Eval$Operator$5.class
new file mode 100644
index 0000000..e998437
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$5.class differ
diff --git a/out/production/A079/tools/Eval$Operator$6.class b/out/production/A079/tools/Eval$Operator$6.class
new file mode 100644
index 0000000..276c2a3
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$6.class differ
diff --git a/out/production/A079/tools/Eval$Operator$7.class b/out/production/A079/tools/Eval$Operator$7.class
new file mode 100644
index 0000000..d725ee2
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$7.class differ
diff --git a/out/production/A079/tools/Eval$Operator$8.class b/out/production/A079/tools/Eval$Operator$8.class
new file mode 100644
index 0000000..8d9231a
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$8.class differ
diff --git a/out/production/A079/tools/Eval$Operator$9.class b/out/production/A079/tools/Eval$Operator$9.class
new file mode 100644
index 0000000..c020be9
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator$9.class differ
diff --git a/out/production/A079/tools/Eval$Operator.class b/out/production/A079/tools/Eval$Operator.class
new file mode 100644
index 0000000..24f83d2
Binary files /dev/null and b/out/production/A079/tools/Eval$Operator.class differ
diff --git a/out/production/A079/tools/Eval$Tokeniser.class b/out/production/A079/tools/Eval$Tokeniser.class
new file mode 100644
index 0000000..9b3edca
Binary files /dev/null and b/out/production/A079/tools/Eval$Tokeniser.class differ
diff --git a/out/production/A079/tools/Eval$Type.class b/out/production/A079/tools/Eval$Type.class
new file mode 100644
index 0000000..f25ac4f
Binary files /dev/null and b/out/production/A079/tools/Eval$Type.class differ
diff --git a/out/production/A079/tools/Eval.class b/out/production/A079/tools/Eval.class
new file mode 100644
index 0000000..ec6cf71
Binary files /dev/null and b/out/production/A079/tools/Eval.class differ
diff --git a/out/production/A079/tools/FilePrinter.class b/out/production/A079/tools/FilePrinter.class
new file mode 100644
index 0000000..aa1c761
Binary files /dev/null and b/out/production/A079/tools/FilePrinter.class differ
diff --git a/out/production/A079/tools/FileoutputUtil.class b/out/production/A079/tools/FileoutputUtil.class
new file mode 100644
index 0000000..126203b
Binary files /dev/null and b/out/production/A079/tools/FileoutputUtil.class differ
diff --git a/out/production/A079/tools/FixDropNullItem.class b/out/production/A079/tools/FixDropNullItem.class
new file mode 100644
index 0000000..117d821
Binary files /dev/null and b/out/production/A079/tools/FixDropNullItem.class differ
diff --git a/out/production/A079/tools/FixShopItemsPrice.class b/out/production/A079/tools/FixShopItemsPrice.class
new file mode 100644
index 0000000..a27e7bb
Binary files /dev/null and b/out/production/A079/tools/FixShopItemsPrice.class differ
diff --git a/out/production/A079/tools/HexTool.class b/out/production/A079/tools/HexTool.class
new file mode 100644
index 0000000..6fc27b0
Binary files /dev/null and b/out/production/A079/tools/HexTool.class differ
diff --git a/out/production/A079/tools/IPAddressTool.class b/out/production/A079/tools/IPAddressTool.class
new file mode 100644
index 0000000..c49b1a4
Binary files /dev/null and b/out/production/A079/tools/IPAddressTool.class differ
diff --git a/out/production/A079/tools/KoreanDateUtil.class b/out/production/A079/tools/KoreanDateUtil.class
new file mode 100644
index 0000000..9011ccd
Binary files /dev/null and b/out/production/A079/tools/KoreanDateUtil.class differ
diff --git a/out/production/A079/tools/LoadPacket.class b/out/production/A079/tools/LoadPacket.class
new file mode 100644
index 0000000..73f0b75
Binary files /dev/null and b/out/production/A079/tools/LoadPacket.class differ
diff --git a/out/production/A079/tools/LongValueHolder.class b/out/production/A079/tools/LongValueHolder.class
new file mode 100644
index 0000000..6ee0ca1
Binary files /dev/null and b/out/production/A079/tools/LongValueHolder.class differ
diff --git a/out/production/A079/tools/MacAddressTool.class b/out/production/A079/tools/MacAddressTool.class
new file mode 100644
index 0000000..3500891
Binary files /dev/null and b/out/production/A079/tools/MacAddressTool.class differ
diff --git a/out/production/A079/tools/MapleAESOFB.class b/out/production/A079/tools/MapleAESOFB.class
new file mode 100644
index 0000000..182567b
Binary files /dev/null and b/out/production/A079/tools/MapleAESOFB.class differ
diff --git a/out/production/A079/tools/MapleCustomEncryption.class b/out/production/A079/tools/MapleCustomEncryption.class
new file mode 100644
index 0000000..9350be5
Binary files /dev/null and b/out/production/A079/tools/MapleCustomEncryption.class differ
diff --git a/out/production/A079/tools/MaplePacketCreator$1.class b/out/production/A079/tools/MaplePacketCreator$1.class
new file mode 100644
index 0000000..0a190fc
Binary files /dev/null and b/out/production/A079/tools/MaplePacketCreator$1.class differ
diff --git a/out/production/A079/tools/MaplePacketCreator$2.class b/out/production/A079/tools/MaplePacketCreator$2.class
new file mode 100644
index 0000000..3215506
Binary files /dev/null and b/out/production/A079/tools/MaplePacketCreator$2.class differ
diff --git a/out/production/A079/tools/MaplePacketCreator.class b/out/production/A079/tools/MaplePacketCreator.class
new file mode 100644
index 0000000..9199931
Binary files /dev/null and b/out/production/A079/tools/MaplePacketCreator.class differ
diff --git a/out/production/A079/tools/MockIOSession.class b/out/production/A079/tools/MockIOSession.class
new file mode 100644
index 0000000..f925115
Binary files /dev/null and b/out/production/A079/tools/MockIOSession.class differ
diff --git a/out/production/A079/tools/Pair.class b/out/production/A079/tools/Pair.class
new file mode 100644
index 0000000..37793fd
Binary files /dev/null and b/out/production/A079/tools/Pair.class differ
diff --git a/out/production/A079/tools/Quadra.class b/out/production/A079/tools/Quadra.class
new file mode 100644
index 0000000..1709d8d
Binary files /dev/null and b/out/production/A079/tools/Quadra.class differ
diff --git a/out/production/A079/tools/SearchGenerator$1.class b/out/production/A079/tools/SearchGenerator$1.class
new file mode 100644
index 0000000..30579d9
Binary files /dev/null and b/out/production/A079/tools/SearchGenerator$1.class differ
diff --git a/out/production/A079/tools/SearchGenerator$SearchType.class b/out/production/A079/tools/SearchGenerator$SearchType.class
new file mode 100644
index 0000000..9671b7e
Binary files /dev/null and b/out/production/A079/tools/SearchGenerator$SearchType.class differ
diff --git a/out/production/A079/tools/SearchGenerator.class b/out/production/A079/tools/SearchGenerator.class
new file mode 100644
index 0000000..7d9f088
Binary files /dev/null and b/out/production/A079/tools/SearchGenerator.class differ
diff --git a/out/production/A079/tools/StringUtil.class b/out/production/A079/tools/StringUtil.class
new file mode 100644
index 0000000..63e1c99
Binary files /dev/null and b/out/production/A079/tools/StringUtil.class differ
diff --git a/out/production/A079/tools/Triple.class b/out/production/A079/tools/Triple.class
new file mode 100644
index 0000000..6a9a2d0
Binary files /dev/null and b/out/production/A079/tools/Triple.class differ
diff --git a/out/production/A079/tools/ValidateCode.class b/out/production/A079/tools/ValidateCode.class
new file mode 100644
index 0000000..7d8292a
Binary files /dev/null and b/out/production/A079/tools/ValidateCode.class differ
diff --git a/out/production/A079/tools/data/ByteArrayByteStream.class b/out/production/A079/tools/data/ByteArrayByteStream.class
new file mode 100644
index 0000000..0fdd603
Binary files /dev/null and b/out/production/A079/tools/data/ByteArrayByteStream.class differ
diff --git a/out/production/A079/tools/data/InputStreamByteStream.class b/out/production/A079/tools/data/InputStreamByteStream.class
new file mode 100644
index 0000000..eadbd6e
Binary files /dev/null and b/out/production/A079/tools/data/InputStreamByteStream.class differ
diff --git a/out/production/A079/tools/data/LittleEndianAccessor.class b/out/production/A079/tools/data/LittleEndianAccessor.class
new file mode 100644
index 0000000..6536523
Binary files /dev/null and b/out/production/A079/tools/data/LittleEndianAccessor.class differ
diff --git a/out/production/A079/tools/data/MaplePacketLittleEndianWriter.class b/out/production/A079/tools/data/MaplePacketLittleEndianWriter.class
new file mode 100644
index 0000000..6678913
Binary files /dev/null and b/out/production/A079/tools/data/MaplePacketLittleEndianWriter.class differ
diff --git a/out/production/A079/tools/data/RandomAccessByteStream.class b/out/production/A079/tools/data/RandomAccessByteStream.class
new file mode 100644
index 0000000..2ba505f
Binary files /dev/null and b/out/production/A079/tools/data/RandomAccessByteStream.class differ
diff --git a/out/production/A079/tools/packet/FamilyPacket.class b/out/production/A079/tools/packet/FamilyPacket.class
new file mode 100644
index 0000000..06b7ebd
Binary files /dev/null and b/out/production/A079/tools/packet/FamilyPacket.class differ
diff --git a/out/production/A079/tools/packet/LoginPacket.class b/out/production/A079/tools/packet/LoginPacket.class
new file mode 100644
index 0000000..d86c840
Binary files /dev/null and b/out/production/A079/tools/packet/LoginPacket.class differ
diff --git a/out/production/A079/tools/packet/MTSCSPacket.class b/out/production/A079/tools/packet/MTSCSPacket.class
new file mode 100644
index 0000000..66c263f
Binary files /dev/null and b/out/production/A079/tools/packet/MTSCSPacket.class differ
diff --git a/out/production/A079/tools/packet/MobPacket$1.class b/out/production/A079/tools/packet/MobPacket$1.class
new file mode 100644
index 0000000..0f393ff
Binary files /dev/null and b/out/production/A079/tools/packet/MobPacket$1.class differ
diff --git a/out/production/A079/tools/packet/MobPacket.class b/out/production/A079/tools/packet/MobPacket.class
new file mode 100644
index 0000000..442c4cb
Binary files /dev/null and b/out/production/A079/tools/packet/MobPacket.class differ
diff --git a/out/production/A079/tools/packet/MonsterBookPacket.class b/out/production/A079/tools/packet/MonsterBookPacket.class
new file mode 100644
index 0000000..c806ecd
Binary files /dev/null and b/out/production/A079/tools/packet/MonsterBookPacket.class differ
diff --git a/out/production/A079/tools/packet/MonsterCarnivalPacket.class b/out/production/A079/tools/packet/MonsterCarnivalPacket.class
new file mode 100644
index 0000000..d76de2d
Binary files /dev/null and b/out/production/A079/tools/packet/MonsterCarnivalPacket.class differ
diff --git a/out/production/A079/tools/packet/PacketHelper.class b/out/production/A079/tools/packet/PacketHelper.class
new file mode 100644
index 0000000..0f1eb35
Binary files /dev/null and b/out/production/A079/tools/packet/PacketHelper.class differ
diff --git a/out/production/A079/tools/packet/PetPacket.class b/out/production/A079/tools/packet/PetPacket.class
new file mode 100644
index 0000000..ac3ffd5
Binary files /dev/null and b/out/production/A079/tools/packet/PetPacket.class differ
diff --git a/out/production/A079/tools/packet/PlayerShopPacket.class b/out/production/A079/tools/packet/PlayerShopPacket.class
new file mode 100644
index 0000000..b80fe9a
Binary files /dev/null and b/out/production/A079/tools/packet/PlayerShopPacket.class differ
diff --git a/out/production/A079/tools/packet/UIPacket.class b/out/production/A079/tools/packet/UIPacket.class
new file mode 100644
index 0000000..b4442ae
Binary files /dev/null and b/out/production/A079/tools/packet/UIPacket.class differ
diff --git a/out/production/A079/tools/wztosql/DumpCashShop.class b/out/production/A079/tools/wztosql/DumpCashShop.class
new file mode 100644
index 0000000..0e32d35
Binary files /dev/null and b/out/production/A079/tools/wztosql/DumpCashShop.class differ
diff --git a/out/production/A079/tools/wztosql/DumpHairFace.class b/out/production/A079/tools/wztosql/DumpHairFace.class
new file mode 100644
index 0000000..1cb57fa
Binary files /dev/null and b/out/production/A079/tools/wztosql/DumpHairFace.class differ
diff --git a/out/production/A079/tools/wztosql/DumpHairFaceTxt.class b/out/production/A079/tools/wztosql/DumpHairFaceTxt.class
new file mode 100644
index 0000000..2c10ab4
Binary files /dev/null and b/out/production/A079/tools/wztosql/DumpHairFaceTxt.class differ
diff --git a/out/production/A079/tools/wztosql/DumpItems.class b/out/production/A079/tools/wztosql/DumpItems.class
new file mode 100644
index 0000000..fb2c44d
Binary files /dev/null and b/out/production/A079/tools/wztosql/DumpItems.class differ
diff --git a/out/production/A079/tools/wztosql/DumpMobSkills.class b/out/production/A079/tools/wztosql/DumpMobSkills.class
new file mode 100644
index 0000000..6a26066
Binary files /dev/null and b/out/production/A079/tools/wztosql/DumpMobSkills.class differ
diff --git a/out/production/A079/tools/wztosql/DumpOxQuizData.class b/out/production/A079/tools/wztosql/DumpOxQuizData.class
new file mode 100644
index 0000000..ff9cc1b
Binary files /dev/null and b/out/production/A079/tools/wztosql/DumpOxQuizData.class differ
diff --git a/out/production/A079/tools/wztosql/DumpQuests.class b/out/production/A079/tools/wztosql/DumpQuests.class
new file mode 100644
index 0000000..6e3973f
Binary files /dev/null and b/out/production/A079/tools/wztosql/DumpQuests.class differ
diff --git a/out/production/A079/tools/wztosql/MonsterDropCreator$MobInfo.class b/out/production/A079/tools/wztosql/MonsterDropCreator$MobInfo.class
new file mode 100644
index 0000000..214fc65
Binary files /dev/null and b/out/production/A079/tools/wztosql/MonsterDropCreator$MobInfo.class differ
diff --git a/out/production/A079/tools/wztosql/MonsterDropCreator.class b/out/production/A079/tools/wztosql/MonsterDropCreator.class
new file mode 100644
index 0000000..afbe042
Binary files /dev/null and b/out/production/A079/tools/wztosql/MonsterDropCreator.class differ
diff --git a/out/production/A079/tools/wztosql/WzStringDumper.class b/out/production/A079/tools/wztosql/WzStringDumper.class
new file mode 100644
index 0000000..1d3856e
Binary files /dev/null and b/out/production/A079/tools/wztosql/WzStringDumper.class differ
diff --git a/src/MXDJR/BuildPack.java b/src/MXDJR/BuildPack.java
new file mode 100644
index 0000000..da0b796
--- /dev/null
+++ b/src/MXDJR/BuildPack.java
@@ -0,0 +1,30 @@
+package MXDJR;
+
+import java.nio.charset.StandardCharsets;
+
+import com.alibaba.fastjson.JSON;
+
+class BuildPack {
+ public static byte[] Build(final Object data, final int index) {
+ final String str = JSON.toJSONString(data) + " ";
+ final byte[] temp = str.getBytes(StandardCharsets.UTF_8);
+ temp[temp.length - 1] = (byte) index;
+ return temp;
+ }
+
+ public static byte[] BuildImage(final long qq, final long id, final long fid, final String img, final int index) {
+ String temp = "";
+ if (id != 0L) {
+ temp = temp + "id=" + id + "&";
+ }
+ if (fid != 0L) {
+ temp = temp + "fid=" + fid + "&";
+ }
+ temp = temp + "qq=" + qq + "&";
+ temp = temp + "img=" + img;
+ final String str = temp + " ";
+ final byte[] temp2 = str.getBytes(StandardCharsets.UTF_8);
+ temp2[temp2.length - 1] = (byte) index;
+ return temp2;
+ }
+}
diff --git a/src/MXDJR/ConfigObj.java b/src/MXDJR/ConfigObj.java
new file mode 100644
index 0000000..6ff17ac
--- /dev/null
+++ b/src/MXDJR/ConfigObj.java
@@ -0,0 +1,12 @@
+package MXDJR;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ConfigObj {
+ public List GJC;
+
+ public ConfigObj() {
+ this.GJC = (List) new ArrayList();
+ }
+}
diff --git a/src/MXDJR/ConfigRead.java b/src/MXDJR/ConfigRead.java
new file mode 100644
index 0000000..ce31c2f
--- /dev/null
+++ b/src/MXDJR/ConfigRead.java
@@ -0,0 +1,67 @@
+package MXDJR;
+
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.FileOutputStream;
+import java.util.Iterator;
+import java.io.IOException;
+
+import com.alibaba.fastjson.JSON;
+
+import java.io.Reader;
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.io.FileInputStream;
+import java.io.File;
+
+public class ConfigRead {
+ private static File ConfigFile;
+
+ public static boolean ReadStart(final String local) {
+ try {
+ ConfigRead.ConfigFile = new File(local + "AnswerConfig.json");
+ if (!ConfigRead.ConfigFile.exists()) {
+ ConfigRead.ConfigFile.createNewFile();
+ MXDJR.Config = new ConfigObj();
+ Save();
+ return true;
+ }
+ final InputStreamReader reader = new InputStreamReader((InputStream) new FileInputStream(ConfigRead.ConfigFile), StandardCharsets.UTF_8);
+ final BufferedReader bf = new BufferedReader((Reader) reader);
+ final char[] buf = new char[1024];
+ final StringBuilder data = new StringBuilder();
+ int length;
+ while ((length = bf.read(buf)) != -1) {
+ data.append(new String(buf, 0, length));
+ }
+ MXDJR.Config = (ConfigObj) JSON.parseObject(data.toString(), ConfigObj.class);
+ if (MXDJR.Config.GJC == null) {
+ MXDJR.Config = new ConfigObj();
+ Save();
+ }
+ bf.close();
+ reader.close();
+ for (final String item : MXDJR.Config.GJC) {
+ System.out.println("关键词:" + item);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+ public static void Save() {
+ try {
+ final FileOutputStream out = new FileOutputStream(ConfigRead.ConfigFile);
+ final OutputStreamWriter write = new OutputStreamWriter((OutputStream) out, StandardCharsets.UTF_8);
+ write.write(JSON.toJSONString(MXDJR.Config));
+ write.close();
+ out.close();
+ } catch (Exception e) {
+ System.out.println("配置文件保存失败:" + e);
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/MXDJR/FriendMessageEventPack.java b/src/MXDJR/FriendMessageEventPack.java
new file mode 100644
index 0000000..cdd60c5
--- /dev/null
+++ b/src/MXDJR/FriendMessageEventPack.java
@@ -0,0 +1,10 @@
+package MXDJR;
+
+import java.util.List;
+
+class FriendMessageEventPack extends PackBase {
+ public long id;
+ public String name;
+ public List message;
+ public int time;
+}
diff --git a/src/MXDJR/GroupMessageEventPack.java b/src/MXDJR/GroupMessageEventPack.java
new file mode 100644
index 0000000..213edaa
--- /dev/null
+++ b/src/MXDJR/GroupMessageEventPack.java
@@ -0,0 +1,10 @@
+package MXDJR;
+
+import java.util.List;
+
+class GroupMessageEventPack extends PackBase {
+ public long id;
+ public long fid;
+ public String name;
+ public List message;
+}
diff --git a/src/MXDJR/MXDJR.java b/src/MXDJR/MXDJR.java
new file mode 100644
index 0000000..7d61903
--- /dev/null
+++ b/src/MXDJR/MXDJR.java
@@ -0,0 +1,22 @@
+package MXDJR;
+
+public class MXDJR {
+ public static String RunDir;
+ public static ConfigObj Config;
+
+ public static void startJR() {
+ if (RobotSocket.IsRun) {
+ System.out.println("机器人已经启动了,本次关闭了机器人。");
+ RobotSocket.Stop();
+ return;
+ }
+ MXDJR.RunDir = System.getProperty("user.dir") + "/";
+ System.out.println("正在启动群机器人……");
+ if (ConfigRead.ReadStart(MXDJR.RunDir)) {
+ System.out.println("请修改配置文件后重新点击!");
+ return;
+ }
+ System.out.println("初始化完成,一共获取到" + MXDJR.Config.GJC.size() + "个关键词!");
+ RobotSocket.Start();
+ }
+}
diff --git a/src/MXDJR/PackBase.java b/src/MXDJR/PackBase.java
new file mode 100644
index 0000000..97acc62
--- /dev/null
+++ b/src/MXDJR/PackBase.java
@@ -0,0 +1,5 @@
+package MXDJR;
+
+abstract class PackBase {
+ public long qq;
+}
diff --git a/src/MXDJR/RobotSocket.java b/src/MXDJR/RobotSocket.java
new file mode 100644
index 0000000..5588e32
--- /dev/null
+++ b/src/MXDJR/RobotSocket.java
@@ -0,0 +1,266 @@
+package MXDJR;
+
+import java.util.ArrayList;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+
+import handling.world.World.Broadcast;
+import tools.MaplePacketCreator;
+import com.alibaba.fastjson.JSON;
+
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import constants.ServerConfig;
+
+import java.util.List;
+import java.net.Socket;
+
+public class RobotSocket {
+ private static Socket Socket;
+ private static Thread ReadThread;
+ private static Thread DoThread;
+ public static boolean IsRun;
+ public static boolean IsConnect;
+ private static List QueueRead;
+ private static List QueueSend;
+ private static int Num;
+ private static String list;
+ private static long[] QQ号;
+ private static long[] QQ群号;
+ private static long[] QQ群主;
+ private static final StartPack PackStart;
+
+ public static long QQ号() {
+ return RobotSocket.QQ号[ServerConfig.nub1];
+ }
+
+ public static long QQ群号() {
+ return RobotSocket.QQ群号[ServerConfig.nub1];
+ }
+
+ public static long QQ群主() {
+ return RobotSocket.QQ群主[ServerConfig.nub1];
+ }
+
+ public static void Start() {
+ RobotSocket.QueueRead = (List) new CopyOnWriteArrayList();
+ RobotSocket.QueueSend = (List) new CopyOnWriteArrayList();
+ RobotSocket.DoThread = new Thread((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ while (RobotSocket.IsRun) {
+ try {
+ if (!RobotSocket.QueueRead.isEmpty()) {
+ final RobotTask task = (RobotTask) RobotSocket.QueueRead.remove(0);
+ switch (task.index) {
+ case 49: {
+ final GroupMessageEventPack pack = (GroupMessageEventPack) JSON.parseObject(task.data, GroupMessageEventPack.class);
+ final String item = (String) pack.message.get(1);
+ if (!item.contains((CharSequence) "{") && !item.contains((CharSequence) "[")) {
+ Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(6, "[群消息]:" + pack.name + "->" + item));
+ }
+ if (item.contains((CharSequence) "增加关键字") && pack.fid == RobotSocket.QQ群主[ServerConfig.nub1]) {
+ final String 关键字 = item.substring(item.indexOf("字") + 1);
+ System.out.println("增加游戏内关键字:" + 关键字);
+ MXDJR.Config.GJC.add(关键字);
+ ConfigRead.Save();
+ final List send = Arrays.asList("我已经开通关键字:" + 关键字);
+ RobotSocket.SendGroupMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send);
+ break;
+ }
+ if (item.contains((CharSequence) "删除关键字") && pack.fid == RobotSocket.QQ群主[ServerConfig.nub1]) {
+ final String 关键字 = item.substring(item.indexOf("字") + 1);
+ System.out.println("删除游戏内关键字:" + 关键字);
+ for (int num = 0; num < MXDJR.Config.GJC.size(); ++num) {
+ if (((String) MXDJR.Config.GJC.get(num)).contains((CharSequence) 关键字)) {
+ MXDJR.Config.GJC.remove(num);
+ ConfigRead.Save();
+ final List send2 = Arrays.asList("我已经删除关键字:" + 关键字);
+ RobotSocket.SendGroupMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send2);
+ break;
+ }
+ }
+ }
+ if (item.contains((CharSequence) "查看关键字")) {
+ String 关键字2 = "";
+ for (int num2 = 0; num2 < MXDJR.Config.GJC.size(); ++num2) {
+ 关键字2 = 关键字2 + "【" + (String) MXDJR.Config.GJC.get(num2) + "】";
+ }
+ final List send2 = Arrays.asList("游戏通告支持关键字:" + 关键字2);
+ RobotSocket.SendGroupMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send2);
+ break;
+ }
+ break;
+ }
+ }
+ }
+ Thread.sleep(10L);
+ } catch (Exception e) {
+ ServerMain.LogError(e);
+ }
+ }
+ }
+ });
+ (RobotSocket.ReadThread = new Thread((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ try {
+ while (!RobotSocket.IsRun) {
+ Thread.sleep(100L);
+ }
+ } catch (Exception e) {
+ ServerMain.LogError(e);
+ }
+ RobotSocket.DoThread.start();
+ while (RobotSocket.IsRun) {
+ try {
+ if (!RobotSocket.IsConnect) {
+ ReConnect();
+ } else {
+ if (RobotSocket.Socket.getInputStream().available() > 0) {
+ final byte[] data = new byte[RobotSocket.Socket.getInputStream().available()];
+ RobotSocket.Socket.getInputStream().read(data);
+ final byte type = data[data.length - 1];
+ data[data.length - 1] = 0;
+ final String unicode = new String(data, "UTF-8");
+ final String gbk = new String(unicode.getBytes("GBK"));
+ RobotSocket.QueueRead.add(new RobotTask(type, gbk));
+ continue;
+ }
+ if (RobotSocket.Socket.getInputStream().available() < 0) {
+ ServerMain.LogOut("机器人连接中断");
+ RobotSocket.IsConnect = false;
+ } else if (!RobotSocket.QueueSend.isEmpty()) {
+ final byte[] data = (byte[]) RobotSocket.QueueSend.remove(0);
+ RobotSocket.Socket.getOutputStream().write(data);
+ RobotSocket.Socket.getOutputStream().flush();
+ }
+ }
+ Thread.sleep(50L);
+ } catch (Exception e2) {
+ ServerMain.LogError("机器人连接失败");
+ ServerMain.LogError(e2);
+ RobotSocket.IsConnect = false;
+ ServerMain.LogError("机器人20秒后重连");
+ try {
+ Thread.sleep(20000L);
+ } catch (InterruptedException interruptedException) {
+ interruptedException.printStackTrace();
+ }
+ ServerMain.LogError("机器人重连中");
+ }
+ }
+ }
+ })).start();
+ RobotSocket.IsRun = true;
+ }
+
+ private static boolean is() {
+ try {
+ RobotSocket.Socket.sendUrgentData(60);
+ return false;
+ } catch (Exception ex) {
+ return true;
+ }
+ }
+
+ private static void ReConnect() {
+ try {
+ if (RobotSocket.Socket != null) {
+ RobotSocket.Socket.close();
+ }
+ RobotSocket.Socket = new Socket("121.62.23.34", 790393010);
+ final byte[] data = (JSON.toJSON(RobotSocket.PackStart) + " ").getBytes(StandardCharsets.UTF_8);
+ data[data.length - 1] = 0;
+ RobotSocket.Socket.getOutputStream().write(data);
+ RobotSocket.Socket.getOutputStream().flush();
+ RobotSocket.QueueRead.clear();
+ RobotSocket.QueueSend.clear();
+ ServerMain.LogOut("机器人已连接");
+ RobotSocket.IsConnect = true;
+ } catch (Exception e) {
+ ServerMain.LogError("机器人连接失败");
+ ServerMain.LogError(e);
+ }
+ }
+
+ public static void SendGroupMessage(final long qq_, final long id_, final List message_) {
+ final byte[] data = BuildPack.Build(new SendGroupMessagePack() {
+ }, 52);
+ RobotSocket.QueueSend.add(data);
+ }
+
+ public static void SendGroupPrivateMessage(final long qq_, final long id_, final long fid_, final List message_) {
+ final byte[] data = BuildPack.Build(new SendGroupPrivateMessagePack() {
+ }, 53);
+ RobotSocket.QueueSend.add(data);
+ }
+
+ public static void SendFriendMessage(final long qq_, final long id_, final List message_) {
+ final byte[] data = BuildPack.Build(new SendFriendMessagePack() {
+ }, 54);
+ RobotSocket.QueueSend.add(data);
+ }
+
+ public static void SendGroupImage(final long qq, final long id, final String img) {
+ final byte[] data = BuildPack.BuildImage(qq, id, 0L, img, 61);
+ RobotSocket.QueueSend.add(data);
+ }
+
+ public static void SendGroupPrivateImage(final long qq, final long id, final long fid, final String img) {
+ final byte[] data = BuildPack.BuildImage(qq, id, fid, img, 62);
+ RobotSocket.QueueSend.add(data);
+ }
+
+ public static void SendFriendImage(final long qq, final long id, final String img) {
+ final byte[] data = BuildPack.BuildImage(qq, id, 0L, img, 63);
+ RobotSocket.QueueSend.add(data);
+ }
+
+ public static void Stop() {
+ ServerMain.LogOut("机器人正在断开!");
+ RobotSocket.IsRun = false;
+ if (RobotSocket.Socket != null) {
+ try {
+ RobotSocket.Socket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ ServerMain.LogOut("机器人已断开!");
+ }
+
+ public static final void robbatSpeak(final String text) {
+ if (RobotSocket.IsConnect) {
+ final List send = Arrays.asList(text);
+ SendGroupMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send);
+ }
+ }
+
+ public static final void robbatSpeak1(final String text) {
+ if (RobotSocket.IsConnect) {
+ final List send = Arrays.asList(text);
+ SendFriendMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send);
+ }
+ }
+
+ static {
+ Num = 0;
+ QQ号 = new long[]{3430308405L};
+ QQ群号 = new long[]{790393010L};
+ QQ群主 = new long[]{116711496L};
+ PackStart = new StartPack() {
+ {
+ Name = "MXDJR";
+ Reg = new ArrayList() {
+ {
+ add(Integer.valueOf(49));
+ add(Integer.valueOf(50));
+ add(Integer.valueOf(51));
+ }
+ };
+ }
+ };
+ }
+}
diff --git a/src/MXDJR/RobotTask.java b/src/MXDJR/RobotTask.java
new file mode 100644
index 0000000..8b4a028
--- /dev/null
+++ b/src/MXDJR/RobotTask.java
@@ -0,0 +1,11 @@
+package MXDJR;
+
+class RobotTask {
+ public byte index;
+ public String data;
+
+ public RobotTask(final byte type, final String s) {
+ this.index = type;
+ this.data = s;
+ }
+}
diff --git a/src/MXDJR/SendFriendImagePack.java b/src/MXDJR/SendFriendImagePack.java
new file mode 100644
index 0000000..f77a26d
--- /dev/null
+++ b/src/MXDJR/SendFriendImagePack.java
@@ -0,0 +1,6 @@
+package MXDJR;
+
+class SendFriendImagePack extends PackBase {
+ public long id;
+ public String img;
+}
diff --git a/src/MXDJR/SendFriendMessagePack.java b/src/MXDJR/SendFriendMessagePack.java
new file mode 100644
index 0000000..8bc8573
--- /dev/null
+++ b/src/MXDJR/SendFriendMessagePack.java
@@ -0,0 +1,8 @@
+package MXDJR;
+
+import java.util.List;
+
+class SendFriendMessagePack extends PackBase {
+ public long id;
+ public List message;
+}
diff --git a/src/MXDJR/SendGroupImagePack.java b/src/MXDJR/SendGroupImagePack.java
new file mode 100644
index 0000000..4e89d22
--- /dev/null
+++ b/src/MXDJR/SendGroupImagePack.java
@@ -0,0 +1,6 @@
+package MXDJR;
+
+class SendGroupImagePack extends PackBase {
+ public long id;
+ public String img;
+}
diff --git a/src/MXDJR/SendGroupMessagePack.java b/src/MXDJR/SendGroupMessagePack.java
new file mode 100644
index 0000000..a3ede37
--- /dev/null
+++ b/src/MXDJR/SendGroupMessagePack.java
@@ -0,0 +1,8 @@
+package MXDJR;
+
+import java.util.List;
+
+class SendGroupMessagePack extends PackBase {
+ public long id;
+ public List message;
+}
diff --git a/src/MXDJR/SendGroupPrivateImagePack.java b/src/MXDJR/SendGroupPrivateImagePack.java
new file mode 100644
index 0000000..8b75a89
--- /dev/null
+++ b/src/MXDJR/SendGroupPrivateImagePack.java
@@ -0,0 +1,7 @@
+package MXDJR;
+
+class SendGroupPrivateImagePack extends PackBase {
+ public long id;
+ public long fid;
+ public String img;
+}
diff --git a/src/MXDJR/SendGroupPrivateMessagePack.java b/src/MXDJR/SendGroupPrivateMessagePack.java
new file mode 100644
index 0000000..8adf6ca
--- /dev/null
+++ b/src/MXDJR/SendGroupPrivateMessagePack.java
@@ -0,0 +1,9 @@
+package MXDJR;
+
+import java.util.List;
+
+class SendGroupPrivateMessagePack extends PackBase {
+ public long id;
+ public long fid;
+ public List message;
+}
diff --git a/src/MXDJR/ServerMain.java b/src/MXDJR/ServerMain.java
new file mode 100644
index 0000000..21e4bb1
--- /dev/null
+++ b/src/MXDJR/ServerMain.java
@@ -0,0 +1,19 @@
+package MXDJR;
+
+class ServerMain {
+ public static void LogError(final Exception e) {
+ final String a = "[错误]";
+ System.out.println(a);
+ e.printStackTrace();
+ }
+
+ public static void LogError(String a) {
+ a = "[错误]" + a;
+ System.out.println(a);
+ }
+
+ public static void LogOut(String a) {
+ a = "[信息]" + a;
+ System.out.println(a);
+ }
+}
diff --git a/src/MXDJR/StartPack.java b/src/MXDJR/StartPack.java
new file mode 100644
index 0000000..e3d725e
--- /dev/null
+++ b/src/MXDJR/StartPack.java
@@ -0,0 +1,8 @@
+package MXDJR;
+
+import java.util.List;
+
+class StartPack {
+ public String Name;
+ public List Reg;
+}
diff --git a/src/MXDJR/TempMessageEventPack.java b/src/MXDJR/TempMessageEventPack.java
new file mode 100644
index 0000000..ef97107
--- /dev/null
+++ b/src/MXDJR/TempMessageEventPack.java
@@ -0,0 +1,5 @@
+package MXDJR;
+
+class TempMessageEventPack extends GroupMessageEventPack {
+ public int time;
+}
diff --git a/src/client/BuddyEntry.java b/src/client/BuddyEntry.java
new file mode 100644
index 0000000..9cfeabc
--- /dev/null
+++ b/src/client/BuddyEntry.java
@@ -0,0 +1,147 @@
+package client;
+
+import java.sql.ResultSet;
+import java.sql.PreparedStatement;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import tools.FileoutputUtil;
+import database.DBConPool;
+
+public class BuddyEntry {
+ private final String name;
+ private String group;
+ private final int characterId;
+ private final int level;
+ private final int job;
+ private boolean visible;
+ private int channel;
+
+ public BuddyEntry(final String name, final int characterId, final String group, final int channel, final boolean visible, final int level, final int job) {
+ this.name = name;
+ this.characterId = characterId;
+ this.group = group;
+ this.channel = channel;
+ this.visible = visible;
+ this.level = level;
+ this.job = job;
+ }
+
+ public int getChannel() {
+ return this.channel;
+ }
+
+ public void setChannel(final int channel) {
+ this.channel = channel;
+ }
+
+ public boolean isOnline() {
+ return this.channel >= 0;
+ }
+
+ public void setOffline() {
+ this.channel = -1;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public int getCharacterId() {
+ return this.characterId;
+ }
+
+ public int getLevel() {
+ return this.level;
+ }
+
+ public int getJob() {
+ return this.job;
+ }
+
+ public void setVisible(final boolean visible) {
+ this.visible = visible;
+ }
+
+ public boolean isVisible() {
+ return this.visible;
+ }
+
+ public String getGroup() {
+ return this.group;
+ }
+
+ public void setGroup(final String newGroup) {
+ this.group = newGroup;
+ }
+
+ public static BuddyEntry getByNameFromDB(final String buddyName) {
+ Connection con = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con.prepareStatement("SELECT id, name, level, job FROM characters WHERE name = ?");
+ ps.setString(1, buddyName);
+ rs = ps.executeQuery();
+ if (rs.next()) {
+ return new BuddyEntry(rs.getString("name"), rs.getInt("id"), "其他", -1, false, rs.getInt("level"), rs.getInt("job"));
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return null;
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ return null;
+ } finally {
+ DBConPool.cleanUP(rs, ps, con);
+ }
+ }
+
+ public static BuddyEntry getByIdfFromDB(final int buddyCharId) {
+ Connection con = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con.prepareStatement("SELECT id, name, level, job FROM characters WHERE id = ?");
+ ps.setInt(1, buddyCharId);
+ rs = ps.executeQuery();
+ if (rs.next()) {
+ return new BuddyEntry(rs.getString("name"), rs.getInt("id"), "其他", -1, true, rs.getInt("level"), rs.getInt("job"));
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return null;
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ return null;
+ } finally {
+ DBConPool.cleanUP(rs, ps, con);
+ }
+ }
+
+ @Override
+ public final int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = 31 * result + this.characterId;
+ return result;
+ }
+
+ @Override
+ public final boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ final BuddyEntry other = (BuddyEntry) obj;
+ return this.characterId == other.characterId;
+ }
+}
diff --git a/src/client/BuddyList.java b/src/client/BuddyList.java
new file mode 100644
index 0000000..98f7d52
--- /dev/null
+++ b/src/client/BuddyList.java
@@ -0,0 +1,262 @@
+package client;
+
+import tools.MaplePacketCreator;
+
+import java.sql.ResultSet;
+import java.sql.PreparedStatement;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import tools.FileoutputUtil;
+import database.DBConPool;
+
+import java.util.Map.Entry;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.Deque;
+import java.util.Map;
+import java.io.Serializable;
+
+public class BuddyList implements Serializable {
+ public static final String DEFAULT_GROUP = "其他";
+ private final Map buddies;
+ private byte capacity;
+ private final Deque pendingReqs;
+
+ public BuddyList(final byte capacity) {
+ this.pendingReqs = (Deque) new LinkedList();
+ this.buddies = (Map) new LinkedHashMap();
+ this.capacity = capacity;
+ }
+
+ public BuddyList(final int capacity) {
+ this.pendingReqs = (Deque) new LinkedList();
+ this.buddies = (Map) new LinkedHashMap();
+ this.capacity = (byte) capacity;
+ }
+
+ public boolean contains(final int characterId) {
+ return this.buddies.containsKey(Integer.valueOf(characterId));
+ }
+
+ public boolean containsVisible(final int charId) {
+ final BuddyEntry ble = (BuddyEntry) this.buddies.get(Integer.valueOf(charId));
+ return ble != null && ble.isVisible();
+ }
+
+ public byte getCapacity() {
+ return this.capacity;
+ }
+
+ public void setCapacity(final byte newCapacity) {
+ this.capacity = newCapacity;
+ }
+
+ public BuddyEntry get(final int characterId) {
+ return (BuddyEntry) this.buddies.get(Integer.valueOf(characterId));
+ }
+
+ public BuddyEntry get(final String characterName) {
+ final String searchName = characterName.toLowerCase();
+ for (final BuddyEntry ble : this.buddies.values()) {
+ if (ble.getName().toLowerCase().equals(searchName)) {
+ return ble;
+ }
+ }
+ return null;
+ }
+
+ public void put(final BuddyEntry newEntry) {
+ this.buddies.put(Integer.valueOf(newEntry.getCharacterId()), newEntry);
+ }
+
+ public void remove(final int characterId) {
+ this.buddies.remove(Integer.valueOf(characterId));
+ }
+
+ public Collection getBuddies() {
+ return this.buddies.values();
+ }
+
+ public boolean isFull() {
+ return this.buddies.size() >= this.capacity;
+ }
+
+ public Collection getBuddiesIds() {
+ return this.buddies.keySet();
+ }
+
+ public void loadFromTransfer(final Map data) {
+ for (final Entry qs : data.entrySet()) {
+ final BuddyEntry buddyid = (BuddyEntry) qs.getKey();
+ final boolean pair = ((Boolean) qs.getValue()).booleanValue();
+ if (!pair) {
+ this.pendingReqs.push(buddyid);
+ } else {
+ this.put(new BuddyEntry(buddyid.getName(), buddyid.getCharacterId(), buddyid.getGroup(), -1, true, buddyid.getLevel(), buddyid.getJob()));
+ }
+ }
+ }
+
+ public void loadFromDb(final int characterId) throws SQLException {
+ Connection con = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con.prepareStatement("SELECT b.buddyid, b.pending, c.name as buddyname, c.job as buddyjob, c.level as buddylevel, b.groupname FROM buddies as b, characters as c WHERE c.id = b.buddyid AND b.characterid = ?");
+ ps.setInt(1, characterId);
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ final int buddyid = rs.getInt("buddyid");
+ final String buddyname = rs.getString("buddyname");
+ if (rs.getInt("pending") == 1) {
+ this.pendingReqs.push(new BuddyEntry(buddyname, buddyid, rs.getString("groupname"), -1, false, rs.getInt("buddylevel"), rs.getInt("buddyjob")));
+ } else {
+ this.put(new BuddyEntry(buddyname, buddyid, rs.getString("groupname"), -1, true, rs.getInt("buddylevel"), rs.getInt("buddyjob")));
+ }
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("DELETE FROM buddies WHERE pending = 1 AND characterid = ?");
+ ps.setInt(1, characterId);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } finally {
+ DBConPool.cleanUP(rs, ps, con);
+ }
+ }
+
+ public BuddyEntry pollPendingRequest() {
+ return (BuddyEntry) this.pendingReqs.pollLast();
+ }
+
+ public void addBuddyRequest(final MapleClient client, final int buddyId, final String buddyName, final int buddyChannel, final int buddyLevel, final int buddyJob) {
+ this.put(new BuddyEntry(buddyName, buddyId, "其他", buddyChannel, false, buddyLevel, buddyJob));
+ if (this.pendingReqs.isEmpty()) {
+ client.sendPacket(MaplePacketCreator.requestBuddylistAdd(buddyId, buddyName, buddyLevel, buddyJob));
+ } else {
+ final BuddyEntry newPair = new BuddyEntry(buddyName, buddyId, "其他", -1, false, buddyJob, buddyLevel);
+ this.pendingReqs.push(newPair);
+ }
+ }
+
+ public static int getBuddyCount(final int chrId, final int pending) {
+ int count = 0;
+ Connection con = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con.prepareStatement("SELECT COUNT(*) as buddyCount FROM buddies WHERE characterid = ? AND pending = ?");
+ ps.setInt(1, chrId);
+ ps.setInt(2, pending);
+ rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ con.close();
+ throw new RuntimeException("BuddyListHandler: getBuudyCount From DB is Error.");
+ }
+ count = rs.getInt("buddyCount");
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } finally {
+ DBConPool.cleanUP(rs, ps, con);
+ }
+ return count;
+ }
+
+ public static int getBuddyCapacity(final int charId) {
+ int capacity = -1;
+ Connection con = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con.prepareStatement("SELECT buddyCapacity FROM characters WHERE id = ?");
+ ps.setInt(1, charId);
+ rs = ps.executeQuery();
+ if (rs.next()) {
+ capacity = rs.getInt("buddyCapacity");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } finally {
+ DBConPool.cleanUP(rs, ps, con);
+ }
+ return capacity;
+ }
+
+ public static int getBuddyPending(final int chrId, final int buddyId) {
+ int pending = -1;
+ Connection con = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con.prepareStatement("SELECT pending FROM buddies WHERE characterid = ? AND buddyid = ?");
+ ps.setInt(1, chrId);
+ ps.setInt(2, buddyId);
+ rs = ps.executeQuery();
+ if (rs.next()) {
+ pending = rs.getInt("pending");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } finally {
+ DBConPool.cleanUP(rs, ps, con);
+ }
+ return pending;
+ }
+
+ public static void addBuddyToDB(final MapleCharacter player, final BuddyEntry buddy) {
+ Connection con = null;
+ PreparedStatement ps = null;
+ final ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con.prepareStatement("INSERT INTO buddies (`characterid`, `buddyid`, `groupname`, `pending`) VALUES (?, ?, ?, 1)");
+ ps.setInt(1, buddy.getCharacterId());
+ ps.setInt(2, player.getId());
+ ps.setString(3, buddy.getGroup());
+ ps.executeUpdate();
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } finally {
+ DBConPool.cleanUP(rs, ps, con);
+ }
+ }
+
+ public enum BuddyOperation {
+ ADDED,
+ DELETED;
+ }
+
+ public enum BuddyAddResult {
+ BUDDYLIST_FULL,
+ ALREADY_ON_LIST,
+ OK;
+ }
+}
diff --git a/src/client/ISkill.java b/src/client/ISkill.java
new file mode 100644
index 0000000..6fcf268
--- /dev/null
+++ b/src/client/ISkill.java
@@ -0,0 +1,40 @@
+package client;
+
+import server.life.Element;
+import server.MapleStatEffect;
+
+public interface ISkill {
+ int getId();
+
+ MapleStatEffect getEffect(final int p0);
+
+ byte getMaxLevel();
+
+ int getAnimationTime();
+
+ boolean canBeLearnedBy(final int p0);
+
+ boolean isFourthJob();
+
+ boolean hasAction();
+
+ boolean isTimeLimited();
+
+ int getMasterLevel();
+
+ Element getElement();
+
+ boolean isBeginnerSkill();
+
+ boolean hasRequiredSkill();
+
+ boolean isInvisible();
+
+ boolean isChargeSkill();
+
+ int getRequiredSkillLevel();
+
+ int getRequiredSkillId();
+
+ String getName();
+}
diff --git a/src/client/ItemVac.java b/src/client/ItemVac.java
new file mode 100644
index 0000000..4042220
--- /dev/null
+++ b/src/client/ItemVac.java
@@ -0,0 +1,4 @@
+package client;
+
+public class ItemVac extends Thread {
+}
diff --git a/src/client/LoginCrypto.java b/src/client/LoginCrypto.java
new file mode 100644
index 0000000..ac09c48
--- /dev/null
+++ b/src/client/LoginCrypto.java
@@ -0,0 +1,85 @@
+package client;
+
+import java.io.UnsupportedEncodingException;
+import java.security.NoSuchAlgorithmException;
+import java.security.MessageDigest;
+
+import tools.HexTool;
+
+import java.util.Random;
+
+public class LoginCrypto {
+ protected static final int extralength = 6;
+ private static final String[] Alphabet = new String[]{"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
+ private static final String[] Number = new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9"};
+ private static final Random rand = new Random();
+
+ public static String Generate_13DigitAsiasoftPassport() {
+ final StringBuilder sb = new StringBuilder();
+ sb.append(LoginCrypto.Alphabet[LoginCrypto.rand.nextInt(LoginCrypto.Alphabet.length)]);
+ for (int i = 0; i < 11; ++i) {
+ sb.append(LoginCrypto.Number[LoginCrypto.rand.nextInt(LoginCrypto.Number.length)]);
+ }
+ sb.append(LoginCrypto.Alphabet[LoginCrypto.rand.nextInt(LoginCrypto.Alphabet.length)]);
+ return sb.toString();
+ }
+
+ private static String toSimpleHexString(final byte[] bytes) {
+ return HexTool.toString(bytes).replace((CharSequence) " ", (CharSequence) "").toLowerCase();
+ }
+
+ private static String hashWithDigest(final String in, final String digest) {
+ try {
+ final MessageDigest Digester = MessageDigest.getInstance(digest);
+ Digester.update(in.getBytes("UTF-8"), 0, in.length());
+ final byte[] sha1Hash = Digester.digest();
+ return toSimpleHexString(sha1Hash);
+ } catch (NoSuchAlgorithmException ex) {
+ throw new RuntimeException("Hashing the password failed", (Throwable) ex);
+ } catch (UnsupportedEncodingException e) {
+ throw new RuntimeException("Encoding the string failed", (Throwable) e);
+ }
+ }
+
+ public static String hexSha1(final String in) {
+ return hashWithDigest(in, "SHA-1");
+ }
+
+ private static String hexSha512(final String in) {
+ return hashWithDigest(in, "SHA-512");
+ }
+
+ public static boolean checkSha1Hash(final String hash, final String password) {
+ return hash.equals(makeSaltedSha1Hash(password));
+ }
+
+ public static boolean checkSaltedSha512Hash(final String hash, final String password, final String salt) {
+ return hash.equals(makeSaltedSha512Hash(password, salt));
+ }
+
+ public static String makeSaltedSha512Hash(final String password, final String salt) {
+ return hexSha512(password + salt);
+ }
+
+ public static String makeSaltedSha1Hash(final String password) {
+ return hexSha1(password);
+ }
+
+ public static String makeSalt() {
+ final byte[] salt = new byte[16];
+ LoginCrypto.rand.nextBytes(salt);
+ return toSimpleHexString(salt);
+ }
+
+ public static String rand_s(final String in) {
+ final StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < 6; ++i) {
+ sb.append(LoginCrypto.rand.nextBoolean() ? LoginCrypto.Alphabet[LoginCrypto.rand.nextInt(LoginCrypto.Alphabet.length)] : LoginCrypto.Number[LoginCrypto.rand.nextInt(LoginCrypto.Number.length)]);
+ }
+ return sb.toString() + in;
+ }
+
+ public static String rand_r(final String in) {
+ return in.substring(6, 134);
+ }
+}
diff --git a/src/client/LoginCryptoLegacy.java b/src/client/LoginCryptoLegacy.java
new file mode 100644
index 0000000..e03d818
--- /dev/null
+++ b/src/client/LoginCryptoLegacy.java
@@ -0,0 +1,124 @@
+package client;
+
+import java.io.UnsupportedEncodingException;
+import java.security.NoSuchAlgorithmException;
+import java.security.MessageDigest;
+import java.util.Random;
+
+public class LoginCryptoLegacy {
+ private static final Random rand;
+ private static final char[] iota64;
+
+ public static final String hashPassword(final String password) {
+ final byte[] randomBytes = new byte[6];
+ LoginCryptoLegacy.rand.setSeed(System.currentTimeMillis());
+ LoginCryptoLegacy.rand.nextBytes(randomBytes);
+ return myCrypt(password, genSalt(randomBytes));
+ }
+
+ public static final boolean checkPassword(final String password, final String hash) {
+ return myCrypt(password, hash).equals(hash);
+ }
+
+ public static final boolean isLegacyPassword(final String hash) {
+ return hash.substring(0, 3).equals("$H$");
+ }
+
+ private static String myCrypt(final String password, String seed) throws RuntimeException {
+ String out = null;
+ int count = 8;
+ if (!seed.substring(0, 3).equals("$H$")) {
+ final byte[] randomBytes = new byte[6];
+ LoginCryptoLegacy.rand.nextBytes(randomBytes);
+ seed = genSalt(randomBytes);
+ }
+ final String salt = seed.substring(4, 12);
+ if (salt.length() != 8) {
+ throw new RuntimeException("Error hashing password - Invalid seed.");
+ }
+ try {
+ final MessageDigest digester = MessageDigest.getInstance("SHA-1");
+ digester.update((salt + password).getBytes("iso-8859-1"), 0, (salt + password).length());
+ byte[] sha1Hash = digester.digest();
+ do {
+ final byte[] CombinedBytes = new byte[sha1Hash.length + password.length()];
+ System.arraycopy(sha1Hash, 0, CombinedBytes, 0, sha1Hash.length);
+ System.arraycopy(password.getBytes("iso-8859-1"), 0, CombinedBytes, sha1Hash.length, password.getBytes("iso-8859-1").length);
+ digester.update(CombinedBytes, 0, CombinedBytes.length);
+ sha1Hash = digester.digest();
+ } while (--count > 0);
+ out = seed.substring(0, 12);
+ out += encode64(sha1Hash);
+ } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex2) {
+ System.err.println("Error hashing password." + ex2);
+ }
+ if (out == null) {
+ throw new RuntimeException("Error hashing password - out = null");
+ }
+ return out;
+ }
+
+ private static String genSalt(final byte[] Random) {
+ final StringBuilder Salt = new StringBuilder("$H$");
+ Salt.append(LoginCryptoLegacy.iota64[30]);
+ Salt.append(encode64(Random));
+ return Salt.toString();
+ }
+
+ private static String convertToHex(final byte[] data) {
+ final StringBuilder buf = new StringBuilder();
+ for (int i = 0; i < data.length; ++i) {
+ int halfbyte = data[i] >>> 4 & 0xF;
+ int two_halfs = 0;
+ do {
+ if (0 <= halfbyte && halfbyte <= 9) {
+ buf.append((char) (48 + halfbyte));
+ } else {
+ buf.append((char) (97 + (halfbyte - 10)));
+ }
+ halfbyte = (data[i] & 0xF);
+ } while (two_halfs++ < 1);
+ }
+ return buf.toString();
+ }
+
+ public static final String encodeSHA1(final String text) throws NoSuchAlgorithmException, UnsupportedEncodingException {
+ final MessageDigest md = MessageDigest.getInstance("SHA-1");
+ md.update(text.getBytes("iso-8859-1"), 0, text.length());
+ return convertToHex(md.digest());
+ }
+
+ private static String encode64(final byte[] Input) {
+ final int iLen = Input.length;
+ final int oDataLen = (iLen * 4 + 2) / 3;
+ final int oLen = (iLen + 2) / 3 * 4;
+ final char[] out = new char[oLen];
+ int i0;
+ int i2;
+ int i3;
+ int o0;
+ int o2;
+ int o3;
+ int o4;
+ for (int ip = 0, op = 0; ip < iLen; i0 = (Input[ip++] & 0xFF), i2 = ((ip < iLen) ? (Input[ip++] & 0xFF) : 0), i3 = ((ip < iLen) ? (Input[ip++] & 0xFF) : 0), o0 = i0 >>> 2, o2 = ((i0 & 0x3) << 4 | i2 >>> 4), o3 = ((i2 & 0xF) << 2 | i3 >>> 6), o4 = (i3 & 0x3F), out[op++] = LoginCryptoLegacy.iota64[o0], out[op++] = LoginCryptoLegacy.iota64[o2], out[op] = ((op < oDataLen) ? LoginCryptoLegacy.iota64[o3] : '='), ++op, out[op] = ((op < oDataLen) ? LoginCryptoLegacy.iota64[o4] : '='), ++op) {
+ }
+ return new String(out);
+ }
+
+ static {
+ rand = new Random();
+ iota64 = new char[64];
+ int i = 0;
+ iota64[i++] = '.';
+ iota64[i++] = '/';
+ for (char c = 'A'; c <= 'Z'; ++c) {
+ iota64[i++] = c;
+ }
+ for (char c = 'a'; c <= 'z'; ++c) {
+ iota64[i++] = c;
+ }
+ for (char c = '0'; c <= '9'; ++c) {
+ iota64[i++] = c;
+ }
+ }
+}
diff --git a/src/client/MapleBeans.java b/src/client/MapleBeans.java
new file mode 100644
index 0000000..be99be7
--- /dev/null
+++ b/src/client/MapleBeans.java
@@ -0,0 +1,47 @@
+package client;
+
+public class MapleBeans {
+ private final int number;
+ private final int type;
+ private final int pos;
+
+ public MapleBeans(final int pos, final int type, final int number) {
+ this.pos = pos;
+ this.number = number;
+ this.type = type;
+ }
+
+ public int getType() {
+ return this.type;
+ }
+
+ public int getNumber() {
+ return this.number;
+ }
+
+ public int getPos() {
+ return this.pos;
+ }
+
+ public enum BeansType {
+ 开始打豆豆(0),
+ 暂停打豆豆(1),
+ 顏色求进洞(3),
+ 进洞旋转(4),
+ 奖励豆豆效果(5),
+ 未知效果(6),
+ 黄金狗(7),
+ 奖励豆豆效果B(8),
+ 领奖npc(9);
+
+ final byte type;
+
+ private BeansType(final int type) {
+ this.type = (byte) type;
+ }
+
+ public byte getType() {
+ return this.type;
+ }
+ }
+}
diff --git a/src/client/MapleBuffStat.java b/src/client/MapleBuffStat.java
new file mode 100644
index 0000000..22f3e5d
--- /dev/null
+++ b/src/client/MapleBuffStat.java
@@ -0,0 +1,150 @@
+package client;
+
+import java.io.Serializable;
+
+public enum MapleBuffStat implements Serializable {
+ WATK(0),
+ WDEF(1),
+ MATK(2),
+ MDEF(3),
+ ACC(4),
+ AVOID(5),
+ HANDS(6),
+ SPEED(7),
+ JUMP(8),
+ MAGIC_GUARD(9),
+ DARKSIGHT(10),
+ BOOSTER(11),
+ POWERGUARD(12),
+ MAXHP(13),
+ MAXMP(14),
+ INVINCIBLE(15),
+ SOULARROW(16),
+ STUN(17),
+ POISON(18),
+ SEAL(19),
+ DARKNESS(20),
+ COMBO(21),
+ SUMMON(21),
+ WK_CHARGE(22),
+ DRAGONBLOOD(23),
+ HOLY_SYMBOL(24),
+ MESOUP(25),
+ SHADOWPARTNER(26),
+ PICKPOCKET(27),
+ PUPPET(28),
+ MESOGUARD(29),
+ WEAKEN(30),
+ CURSE(31),
+ SLOW(32),
+ MORPH(33),
+ RECOVERY(34),
+ HP_LOSS_GUARD(34),
+ MAPLE_WARRIOR(35),
+ STANCE(36),
+ SHARP_EYES(37),
+ MANA_REFLECTION(38),
+ DRAGON_ROAR(39),
+ SPIRIT_CLAW(40),
+ INFINITY(41),
+ HOLY_SHIELD(42),
+ HAMSTRING(43),
+ BLIND(44),
+ CONCENTRATE(45),
+ ZOMBIFY(46),
+ ECHO_OF_HERO(47),
+ UNKNOWN3(48),
+ MESO_RATE(48),
+ GHOST_MORPH(49),
+ ARIANT_COSS_IMU(50),
+ DROP_RATE(52),
+ EXPRATE(54),
+ ACASH_RATE(55),
+ GM_HIDE(56),
+ UNKNOWN7(57),
+ ILLUSION(58),
+ BERSERK_FURY(57),
+ DIVINE_BODY(60),
+ SPARK(59),
+ ARIANT_COSS_IMU2(62),
+ FINALATTACK(61),
+ ELEMENT_RESET(63),
+ WIND_WALK(64),
+ ARAN_COMBO(66),
+ COMBO_DRAIN(67),
+ COMBO_BARRIER(68),
+ BODY_PRESSURE(69),
+ SMART_KNOCKBACK(70),
+ SOUL_STONE(73),
+ ENERGY_CHARGE(77),
+ DASH_SPEED(78),
+ DASH_JUMP(79),
+ MONSTER_RIDING(80),
+ SPEED_INFUSION(81),
+ HOMING_BEACON(82),
+ SOARING(82),
+ FREEZE(83),
+ LIGHTNING_CHARGE(84),
+ MIRROR_IMAGE(85),
+ OWL_SPIRIT(86),
+ 召唤玩家1(77),
+ 召唤玩家2(78),
+ 召唤玩家3(79),
+ 召唤玩家4(80),
+ 召唤玩家5(81),
+ 召唤玩家6(82),
+ 召唤玩家7(83),
+ 召唤玩家8(84);
+
+ private static final long serialVersionUID = 0L;
+ private final int buffstat;
+ private final int first;
+ private final long oldvalue;
+
+ private MapleBuffStat(final int buffstat) {
+ this.buffstat = 1 << buffstat % 32;
+ this.first = 3 - (int) Math.floor((double) (buffstat / 32));
+ this.oldvalue = new Long((long) this.buffstat).longValue() << 32 * (this.first % 2 + 1);
+ }
+
+ private MapleBuffStat(final int buffstat, final boolean stacked) {
+ this.buffstat = 1 << buffstat % 32;
+ this.first = (int) Math.floor((double) (buffstat / 32));
+ this.oldvalue = new Long((long) this.buffstat).longValue() << 32 * (this.first % 2 + 1);
+ }
+
+ public final long getOldValue() {
+ return this.oldvalue;
+ }
+
+ public final int getPosition() {
+ return this.first;
+ }
+
+ public final int getPosition(final boolean fromZero) {
+ if (!fromZero) {
+ return this.first;
+ }
+ switch (this.first) {
+ case 4: {
+ return 0;
+ }
+ case 3: {
+ return 1;
+ }
+ case 2: {
+ return 2;
+ }
+ case 1: {
+ return 3;
+ }
+ default: {
+ return 0;
+ }
+ }
+ }
+
+ public final int getValue() {
+ return this.buffstat;
+ }
+}
diff --git a/src/client/MapleBuffStatValueHolder.java b/src/client/MapleBuffStatValueHolder.java
new file mode 100644
index 0000000..2c09b93
--- /dev/null
+++ b/src/client/MapleBuffStatValueHolder.java
@@ -0,0 +1,25 @@
+package client;
+
+import java.util.concurrent.ScheduledFuture;
+
+import server.MapleStatEffect;
+
+public class MapleBuffStatValueHolder {
+ public MapleStatEffect effect;
+ public long startTime;
+ public int value;
+ public int localDuration;
+ public int cid;
+ public int skillid;
+ public ScheduledFuture> schedule;
+
+ public MapleBuffStatValueHolder(final MapleStatEffect effect, final long startTime, final ScheduledFuture> schedule, final int value, final int localDuration, final int cid, final int skillid) {
+ this.effect = effect;
+ this.startTime = startTime;
+ this.schedule = schedule;
+ this.value = value;
+ this.localDuration = localDuration;
+ this.cid = cid;
+ this.skillid = skillid;
+ }
+}
diff --git a/src/client/MapleCharacter.java b/src/client/MapleCharacter.java
new file mode 100644
index 0000000..2f4e0e2
--- /dev/null
+++ b/src/client/MapleCharacter.java
@@ -0,0 +1,11904 @@
+package client;
+
+import com.alibaba.fastjson.JSONObject;
+import server.shops.MaplePlayerShopItem;
+import client.inventory.Equip;
+import gui.jyhss.jyhwpss;
+import scripting.EventManager;
+import server.Timer.EventTimer;
+import server.maps.MapleMapEffect;
+import handling.world.World.Find;
+import constants.MapConstants;
+import handling.world.family.MapleFamily;
+import handling.world.family.MapleFamilyBuff;
+import handling.world.family.MapleFamilyBuff.MapleFamilyBuffEntry;
+import constants.ServerConstants.PlayerGMRank;
+import handling.cashshop.CashShopServer;
+import handling.login.LoginServer;
+import handling.world.PlayerBuffStorage;
+import handling.world.MapleMessengerCharacter;
+import io.netty.channel.Channel;
+import tools.MockIOSession;
+import client.inventory.MapleInventoryIdentifier;
+import server.maps.MapleFoothold;
+
+import java.util.Comparator;
+
+import client.inventory.MapleRing.RingComparator;
+import client.inventory.Item;
+import client.inventory.MapleRing;
+import tools.packet.MonsterCarnivalPacket;
+import tools.packet.PlayerShopPacket;
+import scripting.NPCScriptManager;
+import server.life.MobSkill;
+import handling.world.World.Guild;
+import handling.world.guild.MapleGuild;
+import client.inventory.IEquip;
+import server.maps.MapleMapObjectType;
+
+import java.sql.Statement;
+import java.sql.Timestamp;
+import java.util.Calendar;
+
+import MXDJR.RobotSocket;
+import handling.world.World.Broadcast;
+import tools.packet.MobPacket;
+import client.inventory.ItemFlag;
+import handling.world.PartyOperation;
+import client.inventory.ModifyInventory;
+import handling.world.World;
+import handling.world.World.Family;
+import gui.Start;
+import server.ServerProperties;
+import server.maps.FieldLimitType;
+import tools.packet.MTSCSPacket;
+import gui.进阶BOSS.Mushplotact;
+import handling.world.MaplePartyCharacter;
+
+import java.util.Collections;
+import java.util.Collection;
+
+import handling.world.PlayerBuffValueHolder;
+
+import java.util.Arrays;
+
+import tools.packet.PetPacket;
+
+import java.util.EnumMap;
+
+import tools.HexTool;
+
+import java.util.concurrent.RejectedExecutionException;
+
+import server.FishingRewardFactory.FishingReward;
+import tools.packet.UIPacket;
+import server.Randomizer;
+import server.FishingRewardFactory;
+import server.MapleInventoryManipulator;
+import server.Timer.EtcTimer;
+import server.Timer.MapTimer;
+import server.Timer.BuffTimer;
+import server.MapleStatEffect;
+import server.MapleItemInformationProvider;
+import tools.MaplePacketCreator;
+import tools.data.MaplePacketLittleEndianWriter;
+import server.life.PlayerNPC;
+import database.DatabaseException;
+import tools.FilePrinter;
+import client.inventory.IItem;
+import tools.Pair;
+import client.inventory.ItemLoader;
+
+import java.util.Iterator;
+
+import server.MaplePortal;
+import server.maps.MapleMapFactory;
+import constants.GameConstants;
+
+import java.util.Map.Entry;
+
+import handling.world.World.Party;
+import handling.world.World.Messenger;
+import handling.channel.ChannelServer;
+import handling.world.CharacterTransfer;
+
+import java.sql.ResultSet;
+import java.sql.PreparedStatement;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import tools.FileoutputUtil;
+import database.DBConPool;
+import server.maps.SavedLocationType;
+
+import java.util.LinkedList;
+import java.util.LinkedHashSet;
+
+import client.inventory.MapleInventoryType;
+
+import java.util.HashMap;
+
+import constants.WorldConstants;
+import constants.ServerConfig;
+
+import java.util.ArrayList;
+
+import tools.ConcurrentEnumMap;
+
+import java.util.LinkedHashMap;
+
+import server.maps.Event_PyramidSubway;
+
+import java.util.concurrent.ScheduledFuture;
+
+import client.inventory.MapleInventory;
+import scripting.EventInstanceManager;
+import handling.world.family.MapleFamilyCharacter;
+import handling.world.guild.MapleGuildCharacter;
+import handling.world.MapleParty;
+import server.shops.IMaplePlayerShop;
+import handling.world.MapleMessenger;
+import client.inventory.MapleMount;
+import server.MapleTrade;
+import server.MapleStorage;
+import server.MapleShop;
+import server.maps.MapleMap;
+import client.anticheat.CheatTracker;
+import server.MapleCarnivalParty;
+import server.MapleCarnivalChallenge;
+
+import java.util.Deque;
+
+import server.CashShop;
+import server.maps.MapleSummon;
+import server.quest.MapleQuest;
+
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import server.maps.MapleMapObject;
+import server.life.MapleMonster;
+
+import java.util.Set;
+import java.lang.ref.WeakReference;
+
+import client.inventory.MaplePet;
+import server.maps.MapleDoor;
+import server.movement.LifeMovementFragment;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.awt.Point;
+import java.io.Serializable;
+
+import server.maps.AbstractAnimatedMapleMapObject;
+
+public class MapleCharacter extends AbstractAnimatedMapleMapObject implements Serializable {
+ private static final long serialVersionUID = 845748950829L;
+ private String name;
+ private String name2;
+ private String chalktext;
+ private String BlessOfFairy_Origin;
+ private String charmessage;
+ private String prefix;
+ private String teleportname;
+ private String nowmacs;
+ private String loginkey;
+ private String serverkey;
+ private String clientkey;
+ private String accountsecondPassword;
+ private long lastCombo;
+ private long lastfametime;
+ private long keydown_skill;
+ private long lastRecoveryTime;
+ private long nextConsume;
+ private long pqStartTime;
+ private long lastHPTime;
+ private long lastMPTime;
+ private long lastMDTime;
+ private long lastStorageTime;
+ private long mapChangeTime;
+ private long mrqdTime;
+ private byte dojoRecord;
+ private byte gmLevel;
+ private byte gender;
+ private byte initialSpawnPoint;
+ private byte skinColor;
+ private byte guildrank;
+ private byte allianceRank;
+ private byte world;
+ private byte fairyExp;
+ private byte numClones;
+ private byte subcategory;
+ private byte fairyHour;
+ private short level;
+ private short mulung_energy;
+ private short availableCP;
+ private short totalCP;
+ private short fame;
+ private short hpmpApUsed;
+ private short job;
+ private short remainingAp;
+ private int accountid;
+ private int id;
+ private int meso;
+ private long exp;
+ private int hair;
+ private int face;
+ private int mapid;
+ private int bookCover;
+ private int dojo;
+ private int guildid;
+ private int fallcounter;
+ private int maplepoints;
+ private int chair;
+ private int itemEffect;
+ private int vpoints;
+ private int rank;
+ private int rankMove;
+ private int jobRank;
+ private int jobRankMove;
+ private int marriageId;
+ private int marriageItemId;
+ private int currentrep;
+ private int totalrep;
+ private int linkMid;
+ private int coconutteam;
+ private int followid;
+ private int battleshipHP;
+ private int expression;
+ private int constellation;
+ private int blood;
+ private int month;
+ private int day;
+ private int beans;
+ private int beansNum;
+ private int beansRange;
+ private int gachexp;
+ private int combo;
+ private int MSG;
+ private int 打怪;
+ private int 吸怪;
+ private int FLY_吸怪;
+ private int vip;
+ private int CsMod;
+ private int skillzq;
+ private Point old;
+ private boolean smega;
+ private boolean gashponmega;
+ private boolean hidden;
+ private boolean hasSummon;
+ private boolean 精灵商人购买开关;
+ private boolean 玩家私聊开关;
+ private boolean 玩家密语开关;
+ private boolean 好友聊天开关;
+ private boolean 队伍聊天开关;
+ private boolean 公会聊天开关;
+ private boolean 联盟聊天开关;
+ private boolean GM吸怪讯息开关;
+ private boolean canSetBeansNum;
+ private boolean Vip_Medal;
+ private boolean auto吸怪;
+ private boolean DebugMessage;
+ private boolean itemVacs;
+ private boolean mobVacs;
+ private boolean beansStart;
+ private int[] wishlist;
+ private int[] rocks;
+ private int[] savedLocations;
+ private int[] regrocks;
+ private int[] remainingSp;
+ private int[] savedHairs;
+ private int[] savedFaces;
+ private transient AtomicInteger inst;
+
+ private List lastmonthfameids;
+ private List doors;
+ private List pets;
+ private long limitBreak;
+ private int reinNumber;
+ private boolean petAutoFood;
+ private MapleClient c;
+ private transient WeakReference[] clones;
+ private transient Set controlled;
+ private transient Set visibleMapObjects;
+ private transient ReentrantReadWriteLock visibleMapObjectsLock;
+ private final Map quests;
+ private Map questinfo;
+ private final Map skills;
+ private final transient Map effects;
+ private final transient Map skillID;
+ private transient Map summons;
+ private final transient Map coolDowns;
+ private final transient Map diseases;
+ private CashShop cs;
+ private transient Deque pendingCarnivalRequests;
+ private transient MapleCarnivalParty carnivalParty;
+ private BuddyList buddylist;
+ private MonsterBook monsterbook;
+ private transient CheatTracker anticheat;
+ private transient MapleLieDetector antiMacro;
+ private MapleClient client;
+ private PlayerStats stats;
+ private transient PlayerRandomStream CRand;
+ private transient MapleMap map;
+ private transient MapleShop shop;
+ private transient RockPaperScissors rps;
+ private MapleStorage storage;
+ private transient MapleTrade trade;
+ private MapleMount mount;
+ private final List finishedAchievements;
+ private MapleMessenger messenger;
+ private byte[] petStore;
+ private transient IMaplePlayerShop playerShop;
+ private MapleParty party;
+ private boolean invincible;
+ private boolean canTalk;
+ private boolean clone;
+ private boolean followinitiator;
+ private boolean followon;
+ private MapleGuildCharacter mgc;
+ private MapleFamilyCharacter mfc;
+ private transient EventInstanceManager eventInstance;
+ private MapleInventory[] inventory;
+ private SkillMacro[] skillMacros;
+ private MapleKeyLayout keylayout;
+ private ItemVac ItemVac;
+ private MobVac MobVac;
+ public final int maxLevel;
+ private int 刷钱模式;
+ public final int maxLevel1;
+ private transient ScheduledFuture> beholderHealingSchedule;
+ private transient ScheduledFuture> beholderBuffSchedule;
+ private transient ScheduledFuture> BerserkSchedule;
+ private transient ScheduledFuture> dragonBloodSchedule;
+ private transient ScheduledFuture> fairySchedule;
+ private transient ScheduledFuture> mapTimeLimitTask;
+ private transient ScheduledFuture> fishing;
+ private transient Event_PyramidSubway pyramidSubway;
+ private transient List pendingExpiration;
+ private transient List pendingSkills;
+ private final transient Map movedMobs;
+ public long 整理背包冷却;
+ public long 集合背包冷却;
+ private boolean stopMoving;
+ private double 套装伤害加成;
+ private int clonedamgerate;
+ public int jyhbh;
+ private int 副本地图;
+ private boolean 吸怪状态;
+ private List lastres;
+
+ private MapleCharacter(final boolean ChannelServer) {
+ this.teleportname = "";
+ this.nowmacs = "";
+ this.吸怪状态 = false;
+ this.nextConsume = 0L;
+ this.pqStartTime = 0L;
+ this.guildrank = 5;
+ this.allianceRank = 5;
+ this.fairyExp = 30;
+ this.fairyHour = 1;
+ this.guildid = 0;
+ this.fallcounter = 0;
+ this.rank = 1;
+ this.rankMove = 0;
+ this.jobRank = 1;
+ this.jobRankMove = 0;
+ this.marriageItemId = 0;
+ this.linkMid = 0;
+ this.coconutteam = 0;
+ this.followid = 0;
+ this.battleshipHP = 0;
+ this.MSG = 0;
+ this.打怪 = 0;
+ this.吸怪 = 0;
+ this.FLY_吸怪 = 0;
+ this.CsMod = 0;
+ this.skillzq = 0;
+ this.old = new Point(0, 0);
+ this.smega = true;
+ this.gashponmega = true;
+ this.hasSummon = false;
+ this.精灵商人购买开关 = false;
+ this.玩家私聊开关 = false;
+ this.玩家密语开关 = false;
+ this.好友聊天开关 = false;
+ this.队伍聊天开关 = false;
+ this.公会聊天开关 = false;
+ this.联盟聊天开关 = false;
+ this.GM吸怪讯息开关 = false;
+ this.canSetBeansNum = false;
+ this.Vip_Medal = true;
+ this.auto吸怪 = false;
+ this.DebugMessage = false;
+ this.itemVacs = false;
+ this.mobVacs = false;
+ this.beansStart = false;
+ this.remainingSp = new int[10];
+ this.savedHairs = new int[6];
+ this.savedFaces = new int[6];
+ this.skills = (Map) new LinkedHashMap();
+ this.effects = new ConcurrentEnumMap(MapleBuffStat.class);
+ this.skillID = (Map) new LinkedHashMap();
+ this.coolDowns = (Map) new LinkedHashMap();
+ this.diseases = new ConcurrentEnumMap(MapleDisease.class);
+ this.finishedAchievements = (List) new ArrayList();
+ this.invincible = false;
+ this.canTalk = true;
+ this.clone = false;
+ this.followinitiator = false;
+ this.followon = false;
+ this.skillMacros = new SkillMacro[5];
+ this.maxLevel = ServerConfig.maxLevel;
+ this.刷钱模式 = 0;
+ this.maxLevel1 = WorldConstants.maxLevel;
+ this.pyramidSubway = null;
+ this.pendingExpiration = null;
+ this.pendingSkills = null;
+ this.movedMobs = (Map) new HashMap();
+ this.整理背包冷却 = 0L;
+ this.集合背包冷却 = 0L;
+ this.clonedamgerate = 0;
+ this.jyhbh = -1;
+ this.setStance(this.副本地图 = 0);
+ this.setPosition(new Point(0, 0));
+ this.inventory = new MapleInventory[MapleInventoryType.values().length];
+ for (final MapleInventoryType type : MapleInventoryType.values()) {
+ this.inventory[type.ordinal()] = new MapleInventory(type);
+ }
+ this.quests = new LinkedHashMap();
+ this.stats = new PlayerStats(this);
+ for (int i = 0; i < this.remainingSp.length; ++i) {
+ this.remainingSp[i] = 0;
+ }
+ for (int i = 0; i < this.savedHairs.length; ++i) {
+ this.savedHairs[i] = -1;
+ }
+ for (int i = 0; i < this.savedFaces.length; ++i) {
+ this.savedFaces[i] = -1;
+ }
+ if (ChannelServer) {
+ this.lastCombo = 0L;
+ this.mulung_energy = 0;
+ this.combo = 0;
+ this.keydown_skill = 0L;
+ this.lastHPTime = 0L;
+ this.lastMPTime = 0L;
+ this.mapChangeTime = 0L;
+ this.lastRecoveryTime = 0L;
+ this.petStore = new byte[3];
+ for (int i = 0; i < this.petStore.length; ++i) {
+ this.petStore[i] = -1;
+ }
+ this.wishlist = new int[10];
+ this.rocks = new int[10];
+ this.regrocks = new int[5];
+ this.clones = (WeakReference[]) new WeakReference[25];
+ for (int i = 0; i < this.clones.length; ++i) {
+ this.clones[i] = new WeakReference(null);
+ }
+ (this.inst = new AtomicInteger()).set(0);
+ this.keylayout = new MapleKeyLayout();
+ this.doors = new ArrayList();
+ this.controlled = new LinkedHashSet();
+ this.summons = new LinkedHashMap();
+ this.visibleMapObjects = new LinkedHashSet();
+ this.visibleMapObjectsLock = new ReentrantReadWriteLock();
+ this.pendingCarnivalRequests = new LinkedList();
+ this.savedLocations = new int[SavedLocationType.values().length];
+ for (int i = 0; i < SavedLocationType.values().length; ++i) {
+ this.savedLocations[i] = -1;
+ }
+ this.questinfo = new LinkedHashMap();
+ this.anticheat = new CheatTracker(this);
+ this.pets = new ArrayList();
+ }
+ }
+
+ public static MapleCharacter getDefault(final MapleClient client, final int type) {
+ final MapleCharacter ret = new MapleCharacter(false);
+ ret.client = client;
+ ret.map = null;
+ ret.exp = 0;
+ ret.gmLevel = 0;
+ ret.job = (short) ((type == 1) ? 0 : ((type == 0) ? 1000 : ((type == 3) ? 2001 : ((type == 4) ? 3000 : 2000))));
+ ret.beans = 0;
+ ret.meso = 0;
+ ret.level = 1;
+ ret.remainingAp = 0;
+ ret.fame = 0;
+ ret.accountid = client.getAccID();
+ ret.buddylist = new BuddyList((byte) 20);
+ ret.stats.str = 12;
+ ret.stats.dex = 5;
+ ret.stats.int_ = 4;
+ ret.stats.luk = 4;
+ ret.stats.maxhp = 50;
+ ret.stats.hp = 50;
+ ret.stats.maxmp = 50;
+ ret.stats.mp = 50;
+ ret.prefix = "";
+ ret.gachexp = 0;
+ ret.limitBreak = 199999L;
+ ret.reinNumber = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT name, 2ndpassword, mPoints, vpoints, VIP, loginkey, serverkey, clientkey FROM accounts WHERE id = ?");
+ ps.setInt(1, ret.accountid);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret.client.setAccountName(rs.getString("name"));
+ ret.accountsecondPassword = rs.getString("2ndpassword");
+ ret.maplepoints = rs.getInt("mPoints");
+ ret.vpoints = rs.getInt("vpoints");
+ ret.vip = rs.getInt("VIP");
+ ret.loginkey = rs.getString("loginkey");
+ ret.serverkey = rs.getString("serverkey");
+ ret.clientkey = rs.getString("clientkey");
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("Error getting character default" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ return ret;
+ }
+
+ public static final MapleCharacter ReconstructChr(final CharacterTransfer ct, final MapleClient client, final boolean isChannel) {
+ final MapleCharacter ret = new MapleCharacter(true);
+ ret.client = client;
+ if (!isChannel) {
+ ret.client.setChannel((int) ct.channel);
+ }
+ ret.nowmacs = ct.nowmacs;
+ ret.canTalk = ct.canTalk;
+ ret.DebugMessage = ct.DebugMessage;
+ ret.auto吸怪 = ct.auto吸怪;
+ ret.GM吸怪讯息开关 = ct.GM吸怪讯息开关;
+ ret.Vip_Medal = ct.Vip_Medal;
+ ret.精灵商人购买开关 = ct.精灵商人购买开关;
+ ret.玩家私聊开关 = ct.玩家私聊开关;
+ ret.玩家密语开关 = ct.玩家密语开关;
+ ret.好友聊天开关 = ct.好友聊天开关;
+ ret.队伍聊天开关 = ct.队伍聊天开关;
+ ret.公会聊天开关 = ct.公会聊天开关;
+ ret.联盟聊天开关 = ct.联盟聊天开关;
+ ret.smega = ct.smega;
+ ret.gashponmega = ct.gashponmega;
+ ret.id = ct.characterid;
+ ret.name = ct.name;
+ ret.level = ct.level;
+ ret.fame = ct.fame;
+ ret.CRand = new PlayerRandomStream();
+ ret.stats.str = ct.str;
+ ret.stats.dex = ct.dex;
+ ret.stats.int_ = ct.int_;
+ ret.stats.luk = ct.luk;
+ ret.stats.maxhp = ct.maxhp;
+ ret.stats.maxmp = ct.maxmp;
+ ret.stats.hp = ct.hp;
+ ret.stats.mp = ct.mp;
+ ret.chalktext = ct.chalkboard;
+ ret.exp = ((ret.level >= ret.maxLevel) ? 0 : ct.exp);
+ ret.hpmpApUsed = ct.hpApUsed;
+ ret.remainingSp = ct.remainingSp;
+ ret.remainingAp = ct.remainingAp;
+ ret.savedHairs = ct.savedHairs;
+ ret.savedFaces = ct.savedFaces;
+ ret.beans = ct.beans;
+ ret.meso = ct.meso;
+ ret.gmLevel = ct.gmLevel;
+ ret.skinColor = ct.skinColor;
+ ret.gender = ct.gender;
+ ret.job = ct.job;
+ ret.hair = ct.hair;
+ ret.face = ct.face;
+ ret.accountid = ct.accountid;
+ ret.mapid = ct.mapid;
+ ret.initialSpawnPoint = ct.initialSpawnPoint;
+ ret.limitBreak = ct.limitBreak;
+ ret.reinNumber = ct.reinNumber;
+ ret.world = ct.world;
+ ret.bookCover = ct.mBookCover;
+ ret.dojo = ct.dojo;
+ ret.dojoRecord = ct.dojoRecord;
+ ret.guildid = ct.guildid;
+ ret.guildrank = ct.guildrank;
+ ret.allianceRank = ct.alliancerank;
+ ret.CsMod = ct.CsMod;
+ ret.vpoints = ct.vpoints;
+ ret.vip = ct.vip;
+ ret.mrqdTime = ct.mrqdTime;
+ ret.fairyExp = ct.fairyExp;
+ ret.marriageId = ct.marriageId;
+ ret.currentrep = ct.currentrep;
+ ret.totalrep = ct.totalrep;
+ ret.charmessage = ct.charmessage;
+ ret.expression = ct.expression;
+ ret.constellation = ct.constellation;
+ ret.blood = ct.blood;
+ ret.month = ct.month;
+ ret.day = ct.day;
+ ret.gachexp = ct.gachexp;
+ ret.makeMFC(ct.familyid, ct.seniorid, ct.junior1, ct.junior2);
+ if (ret.guildid > 0) {
+ ret.mgc = new MapleGuildCharacter(ret);
+ }
+ ret.buddylist = new BuddyList(ct.buddysize);
+ ret.subcategory = ct.subcategory;
+ ret.prefix = ct.prefix;
+ if (isChannel) {
+ final MapleMapFactory mapFactory = ChannelServer.getInstance(client.getChannel()).getMapFactory();
+ ret.map = mapFactory.getMap(ret.mapid);
+ if (ret.map != null) {
+ if (ret.mapid == 801000110 || ret.mapid == 801000210) {
+ ret.map = mapFactory.getMap(801000000);
+ }
+ if (ret.mapid >= 211060000 && ret.mapid <= 211070200) {
+ ret.map = mapFactory.getMap(211060000);
+ }
+ }
+ if (ret.map == null) {
+ ret.map = mapFactory.getMap(100000000);
+ } else if (ret.map.getForcedReturnId() != 999999999) {
+ ret.map = ret.map.getForcedReturnMap();
+ }
+ MaplePortal portal = ret.map.getPortal((int) ret.initialSpawnPoint);
+ if (portal == null) {
+ portal = ret.map.getPortal(0);
+ ret.initialSpawnPoint = 0;
+ }
+ ret.setPosition(portal.getPosition());
+ final int messengerid = ct.messengerid;
+ if (messengerid > 0) {
+ ret.messenger = Messenger.getMessenger(messengerid);
+ }
+ } else {
+ ret.messenger = null;
+ }
+ final int partyid = ct.partyid;
+ if (partyid >= 0) {
+ final MapleParty party = Party.getParty(partyid);
+ if (party != null && party.getMemberById(ret.id) != null) {
+ ret.party = party;
+ }
+ }
+ for (final Entry qs : ct.Quest.entrySet()) {
+ final MapleQuest quest = MapleQuest.getInstance(((Integer) qs.getKey()).intValue());
+ final MapleQuestStatus queststatus_from = (MapleQuestStatus) qs.getValue();
+ final MapleQuestStatus queststatus = new MapleQuestStatus(quest, (int) queststatus_from.getStatus());
+ queststatus.setForfeited(queststatus_from.getForfeited());
+ queststatus.setCustomData(queststatus_from.getCustomData());
+ queststatus.setCompletionTime(queststatus_from.getCompletionTime());
+ if (queststatus_from.getMobKills() != null) {
+ for (final Entry mobkills : queststatus_from.getMobKills().entrySet()) {
+ queststatus.setMobKills(((Integer) mobkills.getKey()).intValue(), ((Integer) mobkills.getValue()).intValue());
+ }
+ }
+ ret.quests.put(quest, queststatus);
+ }
+ for (final Entry qs2 : ct.Skills.entrySet()) {
+ ret.skills.put(SkillFactory.getSkill(((Integer) qs2.getKey()).intValue()), qs2.getValue());
+ }
+ for (final Integer zz : ct.finishedAchievements) {
+ ret.finishedAchievements.add(zz);
+ }
+ ret.monsterbook = new MonsterBook(ct.mbook);
+ ret.inventory = (MapleInventory[]) (MapleInventory[]) ct.inventorys;
+ ret.BlessOfFairy_Origin = ct.BlessOfFairy;
+ ret.skillMacros = (SkillMacro[]) (SkillMacro[]) ct.skillmacro;
+ ret.petStore = ct.petStore;
+ ret.keylayout = new MapleKeyLayout(ct.keymap);
+ ret.questinfo = ct.InfoQuest;
+ ret.savedLocations = ct.savedlocation;
+ ret.wishlist = ct.wishlist;
+ ret.rocks = ct.rocks;
+ ret.regrocks = ct.regrocks;
+ ret.buddylist.loadFromTransfer(ct.buddies);
+ ret.keydown_skill = 0L;
+ ret.lastfametime = ct.lastfametime;
+ ret.lastmonthfameids = ct.famedcharacters;
+ ret.storage = (MapleStorage) ct.storage;
+ ret.cs = (CashShop) ct.cs;
+ client.setAccountName(ct.accountname);
+ ret.maplepoints = ct.MaplePoints;
+ ret.accountsecondPassword = ct.accountsecondPassword;
+ ret.loginkey = ct.loginkey;
+ ret.serverkey = ct.serverkey;
+ ret.clientkey = ct.clientkey;
+ ret.antiMacro = (MapleLieDetector) ct.antiMacro;
+ ret.numClones = ct.clonez;
+ ret.mount = new MapleMount(ret, ct.mount_itemid, GameConstants.isKOC((int) ret.job) ? 10001004 : (GameConstants.isAran((int) ret.job) ? 20001004 : 1004), ct.mount_Fatigue, ct.mount_level, ct.mount_exp);
+ ret.stats.recalcLocalStats(true);
+ return ret;
+ }
+
+ public static MapleCharacter loadCharFromDB(final int charid, final MapleClient client, final boolean channelserver) {
+ final MapleCharacter ret = new MapleCharacter(channelserver);
+ ret.client = client;
+ ret.id = charid;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ ps = con.prepareStatement("SELECT * FROM characters WHERE id = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ if (!rs.next()) {
+ throw new RuntimeException("Loading the Char Failed (char not found)");
+ }
+ ret.Vip_Medal = (rs.getShort("VipMedal") > 0);
+ ret.name = rs.getString("name");
+ ret.level = rs.getShort("level");
+ ret.fame = rs.getShort("fame");
+ ret.stats.str = rs.getShort("str");
+ ret.stats.dex = rs.getShort("dex");
+ ret.stats.int_ = rs.getShort("int");
+ ret.stats.luk = rs.getShort("luk");
+ ret.stats.maxhp = rs.getShort("maxhp");
+ ret.stats.maxmp = rs.getShort("maxmp");
+ ret.stats.hp = rs.getShort("hp");
+ ret.stats.mp = rs.getShort("mp");
+ ret.exp = ((ret.level >= ret.maxLevel) ? 0 : rs.getInt("exp"));
+ ret.hpmpApUsed = rs.getShort("hpApUsed");
+ final String[] sp = rs.getString("sp").split(",");
+ for (int i = 0; i < ret.remainingSp.length; ++i) {
+ ret.remainingSp[i] = Integer.parseInt(sp[i]);
+ }
+ final String[] saves_faces = rs.getString("saved_faces").split(",");
+ for (int j = 0; j < ret.savedFaces.length; ++j) {
+ ret.savedFaces[j] = Integer.parseInt(saves_faces[j]);
+ }
+ final String[] saves_hairs = rs.getString("saved_hairs").split(",");
+ for (int k = 0; k < ret.savedHairs.length; ++k) {
+ ret.savedHairs[k] = Integer.parseInt(saves_hairs[k]);
+ }
+ ret.remainingAp = rs.getShort("ap");
+ ret.beans = rs.getInt("beans");
+ ret.meso = rs.getInt("meso");
+ ret.gmLevel = rs.getByte("gm");
+ ret.skinColor = rs.getByte("skincolor");
+ ret.gender = rs.getByte("gender");
+ ret.job = rs.getShort("job");
+ ret.hair = rs.getInt("hair");
+ ret.face = rs.getInt("face");
+ ret.accountid = rs.getInt("accountid");
+ ret.mapid = rs.getInt("map");
+ ret.initialSpawnPoint = rs.getByte("spawnpoint");
+ ret.world = rs.getByte("world");
+ ret.guildid = rs.getInt("guildid");
+ ret.guildrank = rs.getByte("guildrank");
+ ret.allianceRank = rs.getByte("allianceRank");
+ ret.currentrep = rs.getInt("currentrep");
+ ret.totalrep = rs.getInt("totalrep");
+ ret.makeMFC(rs.getInt("familyid"), rs.getInt("seniorid"), rs.getInt("junior1"), rs.getInt("junior2"));
+ if (ret.guildid > 0) {
+ ret.mgc = new MapleGuildCharacter(ret);
+ }
+ ret.buddylist = new BuddyList(rs.getByte("buddyCapacity"));
+ ret.subcategory = rs.getByte("subcategory");
+ ret.mount = new MapleMount(ret, 0, (ret.job > 1000 && ret.job < 2000) ? 10001004 : ((ret.job >= 2000) ? ((ret.job == 2001 || (ret.job >= 2200 && ret.job <= 2218)) ? 20011004 : ((ret.job >= 3000) ? 30001004 : 20001004)) : 1004), (byte) 0, (byte) 1, 0);
+ ret.rank = rs.getInt("rank");
+ ret.rankMove = rs.getInt("rankMove");
+ ret.jobRank = rs.getInt("jobRank");
+ ret.jobRankMove = rs.getInt("jobRankMove");
+ ret.marriageId = rs.getInt("marriageId");
+ ret.charmessage = rs.getString("charmessage");
+ ret.expression = rs.getInt("expression");
+ ret.constellation = rs.getInt("constellation");
+ ret.blood = rs.getInt("blood");
+ ret.month = rs.getInt("month");
+ ret.day = rs.getInt("day");
+ ret.prefix = rs.getString("prefix");
+ ret.gachexp = rs.getInt("gachexp");
+ ret.limitBreak = rs.getLong("limitBreak");
+ ret.reinNumber = rs.getInt("reinNumber");
+ if (channelserver) {
+ final MapleMapFactory mapFactory = ChannelServer.getInstance(client.getChannel()).getMapFactory();
+ ret.antiMacro = new MapleLieDetector(ret.id);
+ ret.map = mapFactory.getMap(ret.mapid);
+ if (ret.mapid == 801000210) {
+ ret.map = mapFactory.getMap(801000000);
+ }
+ if (ret.mapid == 801000110) {
+ ret.map = mapFactory.getMap(801000000);
+ }
+ if (ret.map == null) {
+ ret.map = mapFactory.getMap(100000000);
+ }
+ MaplePortal portal = ret.map.getPortal((int) ret.initialSpawnPoint);
+ if (portal == null) {
+ portal = ret.map.getPortal(0);
+ ret.initialSpawnPoint = 0;
+ }
+ ret.setPosition(portal.getPosition());
+ final int partyid = rs.getInt("party");
+ if (partyid >= 0) {
+ final MapleParty party = Party.getParty(partyid);
+ if (party != null && party.getMemberById(ret.id) != null) {
+ ret.party = party;
+ }
+ }
+ ret.bookCover = rs.getInt("monsterbookcover");
+ ret.dojo = rs.getInt("dojo_pts");
+ ret.dojoRecord = rs.getByte("dojoRecord");
+ final String[] pets = rs.getString("pets").split(",");
+ for (int l = 0; l < ret.petStore.length; ++l) {
+ ret.petStore[l] = Byte.parseByte(pets[l]);
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT achievementid FROM achievements WHERE accountid = ?");
+ ps.setInt(1, ret.accountid);
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ ret.finishedAchievements.add(Integer.valueOf(rs.getInt("achievementid")));
+ }
+ }
+ rs.close();
+ ps.close();
+ boolean compensate_previousEvans = false;
+ ps = con.prepareStatement("SELECT * FROM queststatus WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ final PreparedStatement pse = con.prepareStatement("SELECT * FROM queststatusmobs WHERE queststatusid = ?");
+ while (rs.next()) {
+ final int id = rs.getInt("quest");
+ if (id == 170000) {
+ compensate_previousEvans = true;
+ }
+ final MapleQuest q = MapleQuest.getInstance(id);
+ final MapleQuestStatus status = new MapleQuestStatus(q, (int) rs.getByte("status"));
+ final long cTime = rs.getLong("time");
+ if (cTime > -1L) {
+ status.setCompletionTime(cTime * 1000L);
+ }
+ status.setForfeited(rs.getInt("forfeited"));
+ status.setCustomData(rs.getString("customData"));
+ ret.quests.put(q, status);
+ pse.setLong(1, rs.getLong("queststatusid"));
+ try (final ResultSet rsMobs = pse.executeQuery()) {
+ while (rsMobs.next()) {
+ status.setMobKills(rsMobs.getInt("mob"), rsMobs.getInt("count"));
+ }
+ rsMobs.close();
+ }
+ }
+ rs.close();
+ ps.close();
+ pse.close();
+ if (channelserver) {
+ ret.CRand = new PlayerRandomStream();
+ ret.monsterbook = MonsterBook.loadCards(charid);
+ ps = con.prepareStatement("SELECT * FROM inventoryslot where characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ if (!rs.next()) {
+ throw new RuntimeException("No Inventory slot column found in SQL. [inventoryslot]");
+ }
+ ret.getInventory(MapleInventoryType.EQUIP).setSlotLimit(rs.getByte("equip"));
+ ret.getInventory(MapleInventoryType.USE).setSlotLimit(rs.getByte("use"));
+ ret.getInventory(MapleInventoryType.SETUP).setSlotLimit(rs.getByte("setup"));
+ ret.getInventory(MapleInventoryType.ETC).setSlotLimit(rs.getByte("etc"));
+ ret.getInventory(MapleInventoryType.CASH).setSlotLimit(rs.getByte("cash"));
+ ps.close();
+ rs.close();
+ for (final Pair mit : ItemLoader.INVENTORY.loadItems(false, Integer.valueOf(charid)).values()) {
+ ret.getInventory((MapleInventoryType) mit.getRight()).addFromDB((IItem) mit.getLeft());
+ if (((IItem) mit.getLeft()).getPet() != null) {
+ ret.pets.add(((IItem) mit.getLeft()).getPet());
+ }
+ }
+ ps = con.prepareStatement("SELECT name, 2ndpassword, mPoints, vpoints, VIP, loginkey, serverkey, clientkey FROM accounts WHERE id = ?");
+ ps.setInt(1, ret.accountid);
+ rs = ps.executeQuery();
+ if (rs.next()) {
+ ret.getClient().setAccountName(rs.getString("name"));
+ ret.accountsecondPassword = rs.getString("2ndpassword");
+ ret.maplepoints = rs.getInt("mPoints");
+ ret.vpoints = rs.getInt("vpoints");
+ ret.vip = rs.getInt("VIP");
+ ret.loginkey = rs.getString("loginkey");
+ ret.serverkey = rs.getString("serverkey");
+ ret.clientkey = rs.getString("clientkey");
+ } else {
+ rs.close();
+ }
+ ps.close();
+ ps = con.prepareStatement("SELECT quest, customData FROM questinfo WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ ret.questinfo.put(Integer.valueOf(rs.getInt("quest")), rs.getString("customData"));
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT skillid, skilllevel, masterlevel, expiration FROM skills WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ final ISkill skil = SkillFactory.getSkill(rs.getInt("skillid"));
+ if (skil != null && GameConstants.isApplicableSkill(rs.getInt("skillid")) && rs.getByte("skilllevel") >= 0) {
+ ret.skills.put(skil, new SkillEntry(rs.getByte("skilllevel"), rs.getByte("masterlevel"), rs.getLong("expiration")));
+ } else {
+ if (skil != null) {
+ continue;
+ }
+ final int[] remainingSp = ret.remainingSp;
+ final int skillBookForSkill = GameConstants.getSkillBookForSkill(rs.getInt("skillid"));
+ remainingSp[skillBookForSkill] += rs.getByte("skilllevel");
+ }
+ }
+ rs.close();
+ ps.close();
+ ret.expirationTask(false);
+ ps = con.prepareStatement("SELECT id, name, level FROM characters WHERE accountid = ? ORDER BY level DESC");
+ ps.setInt(1, ret.accountid);
+ rs = ps.executeQuery();
+ byte maxlevel_ = 0;
+ while (rs.next()) {
+ if (rs.getInt("id") != charid) {
+ byte maxlevel = (byte) (rs.getShort("level") / 10);
+ if (maxlevel > 20) {
+ maxlevel = 20;
+ }
+ if (maxlevel <= maxlevel_) {
+ continue;
+ }
+ maxlevel_ = maxlevel;
+ ret.BlessOfFairy_Origin = rs.getString("name");
+ } else {
+ if (charid >= 17000 || compensate_previousEvans || ret.job < 2200 || ret.job > 2218) {
+ continue;
+ }
+ for (int m = 0; m <= GameConstants.getSkillBook((int) ret.job); ++m) {
+ final int[] remainingSp2 = ret.remainingSp;
+ final int n = m;
+ remainingSp2[n] += 2;
+ }
+ ret.setQuestAdd(MapleQuest.getInstance(170000), (byte) 0, null);
+ }
+ }
+ ret.skills.put(SkillFactory.getSkill(GameConstants.getBofForJob((int) ret.job)), new SkillEntry(maxlevel_, (byte) 0, -1L));
+ ps.close();
+ rs.close();
+ ps = con.prepareStatement("SELECT * FROM skillmacros WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ final int position = rs.getInt("position");
+ final SkillMacro macro = new SkillMacro(rs.getInt("skill1"), rs.getInt("skill2"), rs.getInt("skill3"), rs.getString("name"), rs.getInt("shout"), position);
+ ret.skillMacros[position] = macro;
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT `key`,`type`,`action` FROM keymap WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ final Map> keyb = ret.keylayout.Layout();
+ while (rs.next()) {
+ keyb.put(Integer.valueOf(rs.getInt("key")), new Pair(Byte.valueOf(rs.getByte("type")), Integer.valueOf(rs.getInt("action"))));
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT `locationtype`,`map` FROM savedlocations WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ ret.savedLocations[rs.getInt("locationtype")] = rs.getInt("map");
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT `characterid_to`,`when` FROM famelog WHERE characterid = ? AND DATEDIFF(NOW(),`when`) < 30");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ ret.lastfametime = 0L;
+ ret.lastmonthfameids = (List) new ArrayList(31);
+ while (rs.next()) {
+ ret.lastfametime = Math.max(ret.lastfametime, rs.getTimestamp("when").getTime());
+ ret.lastmonthfameids.add(Integer.valueOf(rs.getInt("characterid_to")));
+ }
+ rs.close();
+ ps.close();
+ ret.buddylist.loadFromDb(charid);
+ ret.storage = MapleStorage.loadStorage(ret.accountid);
+ ret.cs = new CashShop(ret.accountid, charid, (int) ret.getJob());
+ ps = con.prepareStatement("SELECT sn FROM wishlist WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ int i2 = 0;
+ while (rs.next()) {
+ ret.wishlist[i2] = rs.getInt("sn");
+ ++i2;
+ }
+ while (i2 < 10) {
+ ret.wishlist[i2] = 0;
+ ++i2;
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT mapid FROM trocklocations WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ int r = 0;
+ while (rs.next()) {
+ ret.rocks[r] = rs.getInt("mapid");
+ ++r;
+ }
+ while (r < 10) {
+ ret.rocks[r] = 999999999;
+ ++r;
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT mapid FROM regrocklocations WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ r = 0;
+ while (rs.next()) {
+ ret.regrocks[r] = rs.getInt("mapid");
+ ++r;
+ }
+ while (r < 5) {
+ ret.regrocks[r] = 999999999;
+ ++r;
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT * FROM mountdata WHERE characterid = ?");
+ ps.setInt(1, charid);
+ rs = ps.executeQuery();
+ if (!rs.next()) {
+ throw new RuntimeException("No mount data found on SQL column");
+ }
+ final IItem mount = ret.getInventory(MapleInventoryType.EQUIPPED).getItem((short) (-18));
+ ret.mount = new MapleMount(ret, (mount != null) ? mount.getItemId() : 0, (ret.job > 1000 && ret.job < 2000) ? 10001004 : ((ret.job >= 2000) ? ((ret.job == 2001 || ret.job >= 2200) ? 20011004 : ((ret.job >= 3000) ? 30001004 : 20001004)) : 1004), rs.getByte("Fatigue"), rs.getByte("Level"), rs.getInt("Exp"));
+ ps.close();
+ rs.close();
+ ret.stats.recalcLocalStats(true);
+ } else {
+ for (final Pair mit : ItemLoader.INVENTORY.loadItems(true, Integer.valueOf(charid)).values()) {
+ ret.getInventory((MapleInventoryType) mit.getRight()).addFromDB((IItem) mit.getLeft());
+ }
+ }
+ } catch (SQLException ess) {
+ ess.printStackTrace();
+ FileoutputUtil.outError("logs/读取MapleCharacter.txt", (Throwable) ess);
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ess, "载入角色失败..");
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+ if (rs != null) {
+ rs.close();
+ }
+ } catch (SQLException ignore) {
+ ignore.printStackTrace();
+ FileoutputUtil.outError("logs/读取MapleCharacter.txt", (Throwable) ignore);
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ignore, "载入角色失败..");
+ }
+ } finally {
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+ if (rs != null) {
+ rs.close();
+ }
+ } catch (SQLException ignore2) {
+ ignore2.printStackTrace();
+ FileoutputUtil.outError("logs/读取MapleCharacter.txt", (Throwable) ignore2);
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ignore2, "载入角色失败..");
+ }
+ }
+ } catch (SQLException exxx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) exxx);
+ }
+ return ret;
+ }
+
+ public static void saveNewCharToDB(final MapleCharacter chr, final int type, final boolean db) {
+ Connection con = null;
+ PreparedStatement ps = null;
+ PreparedStatement pse = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ con.setTransactionIsolation(1);
+ con.setAutoCommit(false);
+ ps = con.prepareStatement("INSERT INTO characters (level, fame, str, dex, luk, `int`, exp, hp, mp, maxhp, maxmp, sp, ap, gm, skincolor, gender, job, hair, face, map, meso, hpApUsed, spawnpoint, party, buddyCapacity, monsterbookcover, dojo_pts, dojoRecord, pets, subcategory, marriageId, currentrep, totalrep, prefix, accountid, name, world, VipMedal,limitBreak,reinNumber) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", 1);
+ ps.setInt(1, 1);
+ ps.setShort(2, (short) 0);
+ final PlayerStats stat = chr.stats;
+ ps.setShort(3, stat.getStr());
+ ps.setShort(4, stat.getDex());
+ ps.setShort(5, stat.getInt());
+ ps.setShort(6, stat.getLuk());
+ ps.setInt(7, 0);
+ ps.setShort(8, stat.getHp());
+ ps.setShort(9, stat.getMp());
+ ps.setShort(10, stat.getMaxHp());
+ ps.setShort(11, stat.getMaxMp());
+ ps.setString(12, "0,0,0,0,0,0,0,0,0,0");
+ ps.setShort(13, (short) 0);
+ ps.setByte(14, (byte) 0);
+ ps.setByte(15, chr.skinColor);
+ ps.setByte(16, chr.gender);
+ ps.setShort(17, chr.job);
+ ps.setInt(18, chr.hair);
+ ps.setInt(19, chr.face);
+ ps.setInt(20, (type == 1) ? 0 : ((type == 0) ? 130030000 : ((type == 3) ? 900090000 : 914000000)));
+ ps.setInt(21, chr.meso);
+ ps.setShort(22, (short) 0);
+ ps.setByte(23, (byte) 0);
+ ps.setInt(24, -1);
+ ps.setByte(25, chr.buddylist.getCapacity());
+ ps.setInt(26, 0);
+ ps.setInt(27, 0);
+ ps.setInt(28, 0);
+ ps.setString(29, "-1,-1,-1");
+ ps.setInt(30, 0);
+ ps.setInt(31, 0);
+ ps.setInt(32, 0);
+ ps.setInt(33, 0);
+ ps.setString(34, chr.prefix);
+ ps.setInt(35, chr.getAccountID());
+ ps.setString(36, chr.name);
+ ps.setByte(37, chr.world);
+ ps.setInt(38, (int) (chr.Vip_Medal ? 1 : 0));
+ ps.setLong(39, chr.limitBreak);
+ ps.setInt(40, chr.reinNumber);
+ ps.executeUpdate();
+ rs = ps.getGeneratedKeys();
+ if (!rs.next()) {
+ throw new DatabaseException("Inserting char failed.");
+ }
+ chr.id = rs.getInt(1);
+ ps.close();
+ rs.close();
+ ps = con.prepareStatement("INSERT INTO queststatus (`queststatusid`, `characterid`, `quest`, `status`, `time`, `forfeited`, `customData`) VALUES (DEFAULT, ?, ?, ?, ?, ?, ?)", 1);
+ pse = con.prepareStatement("INSERT INTO queststatusmobs VALUES (DEFAULT, ?, ?, ?)");
+ ps.setInt(1, chr.id);
+ for (final MapleQuestStatus q : chr.quests.values()) {
+ ps.setInt(2, q.getQuest().getId());
+ ps.setInt(3, (int) q.getStatus());
+ ps.setInt(4, (int) (q.getCompletionTime() / 1000L));
+ ps.setInt(5, q.getForfeited());
+ ps.setString(6, q.getCustomData());
+ ps.executeUpdate();
+ rs = ps.getGeneratedKeys();
+ rs.next();
+ if (q.hasMobKills()) {
+ final Iterator iterator2 = q.getMobKills().keySet().iterator();
+ while (iterator2.hasNext()) {
+ final int mob = ((Integer) iterator2.next()).intValue();
+ pse.setLong(1, rs.getLong(1));
+ pse.setInt(2, mob);
+ pse.setInt(3, q.getMobKills(mob));
+ pse.executeUpdate();
+ }
+ }
+ rs.close();
+ }
+ ps.close();
+ pse.close();
+ ps = con.prepareStatement("INSERT INTO inventoryslot (characterid, `equip`, `use`, `setup`, `etc`, `cash`) VALUES (?, ?, ?, ?, ?, ?)");
+ ps.setInt(1, chr.id);
+ ps.setByte(2, (byte) 32);
+ ps.setByte(3, (byte) 32);
+ ps.setByte(4, (byte) 32);
+ ps.setByte(5, (byte) 32);
+ ps.setByte(6, (byte) 60);
+ ps.execute();
+ ps.close();
+ ps = con.prepareStatement("INSERT INTO mountdata (characterid, `Level`, `Exp`, `Fatigue`) VALUES (?, ?, ?, ?)");
+ ps.setInt(1, chr.id);
+ ps.setByte(2, (byte) 1);
+ ps.setInt(3, 0);
+ ps.setByte(4, (byte) 0);
+ ps.execute();
+ ps.close();
+ final List> listing = (List>) new ArrayList();
+ for (final MapleInventory iv : chr.inventory) {
+ for (final IItem item : iv.list()) {
+ listing.add(new Pair(item, iv.getType()));
+ }
+ }
+ ItemLoader.INVENTORY.saveItems(listing, con, Integer.valueOf(chr.id));
+ final int[] array1 = {2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 23, 25, 26, 27, 29, 31, 34, 35, 37, 38, 40, 41, 43, 44, 45, 46, 48, 50, 56, 57, 59, 60, 61, 62, 63, 64, 65};
+ final int[] array2 = {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 5, 5, 6, 6, 6, 6, 6, 6, 6};
+ final int[] array3 = {10, 12, 13, 18, 24, 21, 8, 5, 0, 4, 1, 19, 14, 15, 52, 2, 17, 11, 3, 20, 16, 23, 9, 50, 51, 6, 22, 7, 53, 54, 100, 101, 102, 103, 104, 105, 106};
+ ps = con.prepareStatement("INSERT INTO keymap (characterid, `key`, `type`, `action`) VALUES (?, ?, ?, ?)");
+ ps.setInt(1, chr.id);
+ for (int i = 0; i < array1.length; ++i) {
+ ps.setInt(2, array1[i]);
+ ps.setInt(3, array2[i]);
+ ps.setInt(4, array3[i]);
+ ps.execute();
+ }
+ ps.close();
+ con.commit();
+ } catch (SQLException ex2) {
+ } catch (DatabaseException e) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e, "[角色存档] 储存角色资料失败");
+ FileoutputUtil.outError("logs/MapleCharacter1.txt", (Throwable) e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ try {
+ con.rollback();
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "[角色存档] 储存失败,继续使用暂存档不储存资料库");
+ FileoutputUtil.outError("logs/MapleCharacter2.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ try {
+ if (pse != null) {
+ pse.close();
+ }
+ if (ps != null) {
+ ps.close();
+ }
+ if (rs != null) {
+ rs.close();
+ }
+ con.setAutoCommit(true);
+ con.setTransactionIsolation(4);
+ if (con != null) {
+ con.close();
+ }
+ } catch (SQLException e2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e2, "[角色存档] 错误自动返回储存功能");
+ FileoutputUtil.outError("logs/MapleCharacter3.txt", (Throwable) e2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e2);
+ }
+ } finally {
+ try {
+ if (pse != null) {
+ pse.close();
+ }
+ if (ps != null) {
+ ps.close();
+ }
+ if (rs != null) {
+ rs.close();
+ }
+ con.setAutoCommit(true);
+ con.setTransactionIsolation(4);
+ if (con != null) {
+ con.close();
+ }
+ } catch (SQLException e3) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e3, "[角色存档] 错误自动返回储存功能");
+ FileoutputUtil.outError("logs/MapleCharacter3.txt", (Throwable) e3);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e3);
+ }
+ }
+ }
+
+ public int saveToDB(final boolean dc, final boolean fromcs) {
+ if (this.isClone()) {
+ return -1;
+ }
+ int retValue = 1;
+ Connection con = null;
+ PreparedStatement ps = null;
+ PreparedStatement pse = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ con.setTransactionIsolation(1);
+ con.setAutoCommit(false);
+ ps = con.prepareStatement("UPDATE characters SET level = ?, fame = ?, str = ?, dex = ?, luk = ?, `int` = ?, exp = ?, hp = ?, mp = ?, maxhp = ?, maxmp = ?, sp = ?, ap = ?, gm = ?, skincolor = ?, gender = ?, job = ?, hair = ?, face = ?, map = ?, meso = ?, hpApUsed = ?, spawnpoint = ?, party = ?, buddyCapacity = ?, monsterbookcover = ?, dojo_pts = ?, dojoRecord = ?, pets = ?, subcategory = ?, marriageId = ?, currentrep = ?, totalrep = ?, charmessage = ?, expression = ?, constellation = ?, blood = ?, month = ?, day = ?, beans = ?, prefix = ?, gachexp = ?, name = ?, VipMedal = ?, saved_faces = ?, saved_hairs = ?, limitBreak = ? , reinNumber = ? WHERE id = ?");
+ ps.setInt(1, (int) this.level);
+ ps.setShort(2, this.fame);
+ ps.setShort(3, this.stats.getStr());
+ ps.setShort(4, this.stats.getDex());
+ ps.setShort(5, this.stats.getLuk());
+ ps.setShort(6, this.stats.getInt());
+ ps.setLong(7, (this.level >= this.maxLevel) ? 0L : ((long) this.exp));
+ ps.setShort(8, (short) ((this.stats.getHp() < 1) ? 50 : this.stats.getHp()));
+ ps.setShort(9, this.stats.getMp());
+ ps.setShort(10, this.stats.getMaxHp());
+ ps.setShort(11, this.stats.getMaxMp());
+ final StringBuilder sps = new StringBuilder();
+ for (int i = 0; i < this.remainingSp.length; ++i) {
+ sps.append(this.remainingSp[i]);
+ sps.append(",");
+ }
+ final String sp = sps.toString();
+ ps.setString(12, sp.substring(0, sp.length() - 1));
+ ps.setShort(13, this.remainingAp);
+ ps.setByte(14, this.gmLevel);
+ ps.setByte(15, this.skinColor);
+ ps.setByte(16, this.gender);
+ ps.setShort(17, this.job);
+ ps.setInt(18, this.hair);
+ ps.setInt(19, this.face);
+ if (!fromcs && this.map != null) {
+ if (this.map.getForcedReturnId() != 999999999) {
+ if (this.map.getId() == 220080001) {
+ ps.setInt(20, 910000000);
+ } else {
+ ps.setInt(20, this.map.getForcedReturnId());
+ }
+ } else {
+ ps.setInt(20, (this.stats.getHp() < 1) ? this.map.getReturnMapId() : this.map.getId());
+ }
+ } else {
+ ps.setInt(20, this.mapid);
+ }
+ ps.setInt(21, this.meso);
+ ps.setShort(22, this.hpmpApUsed);
+ if (this.map == null) {
+ ps.setByte(23, (byte) 0);
+ } else {
+ final MaplePortal closest = this.map.findClosestSpawnpoint(this.getPosition());
+ ps.setByte(23, (byte) ((closest != null) ? closest.getId() : 0));
+ }
+ ps.setInt(24, (this.party != null) ? this.party.getId() : -1);
+ ps.setShort(25, (short) this.buddylist.getCapacity());
+ ps.setInt(26, this.bookCover);
+ ps.setInt(27, this.dojo);
+ ps.setInt(28, (int) this.dojoRecord);
+ final StringBuilder petz = new StringBuilder();
+ int petLength = 0;
+ for (final MaplePet pet : this.pets) {
+ pet.saveToDb();
+ if (pet.getSummoned()) {
+ petz.append((int) pet.getInventoryPosition());
+ petz.append(",");
+ ++petLength;
+ }
+ }
+ while (petLength < 3) {
+ petz.append("-1,");
+ ++petLength;
+ }
+ final String petstring = petz.toString();
+ ps.setString(29, petstring.substring(0, petstring.length() - 1));
+ ps.setByte(30, this.subcategory);
+ ps.setInt(31, this.marriageId);
+ ps.setInt(32, this.currentrep);
+ ps.setInt(33, this.totalrep);
+ ps.setString(34, this.charmessage);
+ ps.setInt(35, this.expression);
+ ps.setInt(36, this.constellation);
+ ps.setInt(37, this.blood);
+ ps.setInt(38, this.month);
+ ps.setInt(39, this.day);
+ ps.setInt(40, this.beans);
+ ps.setString(41, this.prefix);
+ ps.setInt(42, this.gachexp);
+ ps.setString(43, this.name);
+ ps.setInt(44, (int) (this.Vip_Medal ? 1 : 0));
+ final StringBuilder faces = new StringBuilder();
+ for (int j = 0; j < this.savedFaces.length; ++j) {
+ faces.append(this.savedFaces[j]);
+ faces.append(",");
+ }
+ final String saved_faces = faces.toString();
+ ps.setString(45, saved_faces.substring(0, saved_faces.length() - 1));
+ final StringBuilder hairs = new StringBuilder();
+ for (int k = 0; k < this.savedHairs.length; ++k) {
+ hairs.append(this.savedHairs[k]);
+ hairs.append(",");
+ }
+ final String saved_hairs = hairs.toString();
+ ps.setString(46, saved_hairs.substring(0, saved_hairs.length() - 1));
+ ps.setLong(47, this.limitBreak);
+ ps.setInt(48, this.reinNumber);
+ ps.setInt(49, this.id);
+ if (ps.executeUpdate() < 1) {
+ ps.close();
+ throw new DatabaseException("Character not in database (" + this.id + ")");
+ }
+ ps.close();
+ this.deleteWhereCharacterId(con, "DELETE FROM skillmacros WHERE characterid = ?");
+ for (int l = 0; l < 5; ++l) {
+ final SkillMacro macro = this.skillMacros[l];
+ ps = con.prepareStatement("INSERT INTO skillmacros (characterid, skill1, skill2, skill3, name, shout, position) VALUES (?, ?, ?, ?, ?, ?, ?)");
+ if (macro != null) {
+ ps.setInt(1, this.id);
+ ps.setInt(2, macro.getSkill1());
+ ps.setInt(3, macro.getSkill2());
+ ps.setInt(4, macro.getSkill3());
+ ps.setString(5, macro.getName());
+ ps.setInt(6, macro.getShout());
+ ps.setInt(7, l);
+ ps.execute();
+ ps.close();
+ }
+ }
+ this.deleteWhereCharacterId(con, "DELETE FROM inventoryslot WHERE characterid = ?");
+ ps = con.prepareStatement("INSERT INTO inventoryslot (characterid, `equip`, `use`, `setup`, `etc`, `cash`) VALUES (?, ?, ?, ?, ?, ?)");
+ ps.setInt(1, this.id);
+ ps.setByte(2, this.getInventory(MapleInventoryType.EQUIP).getSlotLimit());
+ ps.setByte(3, this.getInventory(MapleInventoryType.USE).getSlotLimit());
+ ps.setByte(4, this.getInventory(MapleInventoryType.SETUP).getSlotLimit());
+ ps.setByte(5, this.getInventory(MapleInventoryType.ETC).getSlotLimit());
+ ps.setByte(6, this.getInventory(MapleInventoryType.CASH).getSlotLimit());
+ ps.execute();
+ ps.close();
+ final List> listing = (List>) new ArrayList();
+ for (final MapleInventory iv : this.inventory) {
+ for (final IItem item : iv.list()) {
+ listing.add(new Pair(item, iv.getType()));
+ }
+ }
+ ItemLoader.INVENTORY.saveItems(listing, con, Integer.valueOf(this.id));
+ this.deleteWhereCharacterId(con, "DELETE FROM questinfo WHERE characterid = ?");
+ ps = con.prepareStatement("INSERT INTO questinfo (`characterid`, `quest`, `customData`) VALUES (?, ?, ?)");
+ ps.setInt(1, this.id);
+ for (final Entry q : this.questinfo.entrySet()) {
+ ps.setInt(2, ((Integer) q.getKey()).intValue());
+ ps.setString(3, (String) q.getValue());
+ ps.execute();
+ }
+ ps.close();
+ this.deleteWhereCharacterId(con, "DELETE FROM queststatus WHERE characterid = ?");
+ ps = con.prepareStatement("INSERT INTO queststatus (`queststatusid`, `characterid`, `quest`, `status`, `time`, `forfeited`, `customData`) VALUES (DEFAULT, ?, ?, ?, ?, ?, ?)", 1);
+ pse = con.prepareStatement("INSERT INTO queststatusmobs VALUES (DEFAULT, ?, ?, ?)", 1);
+ ps.setInt(1, this.id);
+ for (final MapleQuestStatus q2 : this.quests.values()) {
+ ps.setInt(2, q2.getQuest().getId());
+ ps.setInt(3, (int) q2.getStatus());
+ ps.setInt(4, (int) (q2.getCompletionTime() / 1000L));
+ ps.setInt(5, q2.getForfeited());
+ ps.setString(6, q2.getCustomData());
+ ps.executeUpdate();
+ rs = ps.getGeneratedKeys();
+ rs.next();
+ if (q2.hasMobKills()) {
+ final Iterator iterator5 = q2.getMobKills().keySet().iterator();
+ while (iterator5.hasNext()) {
+ final int mob = ((Integer) iterator5.next()).intValue();
+ pse.setLong(1, rs.getLong(1));
+ pse.setInt(2, mob);
+ pse.setInt(3, q2.getMobKills(mob));
+ pse.executeUpdate();
+ }
+ }
+ rs.close();
+ }
+ ps.close();
+ pse.close();
+ this.deleteWhereCharacterId(con, "DELETE FROM skills WHERE characterid = ?");
+ ps = con.prepareStatement("INSERT INTO skills (characterid, skillid, skilllevel, masterlevel, expiration) VALUES (?, ?, ?, ?, ?)");
+ ps.setInt(1, this.id);
+ for (final Entry skill : this.skills.entrySet()) {
+ if (GameConstants.isApplicableSkill(((ISkill) skill.getKey()).getId())) {
+ ps.setInt(2, ((ISkill) skill.getKey()).getId());
+ ps.setByte(3, ((SkillEntry) skill.getValue()).skillevel);
+ ps.setByte(4, ((SkillEntry) skill.getValue()).masterlevel);
+ ps.setLong(5, ((SkillEntry) skill.getValue()).expiration);
+ ps.execute();
+ }
+ }
+ ps.close();
+ final List cd = this.getCooldowns();
+ if (dc && cd.size() > 0) {
+ ps = con.prepareStatement("INSERT INTO skills_cooldowns (charid, SkillID, StartTime, length) VALUES (?, ?, ?, ?)");
+ ps.setInt(1, this.getId());
+ for (final MapleCoolDownValueHolder cooling : cd) {
+ ps.setInt(2, cooling.skillId);
+ ps.setLong(3, cooling.startTime);
+ ps.setLong(4, cooling.length);
+ ps.execute();
+ }
+ ps.close();
+ }
+ this.deleteWhereCharacterId(con, "DELETE FROM savedlocations WHERE characterid = ?");
+ ps = con.prepareStatement("INSERT INTO savedlocations (characterid, `locationtype`, `map`) VALUES (?, ?, ?)");
+ ps.setInt(1, this.id);
+ for (final SavedLocationType savedLocationType : SavedLocationType.values()) {
+ if (this.savedLocations[savedLocationType.getValue()] != -1) {
+ ps.setInt(2, savedLocationType.getValue());
+ ps.setInt(3, this.savedLocations[savedLocationType.getValue()]);
+ ps.execute();
+ }
+ }
+ ps.close();
+ ps = con.prepareStatement("DELETE FROM achievements WHERE accountid = ?");
+ ps.setInt(1, this.accountid);
+ ps.executeUpdate();
+ ps.close();
+ ps = con.prepareStatement("INSERT INTO achievements(charid, achievementid, accountid) VALUES(?, ?, ?)");
+ for (final Integer achid : this.finishedAchievements) {
+ ps.setInt(1, this.id);
+ ps.setInt(2, achid.intValue());
+ ps.setInt(3, this.accountid);
+ ps.executeUpdate();
+ }
+ ps.close();
+ this.deleteWhereCharacterId(con, "DELETE FROM buddies WHERE characterid = ?");
+ ps = con.prepareStatement("INSERT INTO buddies (characterid, `buddyid`, `pending`) VALUES (?, ?, ?)");
+ ps.setInt(1, this.id);
+ for (final BuddyEntry entry : this.buddylist.getBuddies()) {
+ if (entry != null) {
+ ps.setInt(2, entry.getCharacterId());
+ ps.setInt(3, (int) (entry.isVisible() ? 0 : 1));
+ ps.execute();
+ }
+ }
+ ps.close();
+ ps = con.prepareStatement("UPDATE accounts SET `mPoints` = ?, `vpoints` = ?, `VIP` = ? WHERE id = ?");
+ ps.setInt(1, this.maplepoints);
+ ps.setInt(2, this.vpoints);
+ ps.setInt(3, this.vip);
+ ps.setInt(4, this.client.getAccID());
+ ps.execute();
+ ps.close();
+ if (this.storage != null) {
+ this.storage.saveToDB(con);
+ }
+ if (this.cs != null) {
+ this.cs.save(con);
+ }
+ PlayerNPC.updateByCharId(this, con);
+ this.keylayout.saveKeys(this.id, con);
+ this.mount.saveMount(this.id, con);
+ this.monsterbook.saveCards(this.id, con);
+ this.deleteWhereCharacterId(con, "DELETE FROM wishlist WHERE characterid = ?");
+ for (int m = 0; m < this.getWishlistSize(); ++m) {
+ ps = con.prepareStatement("INSERT INTO wishlist(characterid, sn) VALUES(?, ?) ");
+ ps.setInt(1, this.getId());
+ ps.setInt(2, this.wishlist[m]);
+ ps.execute();
+ ps.close();
+ }
+ this.deleteWhereCharacterId(con, "DELETE FROM trocklocations WHERE characterid = ?");
+ for (int m = 0; m < this.rocks.length; ++m) {
+ if (this.rocks[m] != 999999999) {
+ ps = con.prepareStatement("INSERT INTO trocklocations(characterid, mapid) VALUES(?, ?) ");
+ ps.setInt(1, this.getId());
+ ps.setInt(2, this.rocks[m]);
+ ps.execute();
+ ps.close();
+ }
+ }
+ this.deleteWhereCharacterId(con, "DELETE FROM regrocklocations WHERE characterid = ?");
+ for (int m = 0; m < this.regrocks.length; ++m) {
+ if (this.regrocks[m] != 999999999) {
+ ps = con.prepareStatement("INSERT INTO regrocklocations(characterid, mapid) VALUES(?, ?) ");
+ ps.setInt(1, this.getId());
+ ps.setInt(2, this.regrocks[m]);
+ ps.execute();
+ ps.close();
+ }
+ }
+ con.commit();
+ } catch (UnsupportedOperationException ex2) {
+ } catch (SQLException ex3) {
+ } catch (DatabaseException e) {
+ retValue = 0;
+ e.printStackTrace();
+ System.out.println("保存数据出错" + e);
+ FileoutputUtil.logToFile("logs/保存角色数据出错.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getClient().getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.getClient().getAccountName() + " 账号ID " + this.getClient().getAccID() + " 角色名 " + this.getName() + " 角色ID " + this.getId());
+ FilePrinter.printError("MapleCharacter4.txt", (Throwable) e, "[角色存档]储存角色失败");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ FileoutputUtil.outError("logs/保存角色数据出错.txt", (Throwable) e);
+ try {
+ con.rollback();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ System.out.println("回滚数据出错" + ex);
+ FileoutputUtil.logToFile("logs/保存角色数据出错.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getClient().getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.getClient().getAccountName() + " 账号ID " + this.getClient().getAccID() + " 角色名 " + this.getName() + " 角色ID " + this.getId());
+ FileoutputUtil.outError("logs/保存角色数据出错5.txt", (Throwable) ex);
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e, "[角色存档] 储存失败,继续使用暂存档不储存资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+ if (pse != null) {
+ pse.close();
+ }
+ if (rs != null) {
+ rs.close();
+ }
+ con.setAutoCommit(true);
+ con.setTransactionIsolation(4);
+ if (con != null) {
+ con.close();
+ }
+ } catch (SQLException es) {
+ retValue = 0;
+ es.printStackTrace();
+ System.out.println("关闭数据出错" + es);
+ es.printStackTrace();
+ FileoutputUtil.logToFile("logs/保存角色数据出错.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getClient().getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.getClient().getAccountName() + " 账号ID " + this.getClient().getAccID() + " 角色名 " + this.getName() + " 角色ID " + this.getId());
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) es, "[角色存档] 错误自动返回储存功能");
+ FileoutputUtil.outError("logs/保存角色数据出错6.txt", (Throwable) es);
+ FileoutputUtil.outError("logs/保存角色数据出错.txt", (Throwable) es);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) es);
+ }
+ } finally {
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+ if (pse != null) {
+ pse.close();
+ }
+ if (rs != null) {
+ rs.close();
+ }
+ con.setAutoCommit(true);
+ con.setTransactionIsolation(4);
+ if (con != null) {
+ con.close();
+ }
+ } catch (SQLException es2) {
+ retValue = 0;
+ es2.printStackTrace();
+ System.out.println("关闭数据出错" + es2);
+ es2.printStackTrace();
+ FileoutputUtil.logToFile("logs/保存角色数据出错.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getClient().getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.getClient().getAccountName() + " 账号ID " + this.getClient().getAccID() + " 角色名 " + this.getName() + " 角色ID " + this.getId());
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) es2, "[角色存档] 错误自动返回储存功能");
+ FileoutputUtil.outError("logs/保存角色数据出错6.txt", (Throwable) es2);
+ FileoutputUtil.outError("logs/保存角色数据出错.txt", (Throwable) es2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) es2);
+ }
+ }
+ return retValue;
+ }
+
+ private void deleteWhereCharacterId(final Connection con, final String sql) throws SQLException {
+ deleteWhereCharacterId(con, sql, this.id);
+ }
+
+ public static void deleteWhereCharacterId(final Connection con, final String sql, final int id) {
+ try {
+ final PreparedStatement ps = con.prepareStatement(sql);
+ ps.setInt(1, id);
+ ps.executeUpdate();
+ ps.close();
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/保存角色数据出错7.txt", (Throwable) ex);
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "[deleteWhereCharacterId]");
+ }
+ }
+
+ public void saveInventory(final Connection con) {
+ final List> listing = (List>) new ArrayList();
+ for (final MapleInventory iv : this.inventory) {
+ for (final IItem item : iv.list()) {
+ listing.add(new Pair(item, iv.getType()));
+ }
+ }
+ if (con != null) {
+ try {
+ ItemLoader.INVENTORY.saveItems(listing, con, Integer.valueOf(this.id));
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "[saveInventory]");
+ FileoutputUtil.outError("logs/保存角色数据出错8.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ } else {
+ try {
+ ItemLoader.INVENTORY.saveItems(listing, Integer.valueOf(this.id));
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "[saveInventory]");
+ FileoutputUtil.outError("logs/保存角色数据出错9.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ }
+
+ public final PlayerStats getStat() {
+ return this.stats;
+ }
+
+ public final PlayerRandomStream CRand() {
+ return this.CRand;
+ }
+
+ public final void QuestInfoPacket(final MaplePacketLittleEndianWriter mplew) {
+ mplew.writeShort(this.questinfo.size());
+ for (final Entry q : this.questinfo.entrySet()) {
+ mplew.writeShort(((Integer) q.getKey()).intValue());
+ mplew.writeMapleAsciiString((q.getValue() == null) ? "" : ((String) q.getValue()));
+ }
+ }
+
+ public final void updateInfoQuest(final int questid, final String data) {
+ this.questinfo.put(Integer.valueOf(questid), data);
+ this.client.sendPacket(MaplePacketCreator.updateInfoQuest(questid, data));
+ }
+
+ public final String getInfoQuest(final int questid) {
+ if (this.questinfo.containsKey(Integer.valueOf(questid))) {
+ return (String) this.questinfo.get(Integer.valueOf(questid));
+ }
+ return "";
+ }
+
+ public final int getNumQuest() {
+ int i = 0;
+ for (final MapleQuestStatus q : this.quests.values()) {
+ if (q.getStatus() == 2 && !q.isCustom()) {
+ ++i;
+ }
+ }
+ return i;
+ }
+
+ public final byte getQuestStatus(final int quest) {
+ return this.getQuest(MapleQuest.getInstance(quest)).getStatus();
+ }
+
+ public final MapleQuestStatus getQuest(final MapleQuest quest) {
+ if (!this.quests.containsKey(quest)) {
+ return new MapleQuestStatus(quest, 0);
+ }
+ return (MapleQuestStatus) this.quests.get(quest);
+ }
+
+ public final void setQuestAdd(final MapleQuest quest, final byte status, final String customData) {
+ if (!this.quests.containsKey(quest)) {
+ final MapleQuestStatus stat = new MapleQuestStatus(quest, (int) status);
+ stat.setCustomData(customData);
+ this.quests.put(quest, stat);
+ }
+ }
+
+ public final MapleQuestStatus getQuestNAdd(final MapleQuest quest) {
+ if (!this.quests.containsKey(quest)) {
+ final MapleQuestStatus status = new MapleQuestStatus(quest, 0);
+ this.quests.put(quest, status);
+ return status;
+ }
+ return (MapleQuestStatus) this.quests.get(quest);
+ }
+
+ public final MapleQuestStatus getQuestNoAdd(final MapleQuest quest) {
+ return (MapleQuestStatus) this.quests.get(quest);
+ }
+
+ public final MapleQuestStatus getQuestRemove(final MapleQuest quest) {
+ return (MapleQuestStatus) this.quests.remove(quest);
+ }
+
+ public final void updateQuest(final MapleQuestStatus quest) {
+ this.updateQuest(quest, false);
+ }
+
+ public final void updateQuest(final MapleQuestStatus quest, final boolean update) {
+ this.quests.put(quest.getQuest(), quest);
+ if (!quest.isCustom()) {
+ this.client.sendPacket(MaplePacketCreator.updateQuest(quest));
+ if (quest.getStatus() == 1 && !update) {
+ this.client.sendPacket(MaplePacketCreator.updateQuestInfo(this, quest.getQuest().getId(), quest.getNpc(), (byte) 8));
+ }
+ }
+ }
+
+ public final Map getInfoQuest_Map() {
+ return this.questinfo;
+ }
+
+ public final Map getQuest_Map() {
+ return this.quests;
+ }
+
+ public boolean isActiveBuffedValue(final int skillid) {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (mbsvh.effect.isSkill() && mbsvh.effect.getSourceId() == skillid) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean isBuffedValue(final int skillid) {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (mbsvh.effect.getSourceId() == skillid) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Integer getBuffedValue(final MapleBuffStat effect) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(effect);
+ return (mbsvh == null) ? null : Integer.valueOf(mbsvh.value);
+ }
+
+ public boolean hasBuffedValue(final MapleBuffStat effect) {
+ return this.getBuffedValue(effect) != null;
+ }
+
+ public final Integer getBuffedSkill_X(final MapleBuffStat effect) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(effect);
+ if (mbsvh == null) {
+ return null;
+ }
+ return Integer.valueOf(mbsvh.effect.getX());
+ }
+
+ public final Integer getBuffedSkill_Y(final MapleBuffStat effect) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(effect);
+ if (mbsvh == null) {
+ return null;
+ }
+ return Integer.valueOf(mbsvh.effect.getY());
+ }
+
+ public boolean isBuffFrom(final MapleBuffStat stat, final ISkill skill) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(stat);
+ return mbsvh != null && mbsvh.effect.isSkill() && mbsvh.effect.getSourceId() == skill.getId();
+ }
+
+ public boolean changeFace(final short item, final int color) {
+ int newFace = this.face / 1000 * 1000 + color + this.face % 10;
+ if (!MapleItemInformationProvider.getInstance().faceExists(newFace)) {
+ newFace = this.face;
+ this.gainItem((int) item, 1);
+ } else {
+ this.face = newFace;
+ this.updateSingleStat(MapleStat.FACE, newFace);
+ this.equipChanged();
+ }
+ return MapleItemInformationProvider.faceLists.containsKey(Integer.valueOf(color));
+ }
+
+ public int getBuffSource(final MapleBuffStat stat) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(stat);
+ return (mbsvh == null) ? -1 : mbsvh.effect.getSourceId();
+ }
+
+ public int getItemQuantity(final int itemid, final boolean checkEquipped) {
+ int possesed = this.inventory[GameConstants.getInventoryType(itemid).ordinal()].countById(itemid);
+ if (checkEquipped) {
+ possesed += this.inventory[MapleInventoryType.EQUIPPED.ordinal()].countById(itemid);
+ }
+ return possesed;
+ }
+
+ public void setBuffedValue(final MapleBuffStat effect, final int value) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(effect);
+ if (mbsvh == null) {
+ return;
+ }
+ mbsvh.value = value;
+ }
+
+ public Long getBuffedStarttime(final MapleBuffStat effect) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(effect);
+ return (mbsvh == null) ? null : Long.valueOf(mbsvh.startTime);
+ }
+
+ public MapleStatEffect getStatForBuff(final MapleBuffStat effect) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(effect);
+ return (mbsvh == null) ? null : mbsvh.effect;
+ }
+
+ public void doRecovery() {
+ final MapleStatEffect bloodEffect = this.getStatForBuff(MapleBuffStat.RECOVERY);
+ if (bloodEffect != null) {
+ this.prepareRecovery();
+ if (this.stats.getHp() >= this.stats.getCurrentMaxHp()) {
+ this.cancelEffectFromBuffStat(MapleBuffStat.RECOVERY);
+ } else {
+ this.healHP(bloodEffect.getX(), true);
+ }
+ }
+ }
+
+ public final boolean canRecover(final long now) {
+ return this.lastRecoveryTime > 0L && this.lastRecoveryTime + 5000L < now;
+ }
+
+ private void prepareRecovery() {
+ this.lastRecoveryTime = System.currentTimeMillis();
+ }
+
+ private void prepareDragonBlood(final MapleStatEffect bloodEffect) {
+ if (this.dragonBloodSchedule != null) {
+ this.dragonBloodSchedule.cancel(false);
+ }
+ this.dragonBloodSchedule = BuffTimer.getInstance().register((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ if (MapleCharacter.this.stats.getHp() - bloodEffect.getX() > 1) {
+ MapleCharacter.this.cancelBuffStats(MapleBuffStat.DRAGONBLOOD);
+ } else {
+ MapleCharacter.this.addHP(-bloodEffect.getX());
+ MapleCharacter.this.client.sendPacket(MaplePacketCreator.showOwnBuffEffect(bloodEffect.getSourceId(), 5));
+ MapleCharacter.this.map.broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBuffeffect(MapleCharacter.this.getId(), bloodEffect.getSourceId(), 5), false);
+ }
+ }
+ }, 4000L, 4000L);
+ }
+
+ public void startMapTimeLimitTask(int time, final MapleMap to) {
+ this.client.sendPacket(MaplePacketCreator.getClock(time));
+ time *= 1000;
+ this.mapTimeLimitTask = MapTimer.getInstance().register((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ MapleCharacter.this.changeMap(to, to.getPortal(0));
+ }
+ }, (long) time, (long) time);
+ }
+
+ public void startFishingTask(final boolean VIP) {
+ try {
+ final int time = GameConstants.getFishingTime(VIP, this.isGM());
+ this.cancelFishingTask();
+ this.fishing = EtcTimer.getInstance().register((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ final boolean expMulti = MapleCharacter.this.haveItem(2300001, 1, false, true);
+ if (!expMulti && !MapleCharacter.this.haveItem(2300000, 1, false, true)) {
+ MapleCharacter.this.cancelFishingTask();
+ return;
+ }
+ MapleInventoryManipulator.removeById(MapleCharacter.this.client, MapleInventoryType.USE, expMulti ? 2300001 : 2300000, 1, false, false);
+ final int rewardType = FishingRewardFactory.getInstance().getNextRewardType();
+ switch (rewardType) {
+ case 0: {
+ final int money = Randomizer.rand(expMulti ? 15 : 10, expMulti ? 3000 : 1000);
+ MapleCharacter.this.gainMeso(money, true);
+ MapleCharacter.this.client.sendPacket(UIPacket.fishingUpdate((byte) 1, money));
+ break;
+ }
+ case 1: {
+ final int experi = Randomizer.nextInt(Math.abs(GameConstants.getExpNeededForLevel((int) MapleCharacter.this.level) / 800) + 1);
+ MapleCharacter.this.gainExp(expMulti ? (experi * 3 / 2) : experi, true, false, true);
+ MapleCharacter.this.client.sendPacket(UIPacket.fishingUpdate((byte) 2, experi));
+ break;
+ }
+ default: {
+ final int gl = Randomizer.nextInt(2);
+ if (gl == 1) {
+ final FishingReward item = FishingRewardFactory.getInstance().getNextRewardItemId();
+ if (item != null) {
+ if (!MapleInventoryManipulator.checkSpace(MapleCharacter.this.client, item.getItemId(), 1, MapleCharacter.this.getName())) {
+ MapleCharacter.this.client.sendPacket(MaplePacketCreator.serverNotice(5, "你的背包已满"));
+ MapleCharacter.this.cancelFishingTask();
+ return;
+ }
+ MapleInventoryManipulator.addById(MapleCharacter.this.client, item.getItemId(), (short) 1, GameConstants.isChair(item.getItemId()) ? MapleCharacter.this.getName() : null, null, (long) item.getExpiration());
+ MapleCharacter.this.client.sendPacket(UIPacket.fishingUpdate((byte) 0, item.getItemId()));
+ }
+ break;
+ }
+ final int moneya = Randomizer.rand(expMulti ? 15 : 10, expMulti ? 3000 : 1000);
+ MapleCharacter.this.gainMeso(moneya, true);
+ MapleCharacter.this.client.sendPacket(UIPacket.fishingUpdate((byte) 1, moneya));
+ break;
+ }
+ }
+ MapleCharacter.this.map.broadcastMessage(UIPacket.fishingCaught(MapleCharacter.this.id));
+ }
+ }, (long) time, (long) time);
+ } catch (RejectedExecutionException ex) {
+ }
+ }
+
+ public void cancelMapTimeLimitTask() {
+ if (this.mapTimeLimitTask != null) {
+ this.mapTimeLimitTask.cancel(false);
+ }
+ }
+
+ public void cancelFishingTask() {
+ if (this.fishing != null && !this.fishing.isCancelled()) {
+ this.fishing.cancel(false);
+ }
+ }
+
+ public void registerEffect(final MapleStatEffect effect, final long starttime, final ScheduledFuture> schedule, final int from) {
+ this.registerEffect(effect, starttime, schedule, effect.getStatups(), false, effect.getDuration(), from);
+ }
+
+ public void registerEffect(final MapleStatEffect effect, final long starttime, final ScheduledFuture> schedule, final List> statups, final boolean silent, final int localDuration, final int cid) {
+ if (effect.isHide() && this.isGM()) {
+ this.hidden = true;
+ this.map.broadcastNONGMMessage(this, MaplePacketCreator.removePlayerFromMap(this.getId()), false);
+ } else if (effect.isDragonBlood()) {
+ this.prepareDragonBlood(effect);
+ } else if (effect.isBerserk()) {
+ this.checkBerserk();
+ } else if (effect.isMonsterRiding_()) {
+ this.getMount().startSchedule();
+ } else if (effect.isBeholder()) {
+ this.prepareBeholderEffect();
+ } else if (effect.isRecovery()) {
+ this.prepareRecovery();
+ } else if (GameConstants.isAran((int) this.getJob())) {
+ final int reduce = this.Aran_ReduceCombo(effect.getSourceId());
+ if (reduce > 0) {
+ this.setCombo(this.getCombo() - reduce);
+ }
+ }
+ int clonez = 0;
+ for (final Pair statup : statups) {
+ if (statup.getLeft() == MapleBuffStat.ILLUSION) {
+ clonez = ((Integer) statup.getRight()).intValue();
+ }
+ final int value = ((Integer) statup.getRight()).intValue();
+ if (statup.getLeft() == MapleBuffStat.MONSTER_RIDING && effect.getSourceId() == 5221006 && this.battleshipHP <= 0) {
+ this.battleshipHP = value;
+ }
+ final MapleBuffStatValueHolder mbsvh = new MapleBuffStatValueHolder(effect, starttime, schedule, value, localDuration, cid, effect.getSourceId());
+ this.effects.put(statup.getLeft(), mbsvh);
+ this.skillID.put(Integer.valueOf(effect.getSourceId()), mbsvh);
+ }
+ if (clonez > 0) {
+ final int cloneSize = Math.max((int) this.getNumClones(), this.getCloneSize());
+ if (clonez > cloneSize) {
+ for (int i = 0; i < clonez - cloneSize; ++i) {
+ this.cloneLook();
+ }
+ }
+ }
+ this.stats.recalcLocalStats();
+ if (this.getDebugMessage()) {
+ for (final Pair buf : statups) {
+ this.dropMessage(6, "[系统提示]\u0010" + ((MapleBuffStat) buf.getLeft()).toString() + "(0x" + HexTool.toString(((MapleBuffStat) buf.getLeft()).getValue()) + ")");
+ }
+ }
+ }
+
+ public List getBuffStats(final MapleStatEffect effect, final long startTime) {
+ final List bstats = (List) new ArrayList();
+ final Map allBuffs = new EnumMap(this.effects);
+ for (final Entry stateffect : allBuffs.entrySet()) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) stateffect.getValue();
+ if (mbsvh.effect.sameSource(effect) && (startTime == -1L || startTime == mbsvh.startTime)) {
+ bstats.add(stateffect.getKey());
+ }
+ }
+ return bstats;
+ }
+
+ public List getBuffStatsFromStatEffect(final MapleStatEffect effect, final long startTime) {
+ final List bstats = (List) new ArrayList();
+ final Map allBuffs = new EnumMap(this.effects);
+ for (final Entry stateffect : allBuffs.entrySet()) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) stateffect.getValue();
+ if (mbsvh.effect.sameSource(effect) && (startTime == -1L || startTime == mbsvh.startTime)) {
+ bstats.add(stateffect.getKey());
+ this.skillID.put(Integer.valueOf(effect.getSourceId()), mbsvh);
+ }
+ }
+ return bstats;
+ }
+
+ private boolean deregisterBuffStats(final List stats) {
+ boolean clonez = false;
+ final List effectsToCancel = (List) new ArrayList(stats.size());
+ for (final MapleBuffStat stat : stats) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.remove(stat);
+ if (mbsvh != null) {
+ this.skillID.remove(Integer.valueOf(mbsvh.effect.getSourceId()));
+ boolean addMbsvh = true;
+ for (final MapleBuffStatValueHolder contained : effectsToCancel) {
+ if (mbsvh.startTime == contained.startTime && contained.effect == mbsvh.effect) {
+ addMbsvh = false;
+ }
+ }
+ if (addMbsvh) {
+ effectsToCancel.add(mbsvh);
+ }
+ if (stat == MapleBuffStat.SUMMON || stat == MapleBuffStat.PUPPET) {
+ final int summonId = mbsvh.effect.getSourceId();
+ final MapleSummon summon = (MapleSummon) this.summons.get(Integer.valueOf(summonId));
+ if (summon == null) {
+ continue;
+ }
+ this.map.broadcastMessage(MaplePacketCreator.removeSummon(summon, true));
+ this.map.removeMapObject((MapleMapObject) summon);
+ this.removeVisibleMapObject((MapleMapObject) summon);
+ this.summons.remove(Integer.valueOf(summonId));
+ if (summon.getSkill() != 1321007) {
+ continue;
+ }
+ if (this.beholderHealingSchedule != null) {
+ this.beholderHealingSchedule.cancel(false);
+ this.beholderHealingSchedule = null;
+ }
+ if (this.beholderBuffSchedule == null) {
+ continue;
+ }
+ this.beholderBuffSchedule.cancel(false);
+ this.beholderBuffSchedule = null;
+ } else if (stat == MapleBuffStat.DRAGONBLOOD) {
+ if (this.dragonBloodSchedule == null) {
+ continue;
+ }
+ this.dragonBloodSchedule.cancel(false);
+ this.dragonBloodSchedule = null;
+ } else if (stat == MapleBuffStat.RECOVERY) {
+ this.lastRecoveryTime = 0L;
+ } else {
+ if (stat != MapleBuffStat.ILLUSION) {
+ continue;
+ }
+ this.disposeClones();
+ clonez = true;
+ }
+ }
+ }
+ for (final MapleBuffStatValueHolder cancelEffectCancelTasks : effectsToCancel) {
+ if (this.getBuffStatsFromStatEffect(cancelEffectCancelTasks.effect, cancelEffectCancelTasks.startTime).isEmpty() && cancelEffectCancelTasks.schedule != null) {
+ cancelEffectCancelTasks.schedule.cancel(false);
+ }
+ }
+ return clonez;
+ }
+
+ public void cancelEffect(final MapleStatEffect effect, final boolean overwrite, final long startTime) {
+ if (this != null && effect != null) {
+ this.cancelEffect(effect, overwrite, startTime, effect.getStatups());
+ }
+ }
+
+ public void cancelEffect(final MapleStatEffect effect, final boolean overwrite, final long startTime, final List> statups) {
+ List buffstats;
+ if (!overwrite) {
+ buffstats = this.getBuffStats(effect, startTime);
+ } else {
+ buffstats = (List) new ArrayList(statups.size());
+ for (final Pair statup : statups) {
+ buffstats.add(statup.getLeft());
+ }
+ }
+ if (buffstats.size() <= 0) {
+ return;
+ }
+ final boolean clonez = this.deregisterBuffStats(buffstats);
+ if (effect.isMagicDoor()) {
+ if (!this.getDoors().isEmpty()) {
+ this.removeDoor();
+ this.silentPartyUpdate();
+ }
+ } else if (effect.isMonsterRiding_()) {
+ this.getMount().cancelSchedule();
+ } else if (effect.isAranCombo()) {
+ this.combo = 0;
+ }
+ if (!overwrite) {
+ this.cancelPlayerBuffs(buffstats);
+ if (this.isGM() && effect.isHide() && this.client.getChannelServer().getPlayerStorage().getCharacterById(this.getId()) != null) {
+ this.hidden = false;
+ this.map.broadcastMessage(this, MaplePacketCreator.spawnPlayerMapobject(this), false);
+ for (final MaplePet pet : this.pets) {
+ if (pet.getSummoned()) {
+ this.map.broadcastMessage(this, PetPacket.showPet(this, pet, false, false), false);
+ }
+ }
+ for (final WeakReference chr : this.clones) {
+ if (chr.get() != null) {
+ this.map.broadcastMessage((MapleCharacter) chr.get(), MaplePacketCreator.spawnPlayerMapobject((MapleCharacter) chr.get()), false);
+ }
+ }
+ }
+ }
+ if (!clonez) {
+ for (final WeakReference chr : this.clones) {
+ if (chr.get() != null) {
+ ((MapleCharacter) chr.get()).cancelEffect(effect, overwrite, startTime);
+ }
+ }
+ }
+ if (this.getDebugMessage()) {
+ this.dropMessage("取消技能 - " + effect.getName() + "(" + effect.getSourceId() + ")");
+ }
+ }
+
+ public void cancelBuffStats(final MapleBuffStat... stat) {
+ final List buffStatList = Arrays.asList(stat);
+ this.deregisterBuffStats(buffStatList);
+ this.cancelPlayerBuffs(buffStatList);
+ }
+
+ public void cancelEffectFromBuffStat(final MapleBuffStat stat) {
+ if (this.effects.get(stat) != null) {
+ this.cancelEffect(((MapleBuffStatValueHolder) this.effects.get(stat)).effect, false, -1L);
+ }
+ }
+
+ private void cancelPlayerBuffs(final List buffstats) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.remove(buffstats);
+ final boolean write = this.client.getChannelServer().getPlayerStorage().getCharacterById(this.getId()) != null;
+ if (buffstats.contains(MapleBuffStat.HOMING_BEACON)) {
+ if (write) {
+ this.client.sendPacket(MaplePacketCreator.cancelHoming());
+ }
+ } else {
+ if (write) {
+ this.stats.recalcLocalStats();
+ }
+ this.client.sendPacket(MaplePacketCreator.cancelBuff(buffstats));
+ this.map.broadcastMessage(this, MaplePacketCreator.cancelForeignBuff(this.getId(), buffstats), false);
+ }
+ }
+
+ public void dispel() {
+ if (!this.isHidden()) {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (mbsvh.effect.isSkill() && mbsvh.schedule != null && !mbsvh.effect.isMorph() && !mbsvh.effect.isEnergyCharge()) {
+ this.cancelEffect(mbsvh.effect, false, mbsvh.startTime);
+ }
+ }
+ }
+ }
+
+ public void dispelSkill(final int skillid) {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (skillid == 0) {
+ if (mbsvh.effect.isSkill() && (mbsvh.effect.getSourceId() == 4331003 || mbsvh.effect.getSourceId() == 4331002 || mbsvh.effect.getSourceId() == 4341002 || mbsvh.effect.getSourceId() == 22131001 || mbsvh.effect.getSourceId() == 1321007 || mbsvh.effect.getSourceId() == 2121005 || mbsvh.effect.getSourceId() == 2221005 || mbsvh.effect.getSourceId() == 2311006 || mbsvh.effect.getSourceId() == 2321003 || mbsvh.effect.getSourceId() == 3111002 || mbsvh.effect.getSourceId() == 3111005 || mbsvh.effect.getSourceId() == 3211002 || mbsvh.effect.getSourceId() == 3211005 || mbsvh.effect.getSourceId() == 4111002)) {
+ this.cancelEffect(mbsvh.effect, false, mbsvh.startTime);
+ break;
+ }
+ continue;
+ } else {
+ if (mbsvh.effect.isSkill() && mbsvh.effect.getSourceId() == skillid) {
+ this.cancelEffect(mbsvh.effect, false, mbsvh.startTime);
+ break;
+ }
+ continue;
+ }
+ }
+ }
+
+ public void dispelBuff(final int skillid) {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (mbsvh.effect.getSourceId() == skillid) {
+ this.cancelEffect(mbsvh.effect, false, mbsvh.startTime);
+ break;
+ }
+ }
+ }
+
+ public void cancelAllBuffs_() {
+ this.effects.clear();
+ }
+
+ public void cancelAllSkillID() {
+ this.skillID.clear();
+ }
+
+ public void cancelAllBuffs() {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ this.cancelEffect(mbsvh.effect, false, mbsvh.startTime);
+ }
+ }
+
+ public void cancelMorphs() {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ switch (mbsvh.effect.getSourceId()) {
+ case 5111005:
+ case 5121003:
+ case 13111005:
+ case 15111002: {
+ return;
+ }
+ default: {
+ if (!mbsvh.effect.isMorph()) {
+ continue;
+ }
+ this.cancelEffect(mbsvh.effect, false, mbsvh.startTime);
+ continue;
+ }
+ }
+ }
+ }
+
+ public int getMorphState() {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (mbsvh.effect.isMorph()) {
+ return mbsvh.effect.getSourceId();
+ }
+ }
+ return -1;
+ }
+
+ public void silentGiveBuffs(final List buffs) {
+ if (buffs == null) {
+ return;
+ }
+ for (final PlayerBuffValueHolder mbsvh : buffs) {
+ mbsvh.effect.silentApplyBuff(this, mbsvh.startTime, mbsvh.localDuration, mbsvh.statup, mbsvh.cid);
+ }
+ }
+
+ public List getAllBuffs() {
+ final List ret = (List) new ArrayList();
+ final Map, Integer> alreadyDone = (Map, Integer>) new HashMap();
+ final LinkedList> allBuffs = new LinkedList(this.effects.entrySet());
+ for (final Entry mbsvh : allBuffs) {
+ final Pair key = new Pair(Integer.valueOf(((MapleBuffStatValueHolder) mbsvh.getValue()).effect.getSourceId()), Byte.valueOf(((MapleBuffStatValueHolder) mbsvh.getValue()).effect.getLevel()));
+ if (alreadyDone.containsKey(key)) {
+ ((PlayerBuffValueHolder) ret.get(((Integer) alreadyDone.get(key)).intValue())).statup.add(new Pair(mbsvh.getKey(), Integer.valueOf(((MapleBuffStatValueHolder) mbsvh.getValue()).value)));
+ } else {
+ alreadyDone.put(key, Integer.valueOf(ret.size()));
+ final ArrayList> list = (ArrayList>) new ArrayList();
+ list.add(new Pair(mbsvh.getKey(), Integer.valueOf(((MapleBuffStatValueHolder) mbsvh.getValue()).value)));
+ ret.add(new PlayerBuffValueHolder(((MapleBuffStatValueHolder) mbsvh.getValue()).startTime, ((MapleBuffStatValueHolder) mbsvh.getValue()).effect, (List>) list, ((MapleBuffStatValueHolder) mbsvh.getValue()).localDuration, ((MapleBuffStatValueHolder) mbsvh.getValue()).cid));
+ }
+ }
+ return ret;
+ }
+
+ public void cancelMagicDoor() {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (mbsvh.effect.isMagicDoor()) {
+ this.cancelEffect(mbsvh.effect, false, mbsvh.startTime);
+ break;
+ }
+ }
+ }
+
+ public int getSkillLevel(final int skillid) {
+ return this.getSkillLevel(SkillFactory.getSkill(skillid));
+ }
+
+ public final void handleEnergyCharge(final int skillid, final int targets) {
+ final ISkill echskill = SkillFactory.getSkill(skillid);
+ final byte skilllevel = this.getSkillLevel(echskill);
+ if (skilllevel > 0) {
+ final MapleStatEffect echeff = echskill.getEffect((int) skilllevel);
+ if (targets > 0) {
+ if (this.getBuffedValue(MapleBuffStat.ENERGY_CHARGE) == null) {
+ echeff.applyEnergyBuff(this, true);
+ } else {
+ Integer energyLevel = this.getBuffedValue(MapleBuffStat.ENERGY_CHARGE);
+ if (energyLevel.intValue() < 10000) {
+ energyLevel = Integer.valueOf(energyLevel.intValue() + echeff.getX() * targets);
+ this.client.sendPacket(MaplePacketCreator.showOwnBuffEffect(skillid, 2));
+ this.map.broadcastMessage(this, MaplePacketCreator.showBuffeffect(this.id, skillid, 2), false);
+ if (energyLevel.intValue() >= 10000) {
+ energyLevel = Integer.valueOf(10000);
+ }
+ this.client.sendPacket(MaplePacketCreator.giveEnergyChargeTest(energyLevel.intValue(), echeff.getDuration() / 1000));
+ this.setBuffedValue(MapleBuffStat.ENERGY_CHARGE, energyLevel.intValue());
+ } else if (energyLevel.intValue() == 10000) {
+ echeff.applyEnergyBuff(this, false);
+ this.setBuffedValue(MapleBuffStat.ENERGY_CHARGE, 10001);
+ }
+ }
+ }
+ }
+ }
+
+ public final void handleBattleshipHP(final int damage) {
+ if (this.isActiveBuffedValue(5221006)) {
+ this.battleshipHP -= damage;
+ if (this.battleshipHP <= 0) {
+ this.battleshipHP = 0;
+ final MapleStatEffect effect = this.getStatForBuff(MapleBuffStat.MONSTER_RIDING);
+ this.client.sendPacket(MaplePacketCreator.skillCooldown(5221006, effect.getCooldown()));
+ this.addCooldown(5221006, System.currentTimeMillis(), (long) (effect.getCooldown() * 1000));
+ this.dispelSkill(5221006);
+ }
+ }
+ }
+
+ public final void handleOrbgain() {
+ final int orbcount = this.getBuffedValue(MapleBuffStat.COMBO).intValue();
+ ISkill theCombol = null;
+ ISkill advcombo = null;
+ switch (this.getJob()) {
+ case 1110:
+ case 1111:
+ case 1112: {
+ theCombol = SkillFactory.getSkill(11111001);
+ advcombo = SkillFactory.getSkill(11110005);
+ break;
+ }
+ default: {
+ theCombol = SkillFactory.getSkill(1111002);
+ advcombo = SkillFactory.getSkill(1120003);
+ break;
+ }
+ }
+ final int advComboSkillLevel = this.getSkillLevel(advcombo);
+ MapleStatEffect ceffect;
+ if (advComboSkillLevel > 0) {
+ ceffect = advcombo.getEffect(advComboSkillLevel);
+ } else {
+ if (this.getSkillLevel(theCombol) <= 0) {
+ return;
+ }
+ ceffect = theCombol.getEffect((int) this.getSkillLevel(theCombol));
+ }
+ if (orbcount < ceffect.getX() + 1) {
+ int neworbcount = orbcount + 1;
+ if (advComboSkillLevel > 0 && ceffect.makeChanceResult() && neworbcount < ceffect.getX() + 1) {
+ ++neworbcount;
+ }
+ final List> stat = Collections.singletonList(new Pair(MapleBuffStat.COMBO, Integer.valueOf(neworbcount)));
+ this.setBuffedValue(MapleBuffStat.COMBO, neworbcount);
+ int duration = ceffect.getDuration();
+ duration += (int) (this.getBuffedStarttime(MapleBuffStat.COMBO).longValue() - System.currentTimeMillis());
+ this.client.sendPacket(MaplePacketCreator.giveBuff(theCombol.getId(), duration, stat, ceffect));
+ this.map.broadcastMessage(this, MaplePacketCreator.giveForeignBuff(this.getId(), stat, ceffect), false);
+ }
+ }
+
+ public void handleOrbconsume() {
+ ISkill theCombol = null;
+ switch (this.getJob()) {
+ case 1110:
+ case 1111:
+ case 1112: {
+ theCombol = SkillFactory.getSkill(11111001);
+ break;
+ }
+ default: {
+ theCombol = SkillFactory.getSkill(1111002);
+ break;
+ }
+ }
+ if (this.getSkillLevel(theCombol) <= 0) {
+ return;
+ }
+ final MapleStatEffect ceffect = this.getStatForBuff(MapleBuffStat.COMBO);
+ if (ceffect == null) {
+ return;
+ }
+ final List> stat = Collections.singletonList(new Pair(MapleBuffStat.COMBO, Integer.valueOf(1)));
+ this.setBuffedValue(MapleBuffStat.COMBO, 1);
+ int duration = ceffect.getDuration();
+ duration += (int) (this.getBuffedStarttime(MapleBuffStat.COMBO).longValue() - System.currentTimeMillis());
+ this.client.sendPacket(MaplePacketCreator.giveBuff(theCombol.getId(), duration, stat, ceffect));
+ this.map.broadcastMessage(this, MaplePacketCreator.giveForeignBuff(this.getId(), stat, ceffect), false);
+ }
+
+ public void silentEnforceMaxHpMp() {
+ this.stats.setMp((int) this.stats.getMp());
+ this.stats.setHp((int) this.stats.getHp(), true);
+ }
+
+ public void enforceMaxHpMp() {
+ final Map statups = new EnumMap(MapleStat.class);
+ if (this.stats.getMp() > this.stats.getCurrentMaxMp()) {
+ this.stats.setMp((int) this.stats.getMp());
+ statups.put(MapleStat.MP, Long.valueOf((int) this.stats.getMp()));
+ }
+ if (this.stats.getHp() > this.stats.getCurrentMaxHp()) {
+ this.stats.setHp((int) this.stats.getHp());
+ statups.put(MapleStat.HP, Long.valueOf((int) this.stats.getHp()));
+ }
+ if (statups.size() > 0) {
+ this.client.sendPacket(MaplePacketCreator.updatePlayerStats(statups, this));
+ }
+ }
+
+ public MapleMap getMap() {
+ return this.map;
+ }
+
+ public MonsterBook getMonsterBook() {
+ return this.monsterbook;
+ }
+
+ public void setMap(final MapleMap newmap) {
+ this.map = newmap;
+ }
+
+ public void setMap(final int PmapId) {
+ this.mapid = PmapId;
+ }
+
+ public int getMapId() {
+ if (this.map != null) {
+ return this.map.getId();
+ }
+ return this.mapid;
+ }
+
+ public byte getInitialSpawnpoint() {
+ return this.initialSpawnPoint;
+ }
+
+ public int getId() {
+ return this.id;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+
+ public final boolean canHold(final int itemid) {
+ return this.getInventory(GameConstants.getInventoryType(itemid)).getNextFreeSlot() > -1;
+ }
+
+ public final String getBlessOfFairyOrigin() {
+ return this.BlessOfFairy_Origin;
+ }
+
+ public final short getLevel() {
+ if (this.level < 1) {
+ this.level = 1;
+ }
+ return this.level;
+ }
+
+ public final short getFame() {
+ return this.fame;
+ }
+
+ public final int getDojo() {
+ return this.dojo;
+ }
+
+ public final int getDojoRecord() {
+ return this.dojoRecord;
+ }
+
+ public final int getFallCounter() {
+ return this.fallcounter;
+ }
+
+ public final MapleClient getClient() {
+ return this.client;
+ }
+
+ public final void setClient(final MapleClient client) {
+ this.client = client;
+ }
+
+ public long getExp() {
+ return this.exp;
+ }
+
+ public short getRemainingAp() {
+ return this.remainingAp;
+ }
+
+ public int getRemainingSp() {
+ return this.remainingSp[GameConstants.getSkillBook((int) this.job)];
+ }
+
+ public int getRemainingSp(final int skillbook) {
+ return this.remainingSp[skillbook];
+ }
+
+ public int[] getRemainingSps() {
+ return this.remainingSp;
+ }
+
+ public int getRemainingSpSize() {
+ int ret = 0;
+ for (int i = 0; i < this.remainingSp.length; ++i) {
+ if (this.remainingSp[i] > 0) {
+ ++ret;
+ }
+ }
+ return ret;
+ }
+
+ public short getHpMpApUsed() {
+ return this.hpmpApUsed;
+ }
+
+ public boolean isHidden() {
+ return this.hidden;
+ }
+
+ public void setHpMpApUsed(final short hpApUsed) {
+ this.hpmpApUsed = hpApUsed;
+ }
+
+ public byte getSkinColor() {
+ return this.skinColor;
+ }
+
+ public void setSkinColor(final byte skinColor) {
+ this.skinColor = skinColor;
+ }
+
+ public short getJob() {
+ return this.job;
+ }
+
+ public byte getGender() {
+ return this.gender;
+ }
+
+ public int getHair() {
+ return this.hair;
+ }
+
+ public int getFace() {
+ return this.face;
+ }
+
+ public void setName(final String name) {
+ this.name = name;
+ }
+
+ public void setExp(final long exp) {
+ this.exp = exp;
+ }
+
+ public void setHair(final int hair) {
+ this.hair = hair;
+ }
+
+ public void setFace(final int face) {
+ this.face = face;
+ }
+
+ public void setFame(final short fame) {
+ this.fame = fame;
+ }
+
+ public void setDojo(final int dojo) {
+ this.dojo = dojo;
+ }
+
+ public void setDojoRecord(final boolean reset) {
+ if (reset) {
+ this.dojo = 0;
+ this.dojoRecord = 0;
+ } else {
+ ++this.dojoRecord;
+ }
+ }
+
+ public void setFallCounter(final int fallcounter) {
+ this.fallcounter = fallcounter;
+ }
+
+ public Point getOldPosition() {
+ return this.old;
+ }
+
+ public void setOldPosition(final Point x) {
+ this.old = x;
+ }
+
+ public void setRemainingAp(final short remainingAp) {
+ this.remainingAp = remainingAp;
+ }
+
+ public void setRemainingSp(final int remainingSp) {
+ this.remainingSp[GameConstants.getSkillBook((int) this.job)] = remainingSp;
+ }
+
+ public void setRemainingSp(final int remainingSp, final int skillbook) {
+ this.remainingSp[skillbook] = remainingSp;
+ }
+
+ public void setGender(final byte gender) {
+ this.gender = gender;
+ }
+
+ public void setInvincible(final boolean invinc) {
+ this.invincible = invinc;
+ }
+
+ public boolean isInvincible() {
+ return this.invincible;
+ }
+
+ public CheatTracker getCheatTracker() {
+ return this.anticheat;
+ }
+
+ public MapleLieDetector getAntiMacro() {
+ return this.antiMacro;
+ }
+
+ public void startLieDetector(final boolean isItem) {
+ if ((this.getMapId() < 910000000 || this.getMapId() > 910000022) && this.getMapId() != 800040410 && !GameConstants.isFishingMap(this.getMapId()) && this.getMap().getReturnMapId() != this.getMapId()) {
+ if (this.getAntiMacro().isPassed()) {
+ this.getAntiMacro().setPassed(false);
+ }
+ if (!this.getAntiMacro().inProgress()) {
+ this.getAntiMacro().startLieDetector(this.getName(), isItem, false);
+ }
+ }
+ }
+
+ public BuddyList getBuddylist() {
+ return this.buddylist;
+ }
+
+ public void addFame(final int famechange) {
+ this.fame += (short) famechange;
+ this.updateFame();
+ }
+
+ public void changeMap(final int mapid) {
+ final MapleMap target = this.client.getChannelServer().getMapFactory().getMap(mapid);
+ this.changeMap(target, target.getPortal(0));
+ }
+
+ public void changeMapBanish(final int mapid, final String portal, final String msg) {
+ this.dropMessage(5, msg);
+ final MapleMap target = this.client.getChannelServer().getMapFactory().getMap(mapid);
+ this.changeMap(target, target.getPortal(portal));
+ }
+
+ public void changeMap(final MapleMap to, final Point pos) {
+ this.changeMapInternal(to, pos, MaplePacketCreator.getWarpToMap(to, 129, this), null);
+ }
+
+ public void changeMap(final MapleMap to, final MaplePortal pto) {
+ this.changeMapInternal(to, pto.getPosition(), MaplePacketCreator.getWarpToMap(to, pto.getId(), this), null);
+ }
+
+ public void changeMapPortal(final MapleMap to, final MaplePortal pto) {
+ this.changeMapInternal(to, pto.getPosition(), MaplePacketCreator.getWarpToMap(to, pto.getId(), this), pto);
+ }
+
+ private void changeMapInternal(final MapleMap to, final Point pos, final byte[] warpPacket, final MaplePortal pto) {
+ if (to == null) {
+ return;
+ }
+ this.saveToDB(true, true);
+ if (pto != null && GameConstants.isNotTo(to.getId(), pto.getName())) {
+ if (this.getParty() == null || this.getParty().getMembers().size() == 1) {
+ this.changeMap(211060000);
+ return;
+ }
+ final int cMap = this.getMapId();
+ for (final MaplePartyCharacter chr : this.getParty().getMembers()) {
+ final MapleCharacter curChar = this.getClient().getChannelServer().getPlayerStorage().getCharacterById(chr.getId());
+ if (curChar != null && (curChar.getMapId() == cMap || curChar.getEventInstance() == this.getEventInstance())) {
+ curChar.changeMap(211060000);
+ }
+ }
+ return;
+ } else {
+ if (this.getAntiMacro().inProgress()) {
+ this.dropMessage(5, "被使用测谎仪时无法操作。");
+ this.client.sendPacket(MaplePacketCreator.enableActions());
+ return;
+ }
+ if (to.getId() != 105100300) {
+ this.dispelBuff(2022536);
+ this.dispelBuff(2022537);
+ }
+ if (to.getId() == 180000000 && this.getGMLevel() < 4) {
+ this.changeMap(100000000);
+ return;
+ }
+ final int nowmapid = this.map.getId();
+ if (this.eventInstance != null) {
+ this.eventInstance.changedMap(this, to.getId());
+ }
+ if (this.getTrade() != null) {
+ if (this.getTrade().getPartner() != null) {
+ final MapleTrade local = this.getTrade();
+ final MapleTrade partners = local.getPartner();
+ if (local.isLocked() && partners.isLocked()) {
+ this.client.getSession().write(MaplePacketCreator.enableActions());
+ } else {
+ MapleTrade.cancelTrade(this.getTrade(), this.getClient());
+ }
+ } else {
+ MapleTrade.cancelTrade(this.getTrade(), this.client);
+ }
+ }
+ final boolean pyramid = this.pyramidSubway != null;
+ if (this.map.getId() == nowmapid) {
+ this.client.sendPacket(warpPacket);
+ this.map.removePlayer(this);
+ if (!this.isClone() && this.client.getChannelServer().getPlayerStorage().getCharacterById(this.getId()) != null) {
+ this.map = to;
+ this.setPosition(pos);
+ to.addPlayer(this);
+ this.stats.relocHeal();
+ }
+ }
+ if (pyramid && this.pyramidSubway != null) {
+ this.pyramidSubway.onChangeMap(this, to.getId());
+ }
+ if (Mushplotact.getStartState() && Mushplotact.getEggmap() == to.getId()) {
+ this.client.getPlayer().dropMessage("蘑插辣的魔力源泉貌似就在附近了!!");
+ }
+ return;
+ }
+ }
+
+ public void leaveMap() {
+ this.visibleMapObjectsLock.writeLock().lock();
+ try {
+ for (final MapleMonster mons : this.controlled) {
+ if (mons != null) {
+ mons.setController(null);
+ mons.setControllerHasAggro(false);
+ mons.setControllerKnowsAboutAggro(false);
+ this.map.updateMonsterController(mons);
+ }
+ }
+ this.controlled.clear();
+ this.visibleMapObjects.clear();
+ } finally {
+ this.visibleMapObjectsLock.writeLock().unlock();
+ }
+ if (this.chair != 0) {
+ this.cancelFishingTask();
+ this.chair = 0;
+ }
+ if (this.getTrade() != null) {
+ if (this.getTrade().getPartner() != null) {
+ final MapleTrade local = this.getTrade();
+ final MapleTrade partners = local.getPartner();
+ if (local.isLocked() && partners.isLocked()) {
+ this.client.getSession().write(MaplePacketCreator.enableActions());
+ } else {
+ MapleTrade.cancelTrade(this.getTrade(), this.getClient());
+ }
+ } else {
+ MapleTrade.cancelTrade(this.getTrade(), this.client);
+ }
+ }
+ this.cancelMapTimeLimitTask();
+ }
+
+ public void changeJob(final int newJob) {
+ try {
+ this.updateSingleStat(MapleStat.JOB, newJob);
+ final boolean isEv = GameConstants.isEvan((int) this.job) || GameConstants.isResist((int) this.job);
+ this.job = (short) newJob;
+ if (newJob != 0 && newJob != 1000 && newJob != 2000 && newJob != 2001 && newJob != 3000) {
+ if (isEv) {
+ final int[] remainingSp = this.remainingSp;
+ final int skillBook = GameConstants.getSkillBook(newJob);
+ remainingSp[skillBook] += 5;
+ this.client.getSession().write(UIPacket.getSPMsg((byte) 5, (short) newJob));
+ } else {
+ final int[] remainingSp2 = this.remainingSp;
+ final int skillBook2 = GameConstants.getSkillBook(newJob);
+ ++remainingSp2[skillBook2];
+ if (newJob % 10 >= 2) {
+ final int[] remainingSp3 = this.remainingSp;
+ final int skillBook3 = GameConstants.getSkillBook(newJob);
+ remainingSp3[skillBook3] += 2;
+ }
+ }
+ }
+ if (newJob > 0) {
+ this.resetStatsByJob(true);
+ if (this.getLevel() > ((newJob == 200) ? 8 : 10) && newJob % 100 == 0 && newJob % 1000 / 100 > 0) {
+ final int[] remainingSp4 = this.remainingSp;
+ final int skillBook4 = GameConstants.getSkillBook(newJob);
+ remainingSp4[skillBook4] += 3 * (this.getLevel() - ((newJob == 200) ? 8 : 10));
+ }
+ }
+ this.client.sendPacket(MaplePacketCreator.updateSp(this, false));
+ int maxhp = this.stats.getMaxHp();
+ int maxmp = this.stats.getMaxMp();
+ switch (this.job) {
+ case 100:
+ case 1100:
+ case 2100: {
+ maxhp += Randomizer.rand(200, 250);
+ break;
+ }
+ case 200: {
+ maxmp += Randomizer.rand(100, 150);
+ break;
+ }
+ case 300:
+ case 400:
+ case 500: {
+ maxhp += Randomizer.rand(100, 150);
+ maxmp += Randomizer.rand(25, 50);
+ break;
+ }
+ case 110: {
+ maxhp += Randomizer.rand(300, 350);
+ break;
+ }
+ case 120:
+ case 130:
+ case 510:
+ case 512:
+ case 1110:
+ case 2110: {
+ maxhp += Randomizer.rand(300, 350);
+ break;
+ }
+ case 210:
+ case 220:
+ case 230: {
+ maxmp += Randomizer.rand(400, 450);
+ break;
+ }
+ case 310:
+ case 312:
+ case 320:
+ case 322:
+ case 410:
+ case 412:
+ case 420:
+ case 422:
+ case 520:
+ case 522:
+ case 1310:
+ case 1410: {
+ maxhp += Randomizer.rand(300, 350);
+ maxhp += Randomizer.rand(150, 200);
+ break;
+ }
+ case 800:
+ case 900: {
+ maxhp += 30000;
+ maxhp += 30000;
+ maxmp += 30000;
+ maxmp += 30000;
+ break;
+ }
+ }
+ if (maxhp >= 30000) {
+ maxhp = 30000;
+ }
+ if (maxmp >= 30000) {
+ maxmp = 30000;
+ }
+ this.stats.setMaxHp((short) maxhp);
+ this.stats.setMaxMp((short) maxmp);
+ this.stats.setHp((int) (short) maxhp);
+ this.stats.setMp((int) (short) maxmp);
+ final Map statup = new EnumMap(MapleStat.class);
+ statup.put(MapleStat.MAXHP, Long.valueOf(maxhp));
+ statup.put(MapleStat.MAXMP, Long.valueOf(maxmp));
+ statup.put(MapleStat.HP, Long.valueOf(maxhp));
+ statup.put(MapleStat.MP, Long.valueOf(maxmp));
+ this.stats.recalcLocalStats();
+ this.client.sendPacket(MaplePacketCreator.updatePlayerStats(statup, this));
+ this.map.broadcastMessage(this, MaplePacketCreator.showForeignEffect(this.getId(), 9), false);
+ this.silentPartyUpdate();
+ this.guildUpdate();
+ this.familyUpdate();
+ this.baseSkills();
+ } catch (Exception e) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e);
+ }
+ }
+
+ public void setPetAutoFood(final boolean auto) {
+ this.petAutoFood = auto;
+ }
+
+ public boolean isPetAutoFood() {
+ return this.petAutoFood;
+ }
+
+ public void baseSkills() {
+ if (GameConstants.getJobNumber((int) this.job) >= 3) {
+ final List baseSkills = SkillFactory.getSkillsByJob((int) this.job);
+ if (baseSkills != null) {
+ final Iterator iterator = baseSkills.iterator();
+ while (iterator.hasNext()) {
+ final int i = ((Integer) iterator.next()).intValue();
+ final ISkill skil = SkillFactory.getSkill(i);
+ if (skil != null && !skil.isInvisible() && skil.isFourthJob() && this.getSkillLevel(skil) <= 0 && this.getMasterLevel(skil) <= 0 && skil.getMasterLevel() > 0) {
+ this.changeSkillLevel(skil, (byte) 0, (byte) skil.getMasterLevel());
+ }
+ }
+ }
+ }
+ }
+
+ public void gainAp(final short ap) {
+ this.remainingAp += ap;
+ this.updateSingleStat(MapleStat.AVAILABLEAP, (int) this.remainingAp);
+ }
+
+ public void gainSP(final int sp) {
+ final int[] remainingSp = this.remainingSp;
+ final int skillBook = GameConstants.getSkillBook((int) this.job);
+ remainingSp[skillBook] += sp;
+ this.client.sendPacket(MaplePacketCreator.updateSp(this, false));
+ this.client.sendPacket(UIPacket.getSPMsg((byte) sp, this.job));
+ }
+
+ public void gainSP(final int sp, final int skillbook) {
+ final int[] remainingSp = this.remainingSp;
+ remainingSp[skillbook] += sp;
+ this.client.sendPacket(MaplePacketCreator.updateSp(this, false));
+ this.client.sendPacket(UIPacket.getSPMsg((byte) sp, this.job));
+ }
+
+ public void resetAPSP() {
+ for (int i = 0; i < this.remainingSp.length; ++i) {
+ this.remainingSp[i] = 0;
+ }
+ this.client.sendPacket(MaplePacketCreator.updateSp(this, false));
+ this.gainAp((short) (-this.remainingAp));
+ }
+
+ public void changeSkillLevel(final ISkill skill, final byte newLevel, final byte newMasterlevel) {
+ if (skill == null) {
+ return;
+ }
+ this.changeSkillLevel(skill, newLevel, newMasterlevel, skill.isTimeLimited() ? (System.currentTimeMillis() + 2592000000L) : -1L);
+ }
+
+ public void changeSkillLevel(final ISkill skill, final byte newLevel, final byte newMasterlevel, final long expiration) {
+ if (skill == null || (!GameConstants.isApplicableSkill(skill.getId()) && !GameConstants.isApplicableSkill_(skill.getId()))) {
+ return;
+ }
+ this.client.sendPacket(MaplePacketCreator.updateSkill(skill.getId(), (int) newLevel, (int) newMasterlevel, expiration));
+ if (newLevel == 0 && newMasterlevel == 0) {
+ if (!this.skills.containsKey(skill)) {
+ return;
+ }
+ this.skills.remove(skill);
+ } else {
+ this.skills.put(skill, new SkillEntry(newLevel, newMasterlevel, expiration));
+ }
+ if (GameConstants.isRecoveryIncSkill(skill.getId())) {
+ this.stats.relocHeal();
+ } else if (GameConstants.isElementAmpSkill(skill.getId())) {
+ this.stats.recalcLocalStats();
+ }
+ }
+
+ public void changeSkillLevel_Skip(final ISkill skill, final byte newLevel, final byte newMasterlevel) {
+ if (skill == null) {
+ return;
+ }
+ this.client.sendPacket(MaplePacketCreator.updateSkill(skill.getId(), (int) newLevel, (int) newMasterlevel, -1L));
+ if (newLevel == 0 && newMasterlevel == 0) {
+ if (this.skills.containsKey(skill)) {
+ this.skills.remove(skill);
+ }
+ } else {
+ this.skills.put(skill, new SkillEntry(newLevel, newMasterlevel, -1L));
+ }
+ }
+
+ public void playerDead() {
+ if (this.getMapId() != 109020001) {
+ final MapleStatEffect statss = this.getStatForBuff(MapleBuffStat.SOUL_STONE);
+ if (statss != null) {
+ this.dropMessage(5, "你已经透过灵魂之石复活了。");
+ this.getStat().setHp(this.getStat().getMaxHp() / 100 * statss.getX());
+ this.setStance(0);
+ this.changeMap(this.getMap(), this.getMap().getPortal(0));
+ return;
+ }
+ }
+ if (this.getEventInstance() != null) {
+ this.getEventInstance().playerKilled(this);
+ }
+ this.client.getSession().write(MaplePacketCreator.enableActions());
+ this.dispelSkill(0);
+ this.cancelEffectFromBuffStat(MapleBuffStat.MORPH);
+ this.cancelEffectFromBuffStat(MapleBuffStat.MONSTER_RIDING);
+ this.cancelEffectFromBuffStat(MapleBuffStat.SUMMON);
+ this.cancelEffectFromBuffStat(MapleBuffStat.PUPPET);
+ this.checkFollow();
+ if (this.getMapId() != 109020001) {
+ if (this.job != 0 && this.job != 1000 && this.job != 2000 && this.job != 2001 && this.job != 3000) {
+ int charms = this.getItemQuantity(5130000, false);
+ if (charms > 0) {
+ MapleInventoryManipulator.removeById(this.client, MapleInventoryType.CASH, 5130000, 1, true, false);
+ if (--charms > 255) {
+ charms = 255;
+ }
+ this.client.sendPacket(MTSCSPacket.useCharm((byte) charms, (byte) 0));
+ } else {
+ final int expforlevel = GameConstants.getExpNeededForLevel((int) this.level);
+ float diepercentage;
+ if (this.map.isTown() || FieldLimitType.RegularExpLoss.check(this.map.getFieldLimit())) {
+ diepercentage = 0.01f;
+ } else {
+ float v8;
+ if (this.job / 100 == 3) {
+ v8 = 0.08f;
+ } else {
+ v8 = 0.2f;
+ }
+ diepercentage = (float) ((double) (v8 / (float) this.stats.getLuk()) + 0.05);
+ }
+ int v9 = (int) ((long) this.exp - (long) ((double) expforlevel * (double) diepercentage));
+ if (v9 < 0) {
+ v9 = 0;
+ }
+ this.exp = v9;
+ }
+ }
+ this.updateSingleStat(MapleStat.EXP, this.exp);
+ this.client.getSession().write(MaplePacketCreator.enableActions());
+ if (!this.stats.checkEquipDurabilitys(this, -100)) {
+ this.dropMessage(5, "该装备耐久度已经使用完毕,必须修理才可以继续使用。");
+ }
+ }
+ if (this.pyramidSubway != null) {
+ this.stats.setHp(50);
+ this.pyramidSubway.fail(this);
+ }
+ this.client.getSession().write(MaplePacketCreator.enableActions());
+ }
+
+ public void updatePartyMemberHP() {
+ if (this.party != null) {
+ final int channel = this.client.getChannel();
+ for (final MaplePartyCharacter partychar : this.party.getMembers()) {
+ if (partychar.getMapid() == this.getMapId() && partychar.getChannel() == channel) {
+ final MapleCharacter other = this.client.getChannelServer().getPlayerStorage().getCharacterByName(partychar.getName());
+ if (other == null) {
+ continue;
+ }
+ other.getClient().sendPacket(MaplePacketCreator.updatePartyMemberHP(this.getId(), (int) this.stats.getHp(), (int) this.stats.getCurrentMaxHp()));
+ }
+ }
+ }
+ }
+
+ public void receivePartyMemberHP() {
+ if (this.party == null) {
+ return;
+ }
+ final int channel = this.client.getChannel();
+ for (final MaplePartyCharacter partychar : this.party.getMembers()) {
+ if (partychar.getMapid() == this.getMapId() && partychar.getChannel() == channel) {
+ final MapleCharacter other = this.client.getChannelServer().getPlayerStorage().getCharacterByName(partychar.getName());
+ if (other == null) {
+ continue;
+ }
+ this.client.sendPacket(MaplePacketCreator.updatePartyMemberHP(other.getId(), (int) other.getStat().getHp(), (int) other.getStat().getCurrentMaxHp()));
+ }
+ }
+ }
+
+ public void healHP(final int delta) {
+ this.healHP(delta, false);
+ }
+
+ public void healHP(final int delta, final boolean Show) {
+ this.addHP(delta);
+ if (Show) {
+ this.client.sendPacket(MaplePacketCreator.showOwnHpHealed(delta));
+ this.getMap().broadcastMessage(this, MaplePacketCreator.showHpHealed(this.getId(), delta), false);
+ }
+ }
+
+ public void healMP(final int delta) {
+ this.addMP(delta);
+ }
+
+ public void addHP(final int delta) {
+ if (this.stats.setHp(this.stats.getHp() + delta)) {
+ this.updateSingleStat(MapleStat.HP, (int) this.stats.getHp());
+ }
+ }
+
+ public void addMP(final int delta) {
+ if (this.stats.setMp(this.stats.getMp() + delta)) {
+ this.updateSingleStat(MapleStat.MP, (int) this.stats.getMp());
+ }
+ }
+
+ public void addMPHP(final int hpDiff, final int mpDiff) {
+ final Map statups = new EnumMap(MapleStat.class);
+ if (this.stats.setHp(this.stats.getHp() + hpDiff)) {
+ statups.put(MapleStat.HP, Long.valueOf((int) this.stats.getHp()));
+ }
+ if (this.stats.setMp(this.stats.getMp() + mpDiff)) {
+ statups.put(MapleStat.MP, Long.valueOf((int) this.stats.getMp()));
+ }
+ if (statups.size() > 0) {
+ this.client.sendPacket(MaplePacketCreator.updatePlayerStats(statups, this));
+ }
+ }
+
+ public void 转生回归() {
+ final MapleCharacter player = this.client.getPlayer();
+ final boolean 转生开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生开关"));
+ final int 转生最大次数 = Integer.parseInt(ServerProperties.getProperty("pp.转生最大次数"));
+ final boolean 转生等级开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生等级开关"));
+ final short 转生等级变几级 = Short.parseShort(ServerProperties.getProperty("pp.转生等级变几级"));
+ final boolean 转生四维开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生四维开关"));
+ final short 转生后力量 = Short.parseShort(ServerProperties.getProperty("pp.转生后力量"));
+ final short 转生后敏捷 = Short.parseShort(ServerProperties.getProperty("pp.转生后敏捷"));
+ final short 转生后智力 = Short.parseShort(ServerProperties.getProperty("pp.转生后智力"));
+ final short 转生后运气 = Short.parseShort(ServerProperties.getProperty("pp.转生后运气"));
+ final boolean 转生血量开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生血量开关"));
+ final short 转生后血量 = Short.parseShort(ServerProperties.getProperty("pp.转生后血量"));
+ final boolean 转生蓝量开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生蓝量开关"));
+ final short 转生后蓝量 = Short.parseShort(ServerProperties.getProperty("pp.转生后蓝量"));
+ final boolean 转生技能删除开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生技能删除开关"));
+ final boolean 转生职业变新手开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生职业变新手开关"));
+ final boolean 转生后是否加属性 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生后是否加属性开关"));
+ final Short 转生后一转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后一转给属性点")));
+ final Short 转生后二转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后二转给属性点")));
+ final Short 转生后三转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后三转给属性点")));
+ final Short 转生后四转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后四转给属性点")));
+ final Short 转生后五转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后五转给属性点")));
+ final Short 转生后六转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后六转给属性点")));
+ final Short 转生后七转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后七转给属性点")));
+ final Short 转生后八转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后八转给属性点")));
+ final Short 转生后九转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后九转给属性点")));
+ final Short 转生后十转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十转给属性点")));
+ final Short 转生后十一转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十一转给属性点")));
+ final Short 转生后十二转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十二转给属性点")));
+ final Short 转生后十三转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十三转给属性点")));
+ final Short 转生后十四转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十四转给属性点")));
+ final Short 转生后十五转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十五转给属性点")));
+ final Short 转生后十六转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十六转给属性点")));
+ final Short 转生后十七转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十七转给属性点")));
+ final Short 转生后十八转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十八转给属性点")));
+ final Short 转生后十九转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十九转给属性点")));
+ final Short 转生后二十转给属性点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后二十转给属性点")));
+ final Short 转生后一转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后一转给技能点")));
+ final Short 转生后二转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后二转给技能点")));
+ final Short 转生后三转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后三转给技能点")));
+ final Short 转生后四转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后四转给技能点")));
+ final Short 转生后五转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后五转给技能点")));
+ final Short 转生后六转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后六转给技能点")));
+ final Short 转生后七转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后七转给技能点")));
+ final Short 转生后八转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后八转给技能点")));
+ final Short 转生后九转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后九转给技能点")));
+ final Short 转生后十转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十转给技能点")));
+ final Short 转生后十一转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十一转给技能点")));
+ final Short 转生后十二转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十二转给技能点")));
+ final Short 转生后十三转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十三转给技能点")));
+ final Short 转生后十四转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十四转给技能点")));
+ final Short 转生后十五转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十五转给技能点")));
+ final Short 转生后十六转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十六转给技能点")));
+ final Short 转生后十七转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十七转给技能点")));
+ final Short 转生后十八转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十八转给技能点")));
+ final Short 转生后十九转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后十九转给技能点")));
+ final Short 转生后二十转给技能点 = Short.valueOf(Short.parseShort(ServerProperties.getProperty("pp.转生后二十转给技能点")));
+ Short 转生后给技能点 = Short.valueOf((short) 0);
+ final int 一转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.一转等级要求"));
+ final int 二转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.二转等级要求"));
+ final int 三转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.三转等级要求"));
+ final int 四转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.四转等级要求"));
+ final int 五转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.五转等级要求"));
+ final int 六转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.六转等级要求"));
+ final int 七转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.七转等级要求"));
+ final int 八转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.八转等级要求"));
+ final int 九转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.九转等级要求"));
+ final int 十转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十转等级要求"));
+ final int 十一转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十一转等级要求"));
+ final int 十二转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十二转等级要求"));
+ final int 十三转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十三转等级要求"));
+ final int 十四转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十四转等级要求"));
+ final int 十五转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十五转等级要求"));
+ final int 十六转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十六转等级要求"));
+ final int 十七转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十七转等级要求"));
+ final int 十八转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十八转等级要求"));
+ final int 十九转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.十九转等级要求"));
+ final int 二十转等级要求 = Integer.parseInt(ServerProperties.getProperty("pp.二十转等级要求"));
+ if (转生开关) {
+ int 转生等级要求 = 0;
+ Short 转生后给属性点 = null;
+ switch (player.getOneTimeLog("转生次数")) {
+ case 0: {
+ 转生等级要求 = 一转等级要求;
+ 转生后给属性点 = 转生后一转给属性点;
+ 转生后给技能点 = 转生后一转给技能点;
+ break;
+ }
+ case 1: {
+ 转生等级要求 = 二转等级要求;
+ 转生后给属性点 = 转生后二转给属性点;
+ 转生后给技能点 = 转生后二转给技能点;
+ break;
+ }
+ case 2: {
+ 转生等级要求 = 三转等级要求;
+ 转生后给属性点 = 转生后三转给属性点;
+ 转生后给技能点 = 转生后三转给技能点;
+ break;
+ }
+ case 3: {
+ 转生等级要求 = 四转等级要求;
+ 转生后给属性点 = 转生后四转给属性点;
+ 转生后给技能点 = 转生后四转给技能点;
+ break;
+ }
+ case 4: {
+ 转生等级要求 = 五转等级要求;
+ 转生后给属性点 = 转生后五转给属性点;
+ 转生后给技能点 = 转生后五转给技能点;
+ break;
+ }
+ case 5: {
+ 转生等级要求 = 六转等级要求;
+ 转生后给属性点 = 转生后六转给属性点;
+ 转生后给技能点 = 转生后六转给技能点;
+ break;
+ }
+ case 6: {
+ 转生等级要求 = 七转等级要求;
+ 转生后给属性点 = 转生后七转给属性点;
+ 转生后给技能点 = 转生后七转给技能点;
+ break;
+ }
+ case 7: {
+ 转生等级要求 = 八转等级要求;
+ 转生后给属性点 = 转生后八转给属性点;
+ 转生后给技能点 = 转生后八转给技能点;
+ break;
+ }
+ case 8: {
+ 转生等级要求 = 九转等级要求;
+ 转生后给属性点 = 转生后九转给属性点;
+ 转生后给技能点 = 转生后九转给技能点;
+ break;
+ }
+ case 9: {
+ 转生等级要求 = 十转等级要求;
+ 转生后给属性点 = 转生后十转给属性点;
+ 转生后给技能点 = 转生后十转给技能点;
+ break;
+ }
+ case 10: {
+ 转生等级要求 = 十一转等级要求;
+ 转生后给属性点 = 转生后十一转给属性点;
+ 转生后给技能点 = 转生后十一转给技能点;
+ break;
+ }
+ case 11: {
+ 转生等级要求 = 十二转等级要求;
+ 转生后给属性点 = 转生后十二转给属性点;
+ 转生后给技能点 = 转生后十二转给技能点;
+ break;
+ }
+ case 12: {
+ 转生等级要求 = 十三转等级要求;
+ 转生后给属性点 = 转生后十三转给属性点;
+ 转生后给技能点 = 转生后十三转给技能点;
+ break;
+ }
+ case 13: {
+ 转生等级要求 = 十四转等级要求;
+ 转生后给属性点 = 转生后十四转给属性点;
+ 转生后给技能点 = 转生后十四转给技能点;
+ break;
+ }
+ case 14: {
+ 转生等级要求 = 十五转等级要求;
+ 转生后给属性点 = 转生后十五转给属性点;
+ 转生后给技能点 = 转生后十五转给技能点;
+ break;
+ }
+ case 15: {
+ 转生等级要求 = 十六转等级要求;
+ 转生后给属性点 = 转生后十六转给属性点;
+ 转生后给技能点 = 转生后十六转给技能点;
+ break;
+ }
+ case 16: {
+ 转生等级要求 = 十七转等级要求;
+ 转生后给属性点 = 转生后十七转给属性点;
+ 转生后给技能点 = 转生后十七转给技能点;
+ break;
+ }
+ case 17: {
+ 转生等级要求 = 十八转等级要求;
+ 转生后给属性点 = 转生后十八转给属性点;
+ 转生后给技能点 = 转生后十八转给技能点;
+ break;
+ }
+ case 18: {
+ 转生等级要求 = 十九转等级要求;
+ 转生后给属性点 = 转生后十九转给属性点;
+ 转生后给技能点 = 转生后十九转给技能点;
+ break;
+ }
+ case 20: {
+ 转生等级要求 = 二十转等级要求;
+ 转生后给属性点 = 转生后二十转给属性点;
+ 转生后给技能点 = 转生后二十转给技能点;
+ break;
+ }
+ default: {
+ player.dropMessage(6, "你已经二十转了,恭喜");
+ return;
+ }
+ }
+ if (this.getLevel() < 转生等级要求) {
+ player.dropMessage(6, "无法转生,等级不够");
+ return;
+ }
+ player.getStat().setHp(1);
+ player.updateSingleStat(MapleStat.HP, 1);
+ player.getStat().setMp(1);
+ player.updateSingleStat(MapleStat.MP, 1);
+ if (转生血量开关) {
+ player.getStat().setMaxHp(转生后血量);
+ player.updateSingleStat(MapleStat.MAXHP, (int) 转生后血量);
+ }
+ if (转生蓝量开关) {
+ player.getStat().setMaxMp(转生后蓝量);
+ player.updateSingleStat(MapleStat.MAXMP, (int) 转生后蓝量);
+ }
+ if (转生四维开关) {
+ player.getStat().setStr(转生后力量);
+ player.getStat().setDex(转生后敏捷);
+ player.getStat().setInt(转生后智力);
+ player.getStat().setLuk(转生后运气);
+ player.updateSingleStat(MapleStat.STR, (int) 转生后力量);
+ player.updateSingleStat(MapleStat.DEX, (int) 转生后敏捷);
+ player.updateSingleStat(MapleStat.INT, (int) 转生后智力);
+ player.updateSingleStat(MapleStat.LUK, (int) 转生后运气);
+ }
+ if (转生等级开关) {
+ player.setLevel(转生等级变几级);
+ player.updateSingleStat(MapleStat.LEVEL, (int) 转生等级变几级);
+ }
+ if (转生职业变新手开关) {
+ player.changeJob(0);
+ }
+ player.setOneTimeLog("转生次数");
+ if (转生技能删除开关) {
+ this.clearSkills();
+ }
+ this.setExp(0);
+ this.updateSingleStat(MapleStat.EXP, 0);
+ this.setRemainingAp((short) 0);
+ this.updateSingleStat(MapleStat.AVAILABLEAP, 0);
+ this.setRemainingSp(0);
+ this.updateSingleStat(MapleStat.AVAILABLESP, 0);
+ if (转生后是否加属性) {
+ this.setRemainingAp(转生后给属性点.shortValue());
+ this.updateSingleStat(MapleStat.AVAILABLEAP, (int) 转生后给属性点.shortValue());
+ }
+ if (!转生职业变新手开关) {
+ this.setRemainingSp((int) 转生后给技能点.shortValue());
+ this.updateSingleStat(MapleStat.AVAILABLESP, (int) 转生后给技能点.shortValue());
+ }
+ } else {
+ player.dropMessage(6, "转生没有开启");
+ }
+ this.client.getSession().write(MaplePacketCreator.enableActions());
+ }
+
+ public void addMAXMPHP(final int hpDiff, final int mpDiff) {
+ final Map statups = new EnumMap(MapleStat.class);
+ if (this.stats.getMaxHp() + hpDiff < 30000) {
+ statups.put(MapleStat.MAXHP, Long.valueOf(this.stats.getMaxHp() + hpDiff));
+ statups.put(MapleStat.HP, Long.valueOf(this.stats.getHp() + hpDiff));
+ this.stats.setHp(this.stats.getHp() + hpDiff);
+ this.stats.setMaxHp((short) (this.stats.getMaxHp() + hpDiff));
+ }
+ if (this.stats.getMaxMp() + mpDiff < 30000) {
+ statups.put(MapleStat.MAXMP, Long.valueOf(this.stats.getMaxMp() + mpDiff));
+ statups.put(MapleStat.MP, Long.valueOf(this.stats.getMp() + mpDiff));
+ this.stats.setMp(this.stats.getMp() + mpDiff);
+ this.stats.setMaxMp((short) (this.stats.getMaxMp() + mpDiff));
+ }
+ if (statups.size() > 0) {
+ this.client.getSession().write(MaplePacketCreator.updatePlayerStats(statups, this));
+ }
+ }
+
+ public void updateSingleStat(final MapleStat stat, final long newval) {
+ this.updateSingleStat(stat, newval, false);
+ }
+
+ public void updateSingleStat(final MapleStat stat, final long newval, final boolean itemReaction) {
+ if (stat == MapleStat.AVAILABLESP) {
+ this.client.sendPacket(MaplePacketCreator.updateSp(this, itemReaction));
+ return;
+ }
+ final Map statup = new EnumMap(MapleStat.class);
+ statup.put(stat, newval);
+ this.client.sendPacket(MaplePacketCreator.updatePlayerStats(statup, itemReaction, this));
+ }
+
+ public void gainExp(final long total, final boolean show, final boolean inChat, final boolean white) {
+ try {
+ final long prevexp = this.getExp();
+ long needed = GameConstants.getExpNeededForLevel(this.level);
+ if (total > 0) {
+ this.stats.checkEquipLevels(this, total);
+ }
+ if (this.level >= this.maxLevel) {
+ this.setExp(0);
+ } else {
+ boolean leveled = false;
+ final boolean levelUpTimesLimit = Integer.valueOf(Start.ConfigValuesMap.get((Object) "等级连升开关")) > 0;
+ final int 等级连升多少级之前都有效果 = (int) Integer.valueOf(Start.ConfigValuesMap.get((Object) "等级范围"));
+ this.exp += total;
+ long oexp = (long) this.exp;
+ short 等级 = this.level;
+ while (oexp >= needed) {
+ this.levelUp();
+ leveled = true;
+ oexp -= needed;
+ ++等级;
+ needed = GameConstants.getExpNeededForLevel(等级);
+ if (Integer.valueOf(Start.ConfigValuesMap.get((Object) "世界等级开关")) > 0 && 等级 >= Start.世界等级) {
+ break;
+ }
+ if (!levelUpTimesLimit || 等级 >= 等级连升多少级之前都有效果 || oexp < needed || 等级 >= this.maxLevel) {
+ break;
+ }
+ }
+ if (total > 0) {
+ this.familyRep(prevexp, needed, leveled);
+ }
+ }
+ if (total != 0) {
+ if (this.exp < 0) {
+ if (total > 0) {
+ this.setExp(needed);
+ } else if (total < 0) {
+ this.setExp(0);
+ }
+ }
+ this.updateSingleStat(MapleStat.EXP, this.getExp());
+ if (show) {
+ this.client.sendPacket(MaplePacketCreator.GainEXP_Others(total, inChat, white));
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ FilePrinter.printError("MapleCharacter.txt", e);
+ }
+ }
+
+ public void familyRep(final long prevexp, final long needed, final boolean leveled) {
+ if (this.mfc != null) {
+ final long onepercent = needed / 100;
+ int percentrep = (int) (getExp() / onepercent - prevexp / onepercent);
+ if (leveled) {
+ percentrep = 100 - percentrep + this.level / 2;
+ }
+ if (percentrep > 0) {
+ final int sensen = Family.setRep(this.mfc.getFamilyId(), this.mfc.getSeniorId(), percentrep, (int) this.level);
+ if (sensen > 0) {
+ Family.setRep(this.mfc.getFamilyId(), sensen, percentrep / 2, (int) this.level);
+ }
+ }
+ }
+ }
+
+ public boolean isShowInfo() {
+ return this.isAdmin();
+ }
+
+ public boolean isShowErr() {
+ return this.isShowInfo();
+ }
+
+ public void gainExpMonster(int gain, final boolean show, final boolean white, final byte pty, final int wedding_EXP, final int Class_Bonus_EXP, final int Equipment_Bonus_EXP, int Premium_Bonus_EXP, int 活动经验) {
+ if (this == null) {
+ return;
+ }
+ this.expirationTask(true, false);
+ if (this.getExpm() > 1.0) {
+ gain *= this.getExpm();
+ }
+ if (this.isVip()) {
+ gain *= 1.0 + this.getVipExpRate() / 100.0;
+ }
+ if (this.getStat().equippedRing) {
+ if (pty > 1) {
+ if (pty > 5) {
+ gain *= 1.3;
+ } else {
+ gain *= 1.0 + (0.1 + 0.05 * (pty - 1));
+ }
+ } else {
+ gain *= 1.1;
+ }
+ }
+ Premium_Bonus_EXP = 0;
+ if (Integer.valueOf(Start.ConfigValuesMap.get((Object) "雇佣经验加成开关")) > 0) {
+ final boolean 雇佣 = World.hasMerchant(this.getAccountID());
+ if (雇佣) {
+ Premium_Bonus_EXP = (int) (gain / 100.0 * Integer.valueOf(Start.ConfigValuesMap.get((Object) "雇佣经验加成比例")));
+ }
+ }
+ long total = gain + Class_Bonus_EXP + Equipment_Bonus_EXP + Premium_Bonus_EXP + wedding_EXP;
+ int partyinc = 0;
+ final long prevexp = this.getExp();
+ if (pty > 1) {
+ partyinc = (int) (gain / 20.0 * (float) (pty + 1));
+ if (Integer.valueOf(Start.ConfigValuesMap.get((Object) "特殊组队经验加成")) > 0) {
+ boolean 判定 = false;
+ int 比例 = 0;
+ for (final MaplePartyCharacter z : this.getParty().getMembers()) {
+ final MapleCharacter m = this.getMap().getCharacterById(z.getId());
+ if (m != null) {
+ for (int a = 0; a < Start.特殊组队经验加成表.size(); ++a) {
+ if (m.getJob() == Integer.parseInt(Start.特殊组队经验加成表.get(a))) {
+ 判定 = true;
+ }
+ }
+ }
+ }
+ if (判定) {
+ 比例 = Integer.valueOf(Start.ConfigValuesMap.get((Object) "修正组队经验加成"));
+ } else {
+ 比例 = Integer.valueOf(Start.ConfigValuesMap.get((Object) "原始组队经验加成"));
+ }
+ partyinc = (int) (gain / 100.0 * 比例 * pty);
+ }
+ total += partyinc;
+ }
+ if (gain > 0 && total < gain) {
+ total = Integer.MAX_VALUE;
+ }
+ if (total > 0) {
+ this.stats.checkEquipLevels(this, total);
+ }
+ final int maxLevel = (int) Integer.valueOf(Start.ConfigValuesMap.get((Object) "角色最大等级"));
+ int needed = GameConstants.getExpNeededForLevel(this.level);
+ if (GameConstants.isKOC(this.job) && this.level >= ServerConfig.kocmaxlevel) {
+ if (this.exp + total > needed) {
+ this.setExp(needed);
+ } else {
+ this.exp += total;
+ }
+ } else if (this.level >= maxLevel) {
+ this.setExp(0);
+ } else {
+ boolean leveled = false;
+ if (this.exp + total >= needed || this.exp >= needed) {
+ final boolean levelUpTimesLimit = Integer.valueOf(Start.ConfigValuesMap.get((Object) "等级连升开关")) > 0;
+ final int 等级连升多少级之前都有效果 = (int) Integer.valueOf(Start.ConfigValuesMap.get((Object) "等级范围"));
+ this.exp += total;
+ long oexp = (long) this.exp;
+ short 等级 = this.level;
+ while (oexp >= needed) {
+ this.levelUp();
+ leveled = true;
+ oexp -= needed;
+ ++等级;
+ needed = GameConstants.getExpNeededForLevel(等级);
+ if (Integer.valueOf(Start.ConfigValuesMap.get((Object) "世界等级开关")) > 0 && 等级 >= Start.世界等级) {
+ break;
+ }
+ if (!levelUpTimesLimit || 等级 >= 等级连升多少级之前都有效果 || oexp < needed || 等级 >= maxLevel) {
+ break;
+ }
+ }
+ if (this.level >= maxLevel) {
+ this.setExp(0);
+ } else {
+ needed = GameConstants.getExpNeededForLevel(this.level);
+ if (this.exp >= needed) {
+ this.setExp(needed);
+ }
+ }
+ } else {
+ this.exp += total;
+ }
+ if (total > 0) {
+ this.familyRep(prevexp, needed, leveled);
+ }
+ }
+ if (gain != 0) {
+ if (this.exp < 0) {
+ if (gain > 0) {
+ this.setExp(GameConstants.getExpNeededForLevel((int) this.level));
+ } else if (gain < 0) {
+ this.setExp(0);
+ }
+ }
+ this.updateSingleStat(MapleStat.EXP, this.getExp());
+ if (show) {
+ this.client.sendPacket(MaplePacketCreator.GainEXP_Monster(gain, white, wedding_EXP, partyinc, Class_Bonus_EXP, Equipment_Bonus_EXP, Premium_Bonus_EXP, 活动经验));
+ }
+ }
+ }
+
+ public void reloadC() {
+ this.client.getPlayer().getClient().sendPacket(MaplePacketCreator.getCharInfo(this.client.getPlayer()));
+ this.client.getPlayer().getMap().removePlayer(this.client.getPlayer());
+ this.client.getPlayer().getMap().addPlayer(this.client.getPlayer());
+ }
+
+ public MapleClient getPlayers() {
+ return this.c;
+ }
+
+ public void forceReAddItem_NoUpdate(final IItem item, final MapleInventoryType type) {
+ this.getInventory(type).removeSlot(item.getPosition());
+ this.getInventory(type).addFromDB(item);
+ }
+
+ public void forceReAddItem(final IItem item, final MapleInventoryType type) {
+ this.forceReAddItem_NoUpdate(item, type);
+ if (type != MapleInventoryType.UNDEFINED) {
+ client.sendPacket(MaplePacketCreator.modifyInventory(false, new ModifyInventory(ModifyInventory.Types.UPDATE, item)));
+ }
+ }
+
+ public void forceReAddItem_NoUpdate1(Item item, MapleInventoryType type) {
+ getInventory(type).removeSlot(item.getPosition());
+ getInventory(type).addFromDB(item);
+ }
+
+ public void forceReAddItem1(Item item, MapleInventoryType type) {
+ forceReAddItem_NoUpdate1(item, type);
+ type = MapleInventoryType.EQUIP;
+ if (type != MapleInventoryType.UNDEFINED) {
+ client.sendPacket(MTSCSPacket.addInventorySlot(type, item, false));
+ }
+ }
+
+ public void forceReAddItem_Flag(final IItem item, final MapleInventoryType type) {
+ this.forceReAddItem_NoUpdate(item, type);
+ if (type != MapleInventoryType.UNDEFINED) {
+ client.sendPacket(MaplePacketCreator.modifyInventory(false, new ModifyInventory(ModifyInventory.Types.ADD, item)));
+ }
+ }
+
+ public void silentPartyUpdate() {
+ if (this.party != null) {
+ Party.updateParty(this.party.getId(), PartyOperation.SILENT_UPDATE, new MaplePartyCharacter(this));
+ }
+ }
+
+ public boolean isGM() {
+ return this.gmLevel > 0;
+ }
+
+ public boolean isAdmin() {
+ return this.gmLevel >= 5;
+ }
+
+ public int getGMLevel() {
+ return this.gmLevel;
+ }
+
+ public boolean isPlayer() {
+ return this.gmLevel == 0;
+ }
+
+ public boolean hasGmLevel(final int level) {
+ return this.gmLevel >= level;
+ }
+
+ public void setGmLevelHM(final byte level) {
+ this.gmLevel = level;
+ }
+
+ public final MapleInventory getInventory(final MapleInventoryType type) {
+ return this.inventory[type.ordinal()];
+ }
+
+ public final MapleInventory[] getInventorys() {
+ return this.inventory;
+ }
+
+ public final void expirationTask() {
+ this.expirationTask(false);
+ }
+
+ public final void expirationTask(final boolean pending) {
+ this.expirationTask(false, pending);
+ }
+
+ public final void expirationTask(final boolean packet, final boolean pending) {
+ if (pending) {
+ if (this.pendingExpiration != null) {
+ for (final Integer z : this.pendingExpiration) {
+ this.client.sendPacket(MTSCSPacket.itemExpired(z.intValue()));
+ }
+ }
+ this.pendingExpiration = null;
+ if (this.pendingSkills != null) {
+ for (final Integer z : this.pendingSkills) {
+ this.client.sendPacket(MaplePacketCreator.updateSkill(z.intValue(), 0, 0, -1L));
+ this.client.sendPacket(MaplePacketCreator.serverNotice(5, "[" + SkillFactory.getSkillName(z.intValue()) + "] 技能已经过期,系统自动从技能栏位移除。"));
+ }
+ }
+ this.pendingSkills = null;
+ return;
+ }
+ final List ret = (List) new ArrayList();
+ final long currenttime = System.currentTimeMillis();
+ final List> toberemove = (List>) new ArrayList();
+ final List tobeunlock = (List) new ArrayList();
+ for (final MapleInventoryType inv : MapleInventoryType.values()) {
+ for (final IItem item : this.getInventory(inv)) {
+ final long expiration = item.getExpiration();
+ if (expiration != -1L && !GameConstants.isPet(item.getItemId()) && currenttime > expiration) {
+ if (ItemFlag.LOCK.check((int) item.getFlag())) {
+ tobeunlock.add(item);
+ } else {
+ if (currenttime <= expiration) {
+ continue;
+ }
+ toberemove.add(new Pair(inv, item));
+ }
+ } else {
+ if (item.getItemId() != 5000054 || item.getPet() == null || item.getPet().getSecondsLeft() > 0) {
+ continue;
+ }
+ toberemove.add(new Pair(inv, item));
+ }
+ }
+ }
+ for (final Pair itemz : toberemove) {
+ final IItem item2 = (IItem) itemz.getRight();
+ ret.add(Integer.valueOf(item2.getItemId()));
+ if (packet) {
+ this.getInventory((MapleInventoryType) itemz.getLeft()).removeItem(item2.getPosition(), item2.getQuantity(), false, this);
+ } else {
+ this.getInventory((MapleInventoryType) itemz.getLeft()).removeItem(item2.getPosition(), item2.getQuantity(), false);
+ }
+ }
+ for (final IItem itemz2 : tobeunlock) {
+ itemz2.setExpiration(-1L);
+ itemz2.setFlag((byte) (itemz2.getFlag() - ItemFlag.LOCK.getValue()));
+ }
+ this.pendingExpiration = ret;
+ final List skilz = (List) new ArrayList();
+ final List toberem = (List) new ArrayList();
+ for (final Entry skil : this.skills.entrySet()) {
+ if (((SkillEntry) skil.getValue()).expiration != -1L && currenttime > ((SkillEntry) skil.getValue()).expiration) {
+ toberem.add(skil.getKey());
+ }
+ }
+ for (final ISkill skil2 : toberem) {
+ skilz.add(Integer.valueOf(skil2.getId()));
+ this.skills.remove(skil2);
+ }
+ this.pendingSkills = skilz;
+ }
+
+ public MapleShop getShop() {
+ return this.shop;
+ }
+
+ public void setShop(final MapleShop shop) {
+ this.shop = shop;
+ }
+
+ public int getMeso() {
+ return this.meso;
+ }
+
+ public final int[] getSavedLocations() {
+ return this.savedLocations;
+ }
+
+ public int getSavedLocation(final SavedLocationType type) {
+ return this.savedLocations[type.getValue()];
+ }
+
+ public void saveLocation(final SavedLocationType type) {
+ this.savedLocations[type.getValue()] = this.getMapId();
+ }
+
+ public void saveLocation(final SavedLocationType type, final int mapz) {
+ this.savedLocations[type.getValue()] = mapz;
+ }
+
+ public void clearSavedLocation(final SavedLocationType type) {
+ this.savedLocations[type.getValue()] = -1;
+ }
+
+ public void gainMeso(final int gain, final boolean show) {
+ this.gainMeso(gain, show, false, false);
+ }
+
+ public void gainMeso(final int gain, final boolean show, final boolean enableActions) {
+ this.gainMeso(gain, show, enableActions, false);
+ }
+
+ public void gainMeso(final int gain, final boolean show, final boolean enableActions, final boolean inChat) {
+ if (this.meso + gain < 0) {
+ this.client.sendPacket(MaplePacketCreator.enableActions());
+ return;
+ }
+ this.meso += gain;
+ this.updateSingleStat(MapleStat.MESO, this.meso, enableActions);
+ if (show) {
+ this.client.sendPacket(MaplePacketCreator.showMesoGain(gain, inChat));
+ }
+
+ if (gain > 0) {
+ List integers = Start.ConfigItemJson.get("jb");
+ if (integers == null) return;
+ if (this.meso > integers.get(0)) {
+ int i = this.meso / integers.get(0);
+ this.gainItem(integers.get(1), i);
+ gainMeso(-integers.get(0) * i, false, true, true);
+ }
+ }
+
+
+ }
+
+ public void controlMonster(final MapleMonster monster, final boolean aggro) {
+ if (this.clone) {
+ return;
+ }
+ if (this.吸怪状态) {
+ monster.setController(null);
+ } else {
+ monster.setController(this);
+ this.controlled.add(monster);
+ this.client.sendPacket(MobPacket.controlMonster(monster, false, aggro));
+ }
+ monster.sendStatus(this.client);
+ }
+
+ public void stopControllingMonster(final MapleMonster monster) {
+ if (this.clone) {
+ return;
+ }
+ if (monster != null && this.controlled.contains(monster)) {
+ this.controlled.remove(monster);
+ }
+ }
+
+ public void checkMonsterAggro(final MapleMonster monster) {
+ if (this.clone || monster == null) {
+ return;
+ }
+ if (monster.getController() == this) {
+ monster.setControllerHasAggro(true);
+ } else {
+ monster.switchController(this, true);
+ }
+ }
+
+ public Set getControlled() {
+ return this.controlled;
+ }
+
+ public int getControlledSize() {
+ return this.controlled.size();
+ }
+
+ public int getAccountID() {
+ return this.accountid;
+ }
+
+ public void mobKilled(final int id, final int skillID) {
+ try {
+ for (final MapleQuestStatus q : this.quests.values()) {
+ if (q.getStatus() == 1) {
+ if (!q.hasMobKills()) {
+ continue;
+ }
+ if (!q.mobKilled(id, skillID)) {
+ continue;
+ }
+ this.client.sendPacket(MaplePacketCreator.updateQuestMobKills(q));
+ if (!q.getQuest().canComplete(this, null)) {
+ continue;
+ }
+ this.client.sendPacket(MaplePacketCreator.getShowQuestCompletion(q.getQuest().getId()));
+ }
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/杀死怪物计次异常.txt", (Throwable) ex);
+ }
+ }
+
+ public final List getStartedQuests() {
+ final List ret = (List) new LinkedList();
+ for (final MapleQuestStatus q : this.quests.values()) {
+ if (q.getStatus() == 1 && !q.isCustom()) {
+ ret.add(q);
+ }
+ }
+ return ret;
+ }
+
+ public final List getCompletedQuests() {
+ final List ret = (List) new LinkedList();
+ for (final MapleQuestStatus q : this.quests.values()) {
+ if (q.getStatus() == 2 && !q.isCustom()) {
+ ret.add(q);
+ }
+ }
+ return ret;
+ }
+
+ public Map getSkills() {
+ return Collections.unmodifiableMap(this.skills);
+ }
+
+ public byte getSkillLevel(final ISkill skill) {
+ final SkillEntry ret = (SkillEntry) this.skills.get(skill);
+ if (ret == null || ret.skillevel <= 0) {
+ return 0;
+ }
+ return (byte) Math.min((int) skill.getMaxLevel(), ret.skillevel + (skill.isBeginnerSkill() ? 0 : this.stats.incAllskill));
+ }
+
+ public byte getMasterLevel(final int skill) {
+ return this.getMasterLevel(SkillFactory.getSkill(skill));
+ }
+
+ public byte getMasterLevel(final ISkill skill) {
+ final SkillEntry ret = (SkillEntry) this.skills.get(skill);
+ if (ret == null) {
+ return 0;
+ }
+ return ret.masterlevel;
+ }
+
+ public void levelUp() {
+ if (this.getLevel() >= this.maxLevel) {
+ return;
+ }
+ if (this.getLevel() >= this.maxLevel1) {
+ return;
+ }
+ if (((Integer) Start.ConfigValuesMap.get("世界等级开关")).intValue() > 0 && this.getLevel() >= Start.世界等级) {
+ return;
+ }
+ if (this.getLevel() >= 取限制等级()) {
+ return;
+ }
+ final MapleCharacter player = this.client.getPlayer();
+ final boolean 转生后升级是否加血量 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生后升级是否加血量"));
+ final boolean 转生后升级是否加蓝量 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生后升级是否加蓝量"));
+ final boolean 转生后升级是否加属性 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生后升级是否加属性"));
+ final int 转生后一转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后一转升级给属性点"));
+ final int 转生后二转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后二转升级给属性点"));
+ final int 转生后三转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后三转升级给属性点"));
+ final int 转生后四转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后四转升级给属性点"));
+ final int 转生后五转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后五转升级给属性点"));
+ final int 转生后六转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后六转升级给属性点"));
+ final int 转生后七转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后七转升级给属性点"));
+ final int 转生后八转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后八转升级给属性点"));
+ final int 转生后九转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后九转升级给属性点"));
+ final int 转生后十转升级给属性点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后十转升级给属性点"));
+ int 转生后升级给属性点 = 5;
+ final boolean 转生后升级是否加技能点 = Boolean.parseBoolean(ServerProperties.getProperty("pp.转生后升级是否加技能点"));
+ final int 转生后一转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后一转升级给技能点"));
+ final int 转生后二转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后二转升级给技能点"));
+ final int 转生后三转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后三转升级给技能点"));
+ final int 转生后四转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后四转升级给技能点"));
+ final int 转生后五转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后五转升级给技能点"));
+ final int 转生后六转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后六转升级给技能点"));
+ final int 转生后七转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后七转升级给技能点"));
+ final int 转生后八转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后八转升级给技能点"));
+ final int 转生后九转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后九转升级给技能点"));
+ final int 转生后十转升级给技能点 = Integer.parseInt(ServerProperties.getProperty("pp.转生后十转升级给技能点"));
+ int 转生后升级给技能点 = 3;
+ switch (player.getOneTimeLog("转生次数")) {
+ case 0: {
+ 转生后升级给属性点 = 5;
+ 转生后升级给技能点 = 3;
+ break;
+ }
+ case 1: {
+ 转生后升级给属性点 = 转生后一转升级给属性点;
+ 转生后升级给技能点 = 转生后一转升级给属性点;
+ break;
+ }
+ case 2: {
+ 转生后升级给属性点 = 转生后二转升级给属性点;
+ 转生后升级给技能点 = 转生后二转升级给技能点;
+ break;
+ }
+ case 3: {
+ 转生后升级给属性点 = 转生后三转升级给属性点;
+ 转生后升级给技能点 = 转生后三转升级给技能点;
+ break;
+ }
+ case 4: {
+ 转生后升级给属性点 = 转生后四转升级给属性点;
+ 转生后升级给技能点 = 转生后四转升级给技能点;
+ break;
+ }
+ case 5: {
+ 转生后升级给属性点 = 转生后五转升级给属性点;
+ 转生后升级给技能点 = 转生后五转升级给技能点;
+ break;
+ }
+ case 6: {
+ 转生后升级给属性点 = 转生后六转升级给属性点;
+ 转生后升级给技能点 = 转生后六转升级给技能点;
+ break;
+ }
+ case 7: {
+ 转生后升级给属性点 = 转生后七转升级给属性点;
+ 转生后升级给技能点 = 转生后七转升级给技能点;
+ break;
+ }
+ case 8: {
+ 转生后升级给属性点 = 转生后八转升级给属性点;
+ 转生后升级给技能点 = 转生后八转升级给技能点;
+ break;
+ }
+ case 9: {
+ 转生后升级给属性点 = 转生后九转升级给属性点;
+ 转生后升级给技能点 = 转生后九转升级给技能点;
+ break;
+ }
+ case 10: {
+ 转生后升级给属性点 = 转生后十转升级给属性点;
+ 转生后升级给技能点 = 转生后十转升级给技能点;
+ break;
+ }
+ default: {
+ 转生后升级给属性点 = 5;
+ 转生后升级给技能点 = 3;
+ break;
+ }
+ }
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加属性) {
+ this.remainingAp += (short) 转生后升级给属性点;
+ }
+ } else if (GameConstants.isKOC((int) this.job)) {
+ if (this.level <= 70) {
+ this.remainingAp += 6;
+ } else {
+ this.remainingAp += 5;
+ }
+ } else {
+ this.remainingAp += 5;
+ }
+ int maxhp = this.stats.getMaxHp();
+ int maxmp = this.stats.getMaxMp();
+ if (this.job == 0 || this.job == 1000 || this.job == 2000) {
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加血量) {
+ maxhp += Randomizer.rand(12, 16);
+ }
+ if (转生后升级是否加蓝量) {
+ maxmp += Randomizer.rand(10, 12);
+ }
+ } else {
+ maxhp += Randomizer.rand(12, 16);
+ maxmp += Randomizer.rand(10, 12);
+ }
+ } else if (this.job >= 100 && this.job <= 132) {
+ final ISkill improvingMaxHP = SkillFactory.getSkill(1000001);
+ final int slevel = this.getSkillLevel(improvingMaxHP);
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加血量) {
+ if (slevel > 0) {
+ maxhp += improvingMaxHP.getEffect(slevel).getX();
+ }
+ maxhp += Randomizer.rand(24, 28);
+ }
+ if (转生后升级是否加蓝量) {
+ maxmp += Randomizer.rand(4, 6);
+ }
+ } else {
+ if (slevel > 0) {
+ maxhp += improvingMaxHP.getEffect(slevel).getX();
+ }
+ maxhp += Randomizer.rand(24, 28);
+ maxmp += Randomizer.rand(4, 6);
+ }
+ } else if (this.job >= 200 && this.job <= 232) {
+ final ISkill improvingMaxMP = SkillFactory.getSkill(2000001);
+ final int slevel = this.getSkillLevel(improvingMaxMP);
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加蓝量) {
+ if (slevel > 0) {
+ maxmp += improvingMaxMP.getEffect(slevel).getX() * 2;
+ }
+ maxmp += Randomizer.rand(22, 24);
+ }
+ if (转生后升级是否加血量) {
+ maxhp += Randomizer.rand(10, 14);
+ }
+ } else {
+ if (slevel > 0) {
+ maxmp += improvingMaxMP.getEffect(slevel).getX() * 2;
+ }
+ maxmp += Randomizer.rand(22, 24);
+ maxhp += Randomizer.rand(10, 14);
+ }
+ } else if ((this.job >= 300 && this.job <= 322) || (this.job >= 400 && this.job <= 422) || (this.job >= 1300 && this.job <= 1311) || (this.job >= 1400 && this.job <= 1411)) {
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加血量) {
+ maxhp += Randomizer.rand(20, 24);
+ }
+ if (转生后升级是否加蓝量) {
+ maxmp += Randomizer.rand(14, 16);
+ }
+ } else {
+ maxhp += Randomizer.rand(20, 24);
+ maxmp += Randomizer.rand(14, 16);
+ }
+ } else if (this.job >= 500 && this.job <= 522) {
+ final ISkill improvingMaxHP = SkillFactory.getSkill(5100000);
+ final int slevel = this.getSkillLevel(improvingMaxHP);
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加血量) {
+ if (slevel > 0) {
+ maxhp += improvingMaxHP.getEffect(slevel).getX();
+ }
+ maxhp += Randomizer.rand(22, 26);
+ }
+ if (转生后升级是否加蓝量) {
+ maxmp += Randomizer.rand(18, 22);
+ }
+ } else {
+ if (slevel > 0) {
+ maxhp += improvingMaxHP.getEffect(slevel).getX();
+ }
+ maxhp += Randomizer.rand(22, 26);
+ maxmp += Randomizer.rand(18, 22);
+ }
+ } else if (this.job >= 1100 && this.job <= 1111) {
+ final ISkill improvingMaxHP = SkillFactory.getSkill(11000000);
+ final int slevel = this.getSkillLevel(improvingMaxHP);
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加血量) {
+ if (slevel > 0) {
+ maxhp += improvingMaxHP.getEffect(slevel).getX();
+ }
+ maxhp += Randomizer.rand(24, 28);
+ }
+ if (转生后升级是否加蓝量) {
+ maxmp += Randomizer.rand(4, 6);
+ }
+ } else {
+ if (slevel > 0) {
+ maxhp += improvingMaxHP.getEffect(slevel).getX();
+ }
+ maxhp += Randomizer.rand(24, 28);
+ maxmp += Randomizer.rand(4, 6);
+ }
+ } else if (this.job >= 1200 && this.job <= 1212) {
+ final ISkill improvingMaxMP = SkillFactory.getSkill(12000000);
+ final int slevel = this.getSkillLevel(improvingMaxMP);
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加蓝量) {
+ if (slevel > 0) {
+ maxmp += improvingMaxMP.getEffect(slevel).getX() * 2;
+ }
+ maxmp += Randomizer.rand(22, 24);
+ }
+ if (转生后升级是否加血量) {
+ maxhp += Randomizer.rand(10, 14);
+ }
+ } else {
+ if (slevel > 0) {
+ maxmp += improvingMaxMP.getEffect(slevel).getX() * 2;
+ }
+ maxmp += Randomizer.rand(22, 24);
+ maxhp += Randomizer.rand(10, 14);
+ }
+ } else if (this.job >= 1500 && this.job <= 1512) {
+ final ISkill improvingMaxHP = SkillFactory.getSkill(15100000);
+ final int slevel = this.getSkillLevel(improvingMaxHP);
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加血量) {
+ if (slevel > 0) {
+ maxhp += improvingMaxHP.getEffect(slevel).getX();
+ }
+ maxhp += Randomizer.rand(22, 26);
+ }
+ if (转生后升级是否加蓝量) {
+ maxmp += Randomizer.rand(18, 22);
+ }
+ } else {
+ if (slevel > 0) {
+ maxhp += improvingMaxHP.getEffect(slevel).getX();
+ }
+ maxhp += Randomizer.rand(22, 26);
+ maxmp += Randomizer.rand(18, 22);
+ }
+ } else if (this.job >= 2100 && this.job <= 2112) {
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加血量) {
+ maxhp += Randomizer.rand(50, 52);
+ }
+ if (转生后升级是否加蓝量) {
+ maxmp += Randomizer.rand(4, 6);
+ }
+ } else {
+ maxhp += Randomizer.rand(50, 52);
+ maxmp += Randomizer.rand(4, 6);
+ }
+ } else if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加血量) {
+ maxhp += Randomizer.rand(50, 100);
+ }
+ if (转生后升级是否加蓝量) {
+ maxmp += Randomizer.rand(50, 100);
+ }
+ } else {
+ maxhp += Randomizer.rand(50, 100);
+ maxmp += Randomizer.rand(50, 100);
+ }
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加蓝量) {
+ maxmp += this.stats.getTotalInt() / 10;
+ }
+ } else {
+ maxmp += this.stats.getTotalInt() / 10;
+ }
+ this.exp -= GameConstants.getExpNeededForLevel((int) this.level);
+ if (this.exp < 0) {
+ this.exp = 0;
+ }
+ ++this.level;
+ maxhp = (short) Math.min(30000, Math.abs(maxhp));
+ maxmp = (short) Math.min(30000, Math.abs(maxmp));
+ final Map statup = new EnumMap(MapleStat.class);
+ statup.put(MapleStat.MAXHP, (long) maxhp);
+ statup.put(MapleStat.MAXMP, (long) maxmp);
+ statup.put(MapleStat.HP, (long) maxhp);
+ statup.put(MapleStat.MP, (long) maxmp);
+ statup.put(MapleStat.EXP, exp);
+ statup.put(MapleStat.LEVEL, (long) level);
+ if ((this.job != 0 && this.job != 1000 && this.job != 2000 && this.job != 2001 && this.job != 3000 && this.level > 9) || this.job == 200) {
+ if (player.getOneTimeLog("转生次数") > 0) {
+ if (转生后升级是否加技能点) {
+ final int[] remainingSp = this.remainingSp;
+ final int skillBook = GameConstants.getSkillBook((int) this.job);
+ remainingSp[skillBook] += 转生后升级给技能点;
+ this.client.sendPacket(MaplePacketCreator.updateSp(this, false));
+ }
+ } else {
+ final int[] remainingSp2 = this.remainingSp;
+ final int skillBook2 = GameConstants.getSkillBook((int) this.job);
+ remainingSp2[skillBook2] += 3;
+ this.client.sendPacket(MaplePacketCreator.updateSp(this, false));
+ }
+ } else if (this.level <= 10) {
+ this.stats.setStr((short) (this.stats.getStr() + this.remainingAp));
+ this.remainingAp = 0;
+ statup.put(MapleStat.STR, (long) stats.getStr());
+ }
+ statup.put(MapleStat.AVAILABLEAP, (long) remainingAp);
+ this.stats.setMaxHp((short) maxhp);
+ this.stats.setMaxMp((short) maxmp);
+ this.stats.setHp((int) (short) maxhp);
+ this.stats.setMp((int) (short) maxmp);
+ this.client.sendPacket(MaplePacketCreator.updatePlayerStats(statup, this));
+ this.map.broadcastMessage(this, MaplePacketCreator.showForeignEffect(this.getId(), 0), false);
+ this.stats.recalcLocalStats();
+ this.silentPartyUpdate();
+ this.guildUpdate();
+ this.familyUpdate();
+ this.DoLevelMsg();
+ if (this.level >= 20 && this.level <= 25 && !this.isGM()) {
+ this.DoLevelMap();
+ }
+ if ((this.job == 1000 || (this.job >= 1100 && this.job <= 1111) || (this.job >= 1200 && this.job <= 1212) || (this.job >= 1300 && this.job <= 1312) || (this.job >= 1400 && this.job <= 1412) || (this.job >= 1500 && this.job <= 1512)) && this.level == 120) {
+ Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(6, "[恭贺] 玩家" + this.getName() + " 皇家骑士团到达120级。"));
+ }
+ if (this.level == 200) {
+ Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(6, "[恭贺] 玩家" + this.getName() + " 到达200级。"));
+ }
+ if (this.level == 100 && this.getStLog() >= 1) {
+ final int stjfid = this.getStLogid(this.id);
+ if (this.getStjfLog(stjfid) >= 1) {
+ this.updateStjfLog(stjfid, this.getStjf(stjfid) + 1);
+ } else {
+ this.setStjfLog(stjfid, 1);
+ }
+ }
+ if (!this.isGM() && ((Integer) Start.ConfigValuesMap.get("玩家升级喇叭")).intValue() > 0) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("[升级公告]:");
+ sb.append(this.getName()).append("在地图 : " + this.map.getMapName()).append(",恭喜达到了").append((int) this.level).append("加油,扑街~!");
+ Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(2, sb.toString()));
+ if (((Integer) Start.ConfigValuesMap.get("升级群消息通知")).intValue() > 0) {
+ RobotSocket.robbatSpeak(sb.toString());
+ }
+ }
+ FileoutputUtil.logToFile("logs/Data/升级日志.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getClient().getSession().remoteAddress().toString().split(":")[0] + " 账号: " + this.getClient().getAccountName() + " 玩家: " + this.getName() + " 升级到" + (int) this.level);
+ }
+
+ public void DoLevelMsg() {
+ if (this.level == 200 && !this.isGM()) {
+ final StringBuilder sb = new StringBuilder("[恭喜] ");
+ final IItem medal = this.getInventory(MapleInventoryType.EQUIPPED).getItem((short) (-21));
+ if (medal != null) {
+ sb.append("<");
+ sb.append(MapleItemInformationProvider.getInstance().getName(medal.getItemId()));
+ sb.append("> ");
+ }
+ sb.append(this.getName());
+ sb.append(" 达到了等级200级!请大家一起恭喜他!");
+ Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(6, sb.toString()));
+ }
+ if (GameConstants.isAran((int) this.job)) {
+ switch (this.level) {
+ case 30: {
+ this.client.sendPacket(MaplePacketCreator.startMapEffect("恭喜达到30等请回瑞恩岛二转吧。", 5120000, true));
+ break;
+ }
+ case 70: {
+ this.client.sendPacket(MaplePacketCreator.startMapEffect("恭喜达到70等请到冰原雪域长老公管三转吧。", 5120000, true));
+ break;
+ }
+ case 120: {
+ this.client.sendPacket(MaplePacketCreator.startMapEffect("恭喜达到120等请回神木村祭司森林四转吧。", 5120000, true));
+ break;
+ }
+ }
+ }
+ if (GameConstants.isKOC((int) this.job) && this.level == 70) {
+ this.client.sendPacket(MaplePacketCreator.startMapEffect("恭喜达到70等请回耶雷弗三转吧。", 5120000, true));
+ }
+ }
+
+ public void DoLevelMap() {
+ boolean warp = false;
+ int Return_Map = 0;
+ switch (this.getMapId()) {
+ case 910060000: {
+ warp = true;
+ Return_Map = 100010000;
+ break;
+ }
+ case 910120000: {
+ warp = true;
+ Return_Map = 100040000;
+ break;
+ }
+ case 910220000: {
+ warp = true;
+ Return_Map = 101040000;
+ break;
+ }
+ case 910310000: {
+ warp = true;
+ Return_Map = 103010000;
+ break;
+ }
+ case 912030000: {
+ warp = true;
+ Return_Map = 120010000;
+ break;
+ }
+ }
+ if (warp) {
+ final MapleMap warpMap = this.client.getChannelServer().getMapFactory().getMap(Return_Map);
+ if (warpMap != null) {
+ this.changeMap(warpMap, warpMap.getPortal(0));
+ this.dropMessage("由于你的等级超过20,已经不符合新手需求,将把您传出训练场。");
+ }
+ }
+ }
+
+ public void changeKeybinding(final int key, final byte type, final int action) {
+ if (type != 0) {
+ this.keylayout.Layout().put(Integer.valueOf(key), new Pair(Byte.valueOf(type), Integer.valueOf(action)));
+ } else {
+ this.keylayout.Layout().remove(Integer.valueOf(key));
+ }
+ }
+
+ public void GetSkillByKeybinding(int key, int type, int action, byte level) {
+ ISkill skill = SkillFactory.getSkill(action);
+ this.changeSkillLevel(skill, level, (byte) skill.getMaxLevel());
+ this.changeKeybinding(key, (byte) type, action);
+ this.getClient().sendPacket(MaplePacketCreator.getKeymap(this.getKeyLayout()));
+ }
+
+ public boolean changeKeybinding(String key_name, byte tybe, int action) {
+ int key;
+ switch (key_name.toUpperCase()) {
+ case "F1":
+ case "F2":
+ case "F3":
+ case "F4":
+ case "F5":
+ case "F6":
+ case "F7":
+ case "F8":
+ case "F9":
+ case "F10":
+ case "F11":
+ case "F12":
+ return true;
+ }
+
+ return false;
+ }
+
+ public void sendMacros() {
+ final int i = 0;
+ if (i < 5) {
+ this.client.sendPacket(MaplePacketCreator.getMacros(this.skillMacros));
+ }
+ }
+
+ public void updateMacros(final int position, final SkillMacro updateMacro) {
+ this.skillMacros[position] = updateMacro;
+ }
+
+ public final SkillMacro[] getMacros() {
+ return this.skillMacros;
+ }
+
+ public void tempban(final String reason, final Calendar duration, final int greason, final boolean bandIp) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ FileoutputUtil.logToFile("logs/Hack/Ban/MySql_input.txt", "\r\n[tempBan] " + FileoutputUtil.NowTime() + " IP: " + this.client.getSession().remoteAddress().toString().split(":")[0] + " MAC: " + this.getClient().getMacs() + " 理由: " + reason, false, false);
+ PreparedStatement ps = con.prepareStatement("INSERT INTO ipbans (ip) VALUES (?)");
+ ps.setString(1, this.client.getSession().remoteAddress().toString().split(":")[0]);
+ ps.executeUpdate();
+ ps.close();
+ ps = con.prepareStatement("UPDATE accounts SET tempban = ?, banreason = ?, greason = ? WHERE id = ?");
+ final Timestamp TS = new Timestamp(duration.getTimeInMillis());
+ ps.setTimestamp(1, TS);
+ ps.setString(2, reason);
+ ps.setInt(3, greason);
+ ps.setInt(4, this.accountid);
+ ps.execute();
+ ps.close();
+ con.close();
+ this.client.disconnect(true, false);
+ } catch (SQLException ex) {
+ System.err.println("Error while tempbanning" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+
+ public static boolean ban(final String ip, final String id, final String reason, final boolean accountId, final int gmlevel, final boolean hellban) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ if (!isVpn(ip) && id.matches("/[0-9]{1,3}\\..*")) {
+ FileoutputUtil.logToFile("logs/Hack/Ban/MySql_input.txt", "\r\n[Ban-1] " + FileoutputUtil.NowTime() + " IP: " + ip + " 理由: " + reason, false, false);
+ final PreparedStatement ps = con.prepareStatement("INSERT INTO ipbans (ip) VALUES (?)");
+ ps.setString(1, id);
+ ps.executeUpdate();
+ ps.close();
+ return true;
+ }
+ PreparedStatement ps;
+ if (accountId) {
+ ps = con.prepareStatement("SELECT id FROM accounts WHERE name = ?");
+ } else {
+ ps = con.prepareStatement("SELECT accountid FROM characters WHERE name = ?");
+ }
+ boolean ret = false;
+ ps.setString(1, id);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ final int z = rs.getInt(1);
+ try (final PreparedStatement psb = con.prepareStatement("UPDATE accounts SET banned = 1, banreason = ? WHERE id = ? AND gm < ?")) {
+ psb.setString(1, reason);
+ psb.setInt(2, z);
+ psb.setInt(3, gmlevel);
+ psb.execute();
+ psb.close();
+ }
+ if (gmlevel > 100) {
+ try (final PreparedStatement psa = con.prepareStatement("SELECT * FROM accounts WHERE id = ?")) {
+ psa.setInt(1, z);
+ try (final ResultSet rsa = psa.executeQuery()) {
+ if (rsa.next()) {
+ final String sessionIP = rsa.getString("sessionIP");
+ if (sessionIP != null && sessionIP.matches("/[0-9]{1,3}\\..*")) {
+ FileoutputUtil.logToFile("logs/Hack/Ban/MySql_input.txt", "\r\n[Ban-2] " + FileoutputUtil.NowTime() + " IP: " + ip + " 理由: " + reason, false, false);
+ }
+ final String macData = rsa.getString("macs");
+ if (macData != null) {
+ MapleClient.banMacs(macData);
+ }
+ if (hellban) {
+ try (final PreparedStatement pss = con.prepareStatement("UPDATE accounts SET banned = 1, banreason = ? WHERE email = ?" + ((sessionIP == null) ? "" : " OR SessionIP = ?"))) {
+ pss.setString(1, reason);
+ pss.setString(2, rsa.getString("email"));
+ if (sessionIP != null) {
+ pss.setString(3, sessionIP);
+ }
+ pss.execute();
+ pss.close();
+ }
+ }
+ }
+ rsa.close();
+ }
+ psa.close();
+ }
+ }
+ ret = true;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret;
+ } catch (SQLException ex) {
+ System.err.println("Error while banning" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ return false;
+ }
+ }
+
+ public final boolean ban(final String reason, final boolean banIP, final boolean autoban, final boolean hellban) {
+ if (this.lastmonthfameids == null) {
+ throw new RuntimeException("Trying to ban a non-loaded character (testhack)");
+ }
+ final String ip = this.client.getSessionIPAddress();
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("UPDATE accounts SET banned = ?, banreason = ? WHERE id = ?");
+ ps.setInt(1, autoban ? 2 : 1);
+ ps.setString(2, reason);
+ ps.setInt(3, this.accountid);
+ ps.execute();
+ ps.close();
+ if (!isVpn(ip)) {
+ FileoutputUtil.logToFile("logs/Hack/Ban/MySql_input.txt", "\r\n" + FileoutputUtil.NowTime() + " IP: " + ip + " MAC: " + this.getClient().getMacs() + " 理由: " + reason, false, false);
+ ps = con.prepareStatement("INSERT INTO ipbans (ip) VALUES (?)");
+ ps.setString(1, ip);
+ ps.executeUpdate();
+ ps.close();
+ try {
+ for (final ChannelServer cs : ChannelServer.getAllInstances()) {
+ for (final MapleCharacter chr : cs.getPlayerStorage().getAllCharactersThreadSafe()) {
+ if (chr.getClient().getSessionIPAddress().equals(this.client.getSessionIPAddress()) && !chr.getClient().isGm()) {
+ chr.getClient().disconnect(true, false);
+ chr.getClient().getSession().close();
+ }
+ }
+ }
+ } catch (Exception ex3) {
+ }
+ }
+ this.client.banMacs();
+ if (hellban) {
+ try (final PreparedStatement psa = con.prepareStatement("SELECT * FROM accounts WHERE id = ?")) {
+ psa.setInt(1, this.accountid);
+ try (final ResultSet rsa = psa.executeQuery()) {
+ if (rsa.next()) {
+ try (final PreparedStatement pss = con.prepareStatement("UPDATE accounts SET banned = ?, banreason = ? WHERE email = ? OR SessionIP = ?")) {
+ pss.setInt(1, autoban ? 2 : 1);
+ pss.setString(2, reason);
+ pss.setString(3, rsa.getString("email"));
+ pss.setString(4, ip);
+ pss.execute();
+ pss.close();
+ }
+ }
+ rsa.close();
+ }
+ psa.close();
+ }
+ }
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("Error while banning" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ return false;
+ }
+ try {
+ this.client.disconnect(true, false);
+ } catch (Exception ex2) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ return true;
+ }
+
+ public boolean OfflineBanByName(final String name, final String reason) {
+ int id = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = null;
+ ps = con.prepareStatement("select id from characters where name = ?");
+ ps.setString(1, name);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ id = rs.getInt("id");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return id != 0 && this.OfflineBanById(id, reason);
+ }
+
+ public boolean OfflineBanById(final int id, final String reason) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final int z = id;
+ int acid = 0;
+ String ip = "";
+ String mac = "";
+ ResultSet rs = stmt.executeQuery("select accountid from characters where id = " + id);
+ while (rs.next()) {
+ acid = rs.getInt("accountid");
+ }
+ if (acid == 0) {
+ return false;
+ }
+ try (final PreparedStatement psb = con.prepareStatement("UPDATE accounts SET banned = 1, banreason = ? WHERE id = ?")) {
+ psb.setString(1, reason);
+ psb.setInt(2, acid);
+ psb.execute();
+ psb.close();
+ }
+ rs = stmt.executeQuery("select SessionIP, macs from accounts where id = " + acid);
+ while (rs.next()) {
+ ip = rs.getString("SessionIP");
+ mac = rs.getString("macs");
+ }
+ if (!isVpn(ip)) {
+ FileoutputUtil.logToFile("logs/Hack/Ban/MySql_input.txt", "\r\n[offlineBan] " + FileoutputUtil.NowTime() + " IP: " + ip + " MAC: " + this.getClient().getMacs() + " 理由: " + reason, false, false);
+ final PreparedStatement ps = con.prepareStatement("INSERT INTO ipbans (ip) VALUES (?)");
+ ps.setString(1, ip);
+ ps.executeUpdate();
+ ps.close();
+ try {
+ for (final ChannelServer cs : ChannelServer.getAllInstances()) {
+ for (final MapleCharacter chr : cs.getPlayerStorage().getAllCharactersThreadSafe()) {
+ if (chr.getClient().getSessionIPAddress().equals(ip) && !chr.getClient().isGm()) {
+ chr.getClient().disconnect(true, false);
+ chr.getClient().getSession().close();
+ }
+ }
+ }
+ } catch (Exception ex2) {
+ }
+ }
+ final MapleClient client = this.client;
+ MapleClient.banMacs(mac);
+ rs.close();
+ stmt.close();
+ con.close();
+ return true;
+ } catch (Exception ex) {
+ System.err.println("封锁出现错误 " + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ return false;
+ }
+ }
+
+ @Override
+ public int getObjectId() {
+ return this.getId();
+ }
+
+ @Override
+ public void setObjectId(final int id) {
+ throw new UnsupportedOperationException();
+ }
+
+ public MapleStorage getStorage() {
+ return this.storage;
+ }
+
+ public void addVisibleMapObject(MapleMapObject mo) {
+ if (clone) {
+ return;
+ }
+ visibleMapObjectsLock.writeLock().lock();
+ try {
+ visibleMapObjects.add(mo);
+ } finally {
+ visibleMapObjectsLock.writeLock().unlock();
+ }
+ }
+
+ public void removeVisibleMapObject(MapleMapObject mo) {
+ if (clone) {
+ return;
+ }
+ visibleMapObjectsLock.writeLock().lock();
+ try {
+ visibleMapObjects.remove(mo);
+ } finally {
+ visibleMapObjectsLock.writeLock().unlock();
+ }
+ }
+
+ public boolean isMapObjectVisible(MapleMapObject mo) {
+ visibleMapObjectsLock.readLock().lock();
+ try {
+ return !clone && visibleMapObjects.contains(mo);
+ } finally {
+ visibleMapObjectsLock.readLock().unlock();
+ }
+ }
+
+ public Collection getAndWriteLockVisibleMapObjects() {
+ visibleMapObjectsLock.writeLock().lock();
+ return visibleMapObjects;
+ }
+
+ public void unlockWriteVisibleMapObjects() {
+ visibleMapObjectsLock.writeLock().unlock();
+ }
+
+ public boolean isAlive() {
+ return this.stats.getHp() > 0;
+ }
+
+ @Override
+ public void sendDestroyData(final MapleClient client) {
+ client.sendPacket(MaplePacketCreator.removePlayerFromMap(this.getObjectId()));
+ for (final WeakReference chr : this.clones) {
+ if (chr.get() != null) {
+ ((MapleCharacter) chr.get()).sendDestroyData(client);
+ }
+ }
+ }
+
+ @Override
+ public void sendSpawnData(final MapleClient client) {
+ if (client.getPlayer().allowedToTarget(this)) {
+ client.sendPacket(MaplePacketCreator.spawnPlayerMapobject(this));
+ if (this.getParty() != null && !this.isClone()) {
+ this.updatePartyMemberHP();
+ this.receivePartyMemberHP();
+ }
+ for (final MaplePet pet : this.getSummonedPets()) {
+ if (this.getId() != client.getPlayer().getId()) {
+ client.sendPacket(PetPacket.showPet(this, pet, false, false));
+ }
+ }
+ for (final WeakReference chr : this.clones) {
+ if (chr.get() != null) {
+ ((MapleCharacter) chr.get()).sendSpawnData(client);
+ }
+ }
+ if (this.summons != null) {
+ for (final MapleSummon summon : this.summons.values()) {
+ client.sendPacket(MaplePacketCreator.spawnSummon(summon, false));
+ }
+ }
+ if (this.followid > 0) {
+ client.sendPacket(MaplePacketCreator.followEffect(this.followinitiator ? this.id : this.followid, this.followinitiator ? this.followid : this.id, null));
+ }
+ }
+ }
+
+ public final void equipChanged() {
+ if (this.map == null) {
+ return;
+ }
+ this.map.broadcastMessage(this, MaplePacketCreator.updateCharLook(this), false);
+ this.stats.recalcLocalStats();
+ if (this.getMessenger() != null) {
+ Messenger.updateMessenger(this.getMessenger().getId(), this.getName(), this.client.getChannel());
+ }
+ this.saveToDB(false, false);
+ }
+
+ public final MaplePet getPet(final int index) {
+ byte count = 0;
+ for (final MaplePet pet : this.pets) {
+ if (pet.getSummoned()) {
+ if (count == index) {
+ return pet;
+ }
+ ++count;
+ }
+ }
+ return null;
+ }
+
+ public void addPet(final MaplePet pet) {
+ if (this.pets.contains(pet)) {
+ this.pets.remove(pet);
+ }
+ this.pets.add(pet);
+ }
+
+ public void removePet(final MaplePet pet) {
+ pet.setSummoned(0);
+ this.pets.remove(pet);
+ }
+
+ public final List getSummonedPets() {
+ final List ret = (List) new ArrayList();
+ for (int i = 0; i < 3; ++i) {
+ ret.add(null);
+ }
+ for (int i = 0; i < 3; ++i) {
+ for (final MaplePet pet : this.pets) {
+ if (pet != null && pet.getSummoned()) {
+ final int index = pet.getSummonedValue() - 1;
+ if (index == i) {
+ ret.remove(index);
+ ret.add(index, pet);
+ break;
+ }
+ continue;
+ }
+ }
+ }
+ final List nullArr = (List) new ArrayList();
+ nullArr.add(null);
+ ret.removeAll((Collection>) nullArr);
+ return ret;
+ }
+
+ public final MaplePet getSummonedPet(final int index) {
+ for (final MaplePet pet : this.getSummonedPets()) {
+ if (pet.getSummonedValue() - 1 == index) {
+ return pet;
+ }
+ }
+ return null;
+ }
+
+ public final void shiftPetsRight() {
+ final List petsz = this.getSummonedPets();
+ if (petsz.size() >= 3 || petsz.size() < 1) {
+ return;
+ }
+ final boolean[] indexBool = {false, false, false};
+ for (int i = 0; i < 3; ++i) {
+ for (final MaplePet p : petsz) {
+ if (p.getSummonedValue() == i + 1) {
+ indexBool[i] = true;
+ }
+ }
+ }
+ if (petsz.size() > 1) {
+ if (!indexBool[2]) {
+ ((MaplePet) petsz.get(0)).setSummoned(2);
+ ((MaplePet) petsz.get(1)).setSummoned(3);
+ } else if (!indexBool[1]) {
+ ((MaplePet) petsz.get(0)).setSummoned(2);
+ }
+ } else if (indexBool[0]) {
+ ((MaplePet) petsz.get(0)).setSummoned(2);
+ }
+ }
+
+ public final int getPetSlotNext() {
+ final List petsz = this.getSummonedPets();
+ int index = 0;
+ if (petsz.size() >= 3) {
+ this.unequipPet(this.getSummonedPet(0), false);
+ } else {
+ final boolean[] indexBool = {false, false, false};
+ for (int i = 0; i < 3; ++i) {
+ for (final MaplePet p : petsz) {
+ if (p.getSummonedValue() == i + 1) {
+ indexBool[i] = true;
+ break;
+ }
+ }
+ }
+ for (final boolean b : indexBool) {
+ if (!b) {
+ break;
+ }
+ ++index;
+ }
+ index = Math.min(index, 2);
+ for (final MaplePet p2 : petsz) {
+ if (p2.getSummonedValue() == index + 1) {
+ this.unequipPet(p2, false);
+ }
+ }
+ }
+ return index;
+ }
+
+ public final byte getPetIndex(final MaplePet petz) {
+ return (byte) Math.max(-1, petz.getSummonedValue() - 1);
+ }
+
+ public final byte getPetIndex(final int petId) {
+ for (final MaplePet pet : this.getSummonedPets()) {
+ if (pet.getUniqueId() == petId) {
+ return (byte) Math.max(-1, pet.getSummonedValue() - 1);
+ }
+ }
+ return -1;
+ }
+
+ public final List getPets() {
+ return this.pets;
+ }
+
+ public final void unequipAllPets() {
+ for (final MaplePet pet : this.getSummonedPets()) {
+ this.unequipPet(pet, false);
+ }
+ }
+
+ public void unequipPet(final MaplePet pet, final boolean hunger) {
+ if (pet.getSummoned()) {
+ pet.saveToDb();
+ final List summonedPets = this.getSummonedPets();
+ if (summonedPets.contains(pet)) {
+ summonedPets.remove(pet);
+ int i = 1;
+ for (final MaplePet p : summonedPets) {
+ if (p == null) {
+ continue;
+ }
+ p.setSummoned(i);
+ ++i;
+ }
+ }
+ if (this.map != null) {
+ this.map.broadcastMessage(this, PetPacket.showPet(this, pet, true, hunger), true);
+ }
+ pet.setSummoned(0);
+ this.client.sendPacket(PetPacket.petStatUpdate(this));
+ this.client.sendPacket(MaplePacketCreator.enableActions());
+ }
+ }
+
+ public final long getLastFameTime() {
+ return this.lastfametime;
+ }
+
+ public final List getFamedCharacters() {
+ return this.lastmonthfameids;
+ }
+
+ public FameStatus canGiveFame(final MapleCharacter from) {
+ if (this.lastfametime >= System.currentTimeMillis() - 86400000L) {
+ return FameStatus.NOT_TODAY;
+ }
+ if (from == null || this.lastmonthfameids == null || this.lastmonthfameids.contains(Integer.valueOf(from.getId()))) {
+ return FameStatus.NOT_THIS_MONTH;
+ }
+ return FameStatus.OK;
+ }
+
+ public void hasGivenFame(final MapleCharacter to) {
+ this.lastfametime = System.currentTimeMillis();
+ this.lastmonthfameids.add(Integer.valueOf(to.getId()));
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("INSERT INTO famelog (characterid, characterid_to) VALUES (?, ?)")) {
+ ps.setInt(1, this.getId());
+ ps.setInt(2, to.getId());
+ ps.execute();
+ } catch (SQLException e) {
+ System.err.println("ERROR writing famelog for char " + this.getName() + " to " + to.getName() + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public final MapleKeyLayout getKeyLayout() {
+ return this.keylayout;
+ }
+
+ public MapleParty getParty() {
+ return this.party;
+ }
+
+ public int getPartyId() {
+ return (this.party != null) ? this.party.getId() : -1;
+ }
+
+ public byte getWorld() {
+ return this.world;
+ }
+
+ public void setWorld(final byte world) {
+ this.world = world;
+ }
+
+ public void setParty(final MapleParty party) {
+ this.party = party;
+ }
+
+ public MapleTrade getTrade() {
+ return this.trade;
+ }
+
+ public void setTrade(final MapleTrade trade) {
+ this.trade = trade;
+ }
+
+ public EventInstanceManager getEventInstance() {
+ return this.eventInstance;
+ }
+
+ public void setEventInstance(final EventInstanceManager eventInstance) {
+ this.eventInstance = eventInstance;
+ }
+
+ public void addDoor(final MapleDoor door) {
+ this.doors.add(door);
+ }
+
+ public void clearDoors() {
+ this.doors.clear();
+ }
+
+ public List getDoors() {
+ return new ArrayList(this.doors);
+ }
+
+ public void setSmega() {
+ if (this.smega) {
+ this.smega = false;
+ this.dropMessage(5, "由于您关闭了显示广播,所以您看不见任何的广播,如果要打开请打@TSmega。");
+ } else {
+ this.smega = true;
+ this.dropMessage(5, "目前已经打开显示广播,若要再次关闭请打@TSmega。");
+ }
+ }
+
+ public boolean getSmega() {
+ return this.smega;
+ }
+
+ public void setGashponmega() {
+ if (this.gashponmega) {
+ this.gashponmega = false;
+ this.dropMessage(5, "由于您关闭了转蛋广播,所以您看不见任何的转蛋广播,如果要打开请打@Gashponmega。");
+ } else {
+ this.gashponmega = true;
+ this.dropMessage(5, "目前已经打开显示转蛋广播,若要再次关闭请打@Gashponmega。");
+ }
+ }
+
+ public boolean getGashponmega() {
+ return this.gashponmega;
+ }
+
+ public Map getSummons() {
+ return this.summons;
+ }
+
+ public int getChair() {
+ return this.chair;
+ }
+
+ public int getItemEffect() {
+ return this.itemEffect;
+ }
+
+ public void setChair(final int chair) {
+ this.chair = chair;
+ this.stats.relocHeal();
+ }
+
+ public void setItemEffect(final int itemEffect) {
+ this.itemEffect = itemEffect;
+ }
+
+ @Override
+ public MapleMapObjectType getType() {
+ return MapleMapObjectType.PLAYER;
+ }
+
+ public int getFamilyId() {
+ if (this.mfc == null) {
+ return 0;
+ }
+ return this.mfc.getFamilyId();
+ }
+
+ public int getSeniorId() {
+ if (this.mfc == null) {
+ return 0;
+ }
+ return this.mfc.getSeniorId();
+ }
+
+ public int getJunior1() {
+ if (this.mfc == null) {
+ return 0;
+ }
+ return this.mfc.getJunior1();
+ }
+
+ public int getJunior2() {
+ if (this.mfc == null) {
+ return 0;
+ }
+ return this.mfc.getJunior2();
+ }
+
+ public int getCurrentRep() {
+ return this.currentrep;
+ }
+
+ public int getTotalRep() {
+ return this.totalrep;
+ }
+
+ public void setCurrentRep(final int _rank) {
+ this.currentrep = _rank;
+ if (this.mfc != null) {
+ this.mfc.setCurrentRep(_rank);
+ }
+ }
+
+ public void setTotalRep(final int _rank) {
+ this.totalrep = _rank;
+ if (this.mfc != null) {
+ this.mfc.setTotalRep(_rank);
+ }
+ }
+
+ public int getGuildId() {
+ return this.guildid;
+ }
+
+ public byte getGuildRank() {
+ return this.guildrank;
+ }
+
+ public int getCombat() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinStat1(equip);
+ } else {
+ Num += this.RuinStat(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComStr() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinStr(equip) * 10;
+ } else {
+ Num += this.RuinStr(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComDex() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinDex(equip) * 10;
+ } else {
+ Num += this.RuinDex(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComInt() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinInt(equip) * 10;
+ } else {
+ Num += this.RuinInt(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComLuk() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinLuk(equip) * 10;
+ } else {
+ Num += this.RuinLuk(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComWatk() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinWatk(equip) * 50;
+ } else {
+ Num += this.RuinWatk(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComMatk() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinMatk(equip) * 10;
+ } else {
+ Num += this.RuinMatk(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComMdef() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinMdef(equip) * 10;
+ } else {
+ Num += this.RuinMdef(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComWdef() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinWdef(equip) * 10;
+ } else {
+ Num += this.RuinWdef(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComHp() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinHp(equip) * 10;
+ } else {
+ Num += this.RuinHp(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int getComMp() {
+ final short[] TemporaryGroup = {-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -15, -16, -17, -18, -19, -26, -27, -28, -29, -101, -102, -103, -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, -115, -116, -118, -119, -121, -127, -128};
+ int Num = 0;
+ for (short i = 0; i < TemporaryGroup.length; ++i) {
+ final IEquip equip = (IEquip) this.getInventory(MapleInventoryType.EQUIPPED).getItem(TemporaryGroup[i]);
+ if (equip != null) {
+ if (((Integer) Start.ConfigValuesMap.get("战力修正")).intValue() > 0) {
+ Num += this.RuinMp(equip) * 10;
+ } else {
+ Num += this.RuinMp(equip);
+ }
+ }
+ }
+ return Num;
+ }
+
+ public int RuinStat(final IEquip equip) {
+ return equip.getStr() + equip.getDex() + equip.getInt() + equip.getLuk() + equip.getWatk() + equip.getMatk() + equip.getMdef() + equip.getWdef() + equip.getUpgradeSlots() + equip.getLevel();
+ }
+
+ public int RuinStat1(final IEquip equip) {
+ return equip.getStr() * 10 + equip.getDex() * 10 + equip.getInt() * 10 + equip.getLuk() * 10 + equip.getWatk() * 50 + equip.getMatk() * 50 + equip.getMdef() + equip.getWdef();
+ }
+
+ public int RuinStr(final IEquip equip) {
+ return equip.getStr();
+ }
+
+ public int RuinDex(final IEquip equip) {
+ return equip.getDex();
+ }
+
+ public int RuinInt(final IEquip equip) {
+ return equip.getInt();
+ }
+
+ public int RuinLuk(final IEquip equip) {
+ return equip.getLuk();
+ }
+
+ public int RuinWatk(final IEquip equip) {
+ return equip.getWatk();
+ }
+
+ public int RuinMatk(final IEquip equip) {
+ return equip.getMatk();
+ }
+
+ public int RuinMdef(final IEquip equip) {
+ return equip.getMdef();
+ }
+
+ public int RuinWdef(final IEquip equip) {
+ return equip.getWdef();
+ }
+
+ public int RuinHp(final IEquip equip) {
+ return equip.getHp();
+ }
+
+ public int RuinMp(final IEquip equip) {
+ return equip.getMp();
+ }
+
+ public void setGuildId(final int _id) {
+ this.guildid = _id;
+ if (this.guildid > 0) {
+ if (this.mgc == null) {
+ this.mgc = new MapleGuildCharacter(this);
+ } else {
+ this.mgc.setGuildId(this.guildid);
+ }
+ } else {
+ this.mgc = null;
+ }
+ }
+
+ public void setGuildRank(final byte _rank) {
+ this.guildrank = _rank;
+ if (this.mgc != null) {
+ this.mgc.setGuildRank(_rank);
+ }
+ }
+
+ public MapleGuildCharacter getMGC() {
+ return this.mgc;
+ }
+
+ public void setAllianceRank(final byte rank) {
+ this.allianceRank = rank;
+ if (this.mgc != null) {
+ this.mgc.setAllianceRank(rank);
+ }
+ }
+
+ public byte getAllianceRank() {
+ return this.allianceRank;
+ }
+
+ public MapleGuild getGuild() {
+ if (this.getGuildId() <= 0) {
+ return null;
+ }
+ return Guild.getGuild(this.getGuildId());
+ }
+
+ public void guildUpdate() {
+ if (this.guildid <= 0) {
+ return;
+ }
+ this.mgc.setLevel(this.level);
+ this.mgc.setJobId((int) this.job);
+ Guild.memberLevelJobUpdate(this.mgc);
+ }
+
+ public void saveGuildStatus() {
+ MapleGuild.saveCharacterGuildInfo(this.guildid, this.guildrank, this.allianceRank, this.id);
+ }
+
+ public void familyUpdate() {
+ if (this.mfc == null) {
+ return;
+ }
+ Family.memberFamilyUpdate(this.mfc, this);
+ }
+
+ public void saveFamilyStatus() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE characters SET familyid = ?, seniorid = ?, junior1 = ?, junior2 = ? WHERE id = ?")) {
+ if (this.mfc == null) {
+ ps.setInt(1, 0);
+ ps.setInt(2, 0);
+ ps.setInt(3, 0);
+ ps.setInt(4, 0);
+ } else {
+ ps.setInt(1, this.mfc.getFamilyId());
+ ps.setInt(2, this.mfc.getSeniorId());
+ ps.setInt(3, this.mfc.getJunior1());
+ ps.setInt(4, this.mfc.getJunior2());
+ }
+ ps.setInt(5, this.id);
+ ps.execute();
+ } catch (SQLException se) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) se, "saveFamilyStatus");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) se);
+ }
+ }
+
+ public void modifyCSPoints(final int type, final int quantity) {
+ this.modifyCSPoints(type, quantity, false);
+ }
+
+ public void dropMessage(final String message) {
+ this.dropMessage(6, message);
+ }
+
+ public void modifyCSPoints(final int type, final int quantity, final boolean show) {
+ switch (type) {
+ case 1: {
+ final int Acash = this.getAcash();
+ if (Acash + quantity < 0) {
+ if (show) {
+ this.dropMessage(-1, "目前点券点数已满,无法获得更多的点券点数");
+ }
+ return;
+ }
+ this.setAcash(Acash + quantity);
+ break;
+ }
+ case 2: {
+ if (this.maplepoints + quantity < 0) {
+ if (show) {
+ this.dropMessage(-1, "目前抵用已满,无法获得更多的抵用.");
+ }
+ return;
+ }
+ this.maplepoints += quantity;
+ break;
+ }
+ case 3: {
+ final int Points = this.getPoints();
+ if (Points + quantity < 0) {
+ if (show) {
+ this.dropMessage(-1, "目前红利点数已满,无法获得更多的红利点数");
+ }
+ return;
+ }
+ this.setPoints(Points + quantity);
+ break;
+ }
+ case 5: {
+ this.gainwzcz(this.id, quantity);
+ this.dropMessage("您 " + ((quantity > 0) ? "获得 " : "失去") + quantity + "交易币");
+ break;
+ }
+ }
+ if (show && quantity != 0) {
+ this.dropMessage(-1, "您已经 " + ((quantity > 0) ? "获得 " : "花费 ") + quantity + ((type == 1) ? " 点券点数." : ((type == 2) ? " 抵用." : "红利点数")));
+ this.UpdateCash();
+ }
+ }
+
+ public void UpdateCash() {
+ this.getClient().sendPacket(MaplePacketCreator.showCharCash(this));
+ }
+
+ public int getCSPoints(final int type) {
+ switch (type) {
+ case 1: {
+ return this.getAcash();
+ }
+ case 2: {
+ return this.maplepoints;
+ }
+ case 3: {
+ return this.getPoints();
+ }
+ case 5: {
+ return this.getwzcz(this.id);
+ }
+ default: {
+ return 0;
+ }
+ }
+ }
+
+ public int getName2() {
+ return 1;
+ }
+
+ public int getOfflineAcash(final MapleCharacter victim) {
+ return this.getAcash(victim);
+ }
+
+ public final boolean hasEquipped(final int itemid) {
+ return this.inventory[MapleInventoryType.EQUIPPED.ordinal()].countById(itemid) >= 1;
+ }
+
+ public final List getEquList() {
+
+ return this.inventory[MapleInventoryType.EQUIPPED.ordinal()].equlist();
+ }
+
+ public int 判断物品数量(int itemid) {
+ MapleInventoryType type = GameConstants.getInventoryType(itemid);
+ int quantity = inventory[type.ordinal()].countById(itemid);
+ return quantity;
+ }
+
+ public final boolean haveItem(final int itemid, final int quantity, final boolean checkEquipped, final boolean greaterOrEquals) {
+ final MapleInventoryType type = GameConstants.getInventoryType(itemid);
+ int possesed = inventory[type.ordinal()].countById(itemid);
+ if (type == MapleInventoryType.EQUIP) {
+ possesed += inventory[MapleInventoryType.EQUIPPED.ordinal()].countById(itemid);
+ }
+ int sl = quantity;
+ if (quantity < 0) {
+ sl -= quantity;
+ sl += -quantity;
+ }
+ if (type == MapleInventoryType.EQUIP && checkEquipped) {
+ return possesed >= sl;
+ } else if (greaterOrEquals && 判断物品数量(itemid) >= sl) {
+ return possesed >= sl;
+ }
+ return false;
+ }
+ /*public final boolean haveItem(final int itemid, final int quantity, final boolean checkEquipped, final boolean greaterOrEquals) {
+ final MapleInventoryType type = GameConstants.getInventoryType(itemid);
+ int possesed = this.inventory[type.ordinal()].countById(itemid);
+ if (checkEquipped && type == MapleInventoryType.EQUIP) {
+ possesed += this.inventory[MapleInventoryType.EQUIPPED.ordinal()].countById(itemid);
+ }
+ if (greaterOrEquals) {
+ return possesed >= quantity;
+ }
+ return possesed == quantity;
+ }*/
+
+ public final boolean haveItem(final int itemid, final int quantity) {
+ return this.haveItem(itemid, quantity, true, true);
+ }
+
+ public final boolean haveItem(final int itemid) {
+ return this.haveItem(itemid, 1, true, true);
+ }
+
+ public final short haveItemPos(final int itemid) {
+ final MapleInventoryType type = GameConstants.getInventoryType(itemid);
+ final IItem findById = this.inventory[type.ordinal()].findById(itemid);
+ short possesed;
+ if (findById != null) {
+ possesed = findById.getPosition();
+ } else {
+ possesed = 100;
+ }
+ return possesed;
+ }
+
+ public void dropNPC(final String message) {
+ this.client.sendPacket(MaplePacketCreator.getNPCTalk(9010000, (byte) 0, message, "00 00", (byte) 0));
+ }
+
+ public void dropNPC(final int npc, final String message) {
+ this.client.sendPacket(MaplePacketCreator.getNPCTalk(npc, (byte) 0, message, "00 00", (byte) 0));
+ }
+
+ public boolean getItemVac() {
+ return this.itemVacs;
+ }
+
+ public boolean getMobVac() {
+ return this.mobVacs;
+ }
+
+ public final int getCombo() {
+ return this.combo;
+ }
+
+ public void setCombo(final int combo) {
+ this.combo = combo;
+ this.lastCombo = System.currentTimeMillis();
+ this.getClient().getSession().writeAndFlush(MaplePacketCreator.updateCombo(combo));
+ if (combo % 10 == 0 && combo >= 10 && combo <= 100) {
+ if (this.getSkillLevel(21000000) < combo / 10) {
+ return;
+ }
+ if (combo == 9 && this.getQuestStatus(10370) == 0) {
+ this.giftMedal(1142134);
+ MapleQuest.getInstance(10370).forceComplete(this, 0);
+ this.dropMessage(5, "您刚才拿到了连续技高手勋章。");
+ }
+ if (combo == 4999 && this.getQuestStatus(10371) == 0) {
+ this.giftMedal(1142135);
+ MapleQuest.getInstance(10371).forceComplete(this, 0);
+ this.dropMessage(5, "您刚才拿到了连续技达人勋章。");
+ }
+ if (combo == 14999 && this.getQuestStatus(10372) == 0) {
+ this.giftMedal(1142136);
+ MapleQuest.getInstance(10372).forceComplete(this, 0);
+ this.dropMessage(5, "您刚才拿到了连续技之王勋章。");
+ }
+ SkillFactory.getSkill(21000000).getEffect(combo / 10).applyComboBuff(this, combo);
+ } else if (combo < 10) {
+ SkillFactory.getSkill(21000000).getEffect(combo / 10).applyComboBuff(this, 0);
+ }
+ }
+
+ public final long getLastCombo() {
+ return this.lastCombo;
+ }
+
+ public void setLastCombo(final long combo) {
+ this.lastCombo = combo;
+ }
+
+ public int get副本地图() {
+ return this.副本地图;
+ }
+
+ public void set副本地图(final int 副本地图) {
+ this.副本地图 = 副本地图;
+ }
+
+ public byte getBuddyCapacity() {
+ return this.buddylist.getCapacity();
+ }
+
+ public void setBuddyCapacity(final byte capacity) {
+ this.buddylist.setCapacity(capacity);
+ this.client.sendPacket(MaplePacketCreator.updateBuddyCapacity((int) capacity));
+ }
+
+ public MapleMessenger getMessenger() {
+ return this.messenger;
+ }
+
+ public void setMessenger(final MapleMessenger messenger) {
+ this.messenger = messenger;
+ }
+
+ public void addCooldown(final int skillId, final long startTime, final long length) {
+ this.coolDowns.put(Integer.valueOf(skillId), new MapleCoolDownValueHolder(skillId, startTime, length));
+ }
+
+ public void removeCooldown(final int skillId) {
+ if (this.coolDowns.containsKey(Integer.valueOf(skillId))) {
+ this.coolDowns.remove(Integer.valueOf(skillId));
+ }
+ }
+
+ public boolean skillisCooling(final int skillId) {
+ return this.coolDowns.containsKey(Integer.valueOf(skillId));
+ }
+
+ public void giveCoolDowns(final int skillid, final long starttime, final long length) {
+ this.addCooldown(skillid, starttime, length);
+ }
+
+ public void giveCoolDowns(final List cooldowns) {
+ if (cooldowns != null) {
+ for (final MapleCoolDownValueHolder cooldown : cooldowns) {
+ this.coolDowns.put(Integer.valueOf(cooldown.skillId), cooldown);
+ this.client.sendPacket(MaplePacketCreator.skillCooldown(cooldown.skillId, (int) ((cooldown.length - ((System.currentTimeMillis() - cooldown.startTime > cooldown.length) ? 0L : (System.currentTimeMillis() - cooldown.startTime))) / 1000L)));
+ }
+ } else {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT SkillID,StartTime,length FROM skills_cooldowns WHERE charid = ?")) {
+ ps.setInt(1, this.getId());
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ if (rs.getLong("length") + rs.getLong("StartTime") - System.currentTimeMillis() <= 0L) {
+ continue;
+ }
+ this.giveCoolDowns(rs.getInt("SkillID"), rs.getLong("StartTime"), rs.getLong("length"));
+ }
+ rs.close();
+ ps.close();
+ this.deleteWhereCharacterId(con, "DELETE FROM skills_cooldowns WHERE charid = ?");
+ con.close();
+ } catch (SQLException e) {
+ FilePrinter.printError("MapleCharcter.txt", (Throwable) e, "Error while retriving cooldown from SQL storage");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+ }
+
+ public List getCooldowns() {
+ return new ArrayList(this.coolDowns.values());
+ }
+
+ public final List getAllDiseases() {
+ return new ArrayList(this.diseases.values());
+ }
+
+ public final boolean hasDisease(final MapleDisease dis) {
+ return this.diseases.keySet().contains(dis);
+ }
+
+ public void getDiseaseBuff(final MapleDisease disease, final MobSkill skill) {
+ this.getDiseaseBuff(disease, skill.getX(), skill.getDuration(), skill.getSkillId(), skill.getSkillLevel());
+ }
+
+ public void getDiseaseBuff(final MapleDisease disease, final int x, final long duration, final int skillid, final int level) {
+ final List> debuff = Collections.singletonList(new Pair(disease, Integer.valueOf(x)));
+ if (!this.hasDisease(disease) && this.diseases.size() < 2) {
+ if (disease != MapleDisease.SEDUCE && disease != MapleDisease.STUN && this.isActiveBuffedValue(2321005)) {
+ return;
+ }
+ this.diseases.put(disease, new MapleDiseaseValueHolder(disease, System.currentTimeMillis(), duration));
+ this.client.sendPacket(MaplePacketCreator.giveDebuff(debuff, skillid, level, (int) duration));
+ this.map.broadcastMessage(this, MaplePacketCreator.giveForeignDebuff(this.id, debuff, skillid, level), false);
+ }
+ }
+
+ public final void giveSilentDebuff(final List ld) {
+ if (ld != null) {
+ for (final MapleDiseaseValueHolder disease : ld) {
+ this.diseases.put(disease.disease, disease);
+ }
+ }
+ }
+
+ public void dispelDebuff(final MapleDisease debuff) {
+ if (this.hasDisease(debuff)) {
+ final long mask = debuff.getValue();
+ final boolean first = debuff.isFirst();
+ this.diseases.remove(debuff);
+ this.client.sendPacket(MaplePacketCreator.cancelDebuff(mask, first));
+ this.map.broadcastMessage(this, MaplePacketCreator.cancelForeignDebuff(this.id, mask, first), false);
+ }
+ }
+
+ public void dispelDebuffs() {
+ this.dispelDebuff(MapleDisease.CURSE);
+ this.dispelDebuff(MapleDisease.DARKNESS);
+ this.dispelDebuff(MapleDisease.POISON);
+ this.dispelDebuff(MapleDisease.SEAL);
+ this.dispelDebuff(MapleDisease.STUN);
+ this.dispelDebuff(MapleDisease.WEAKEN);
+ }
+
+ public void cancelAllDebuffs() {
+ this.diseases.clear();
+ }
+
+ public void setLevel(final short level) {
+ this.level = level;
+ }
+
+ public void sendNote(final String to, final String msg) {
+ this.sendNote(to, msg, 0);
+ }
+
+ public void sendNote(final String to, final String msg, final int fame) {
+ MapleCharacterUtil.sendNote(to, this.getName(), msg, fame);
+ }
+
+ public void showNote() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM notes WHERE `to`=?", 1005, 1008)) {
+ ps.setString(1, this.getName());
+ try (final ResultSet rs = ps.executeQuery()) {
+ rs.last();
+ final int count = rs.getRow();
+ rs.first();
+ this.client.sendPacket(MTSCSPacket.showNotes(rs, count));
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e, "Unable to show note");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public void deleteNote(final int id, final int fame) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("SELECT gift FROM notes WHERE `id`=?");
+ ps.setInt(1, id);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next() && rs.getInt("gift") == fame && fame > 0) {
+ this.addFame(fame);
+ this.updateSingleStat(MapleStat.FAME, (int) this.getFame());
+ this.client.sendPacket(MaplePacketCreator.getShowFameGain(fame));
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("DELETE FROM notes WHERE `id`=?");
+ ps.setInt(1, id);
+ ps.execute();
+ ps.close();
+ } catch (SQLException e) {
+ System.err.println("Unable to delete note" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public int getmulungEnergy() {
+ return this.mulung_energy;
+ }
+
+ public void mulungEnergyModify(final boolean inc) {
+ if (inc) {
+ if (this.mulung_energy + 100 > 10000) {
+ this.mulung_energy = 10000;
+ } else {
+ this.mulung_energy += 100;
+ }
+ } else {
+ this.mulung_energy = 0;
+ }
+ if (this.isAdmin()) {
+ this.mulung_energy = 10000;
+ }
+ this.client.sendPacket(MaplePacketCreator.MulungEnergy((int) this.mulung_energy));
+ }
+
+ public void writeMulungEnergy() {
+ this.client.sendPacket(MaplePacketCreator.MulungEnergy((int) this.mulung_energy));
+ }
+
+ public void writeEnergy(final String type, final String inc) {
+ this.client.sendPacket(MaplePacketCreator.sendPyramidEnergy(type, inc));
+ }
+
+ public void writeStatus(final String type, final String inc) {
+ this.client.sendPacket(MaplePacketCreator.sendGhostStatus(type, inc));
+ }
+
+ public void writePoint(final String type, final String inc) {
+ this.client.sendPacket(MaplePacketCreator.sendGhostPoint(type, inc));
+ }
+
+ public final long getKeyDownSkill_Time() {
+ return this.keydown_skill;
+ }
+
+ public void setKeyDownSkill_Time(final long keydown_skill) {
+ this.keydown_skill = keydown_skill;
+ }
+
+ public void checkBerserk() {
+ if (this.BerserkSchedule != null) {
+ this.BerserkSchedule.cancel(false);
+ this.BerserkSchedule = null;
+ }
+ final ISkill BerserkX = SkillFactory.getSkill(1320006);
+ final int skilllevel = this.getSkillLevel(BerserkX);
+ if (skilllevel >= 1) {
+ final MapleStatEffect ampStat = BerserkX.getEffect(skilllevel);
+ this.stats.Berserk = (this.stats.getHp() * 100 / this.stats.getMaxHp() <= ampStat.getX());
+ try {
+ this.BerserkSchedule = BuffTimer.getInstance().schedule((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ MapleCharacter.this.checkBerserk();
+ }
+ }, 10000L);
+ } catch (RejectedExecutionException ex) {
+ }
+ }
+ }
+
+ private void prepareBeholderEffect() {
+ if (this.beholderHealingSchedule != null) {
+ this.beholderHealingSchedule.cancel(false);
+ }
+ if (this.beholderBuffSchedule != null) {
+ this.beholderBuffSchedule.cancel(false);
+ }
+ final ISkill bHealing = SkillFactory.getSkill(1320008);
+ final int bHealingLvl = this.getSkillLevel(bHealing);
+ final int berserkLvl = this.getSkillLevel(SkillFactory.getSkill(1320006));
+ if (bHealingLvl > 0) {
+ final MapleStatEffect healEffect = bHealing.getEffect(bHealingLvl);
+ final int healInterval = healEffect.getX() * 1000;
+ this.beholderHealingSchedule = BuffTimer.getInstance().register((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ final int remhppercentage = (int) Math.ceil((double) MapleCharacter.this.getStat().getHp() * 100.0 / (double) MapleCharacter.this.getStat().getMaxHp());
+ if (berserkLvl == 0 || remhppercentage >= berserkLvl + 10) {
+ MapleCharacter.this.addHP((int) healEffect.getHp());
+ }
+ MapleCharacter.this.client.sendPacket(MaplePacketCreator.showOwnBuffEffect(1321007, 2));
+ MapleCharacter.this.map.broadcastMessage(MaplePacketCreator.summonSkill(MapleCharacter.this.getId(), 1321007, 5));
+ MapleCharacter.this.map.broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBuffeffect(MapleCharacter.this.getId(), 1321007, 2), false);
+ }
+ }, (long) healInterval, (long) healInterval);
+ }
+ final ISkill bBuff = SkillFactory.getSkill(1320009);
+ final int bBuffLvl = this.getSkillLevel(bBuff);
+ if (bBuffLvl > 0) {
+ final MapleStatEffect buffEffect = bBuff.getEffect(bBuffLvl);
+ final int buffInterval = buffEffect.getX() * 1000;
+ this.beholderBuffSchedule = BuffTimer.getInstance().register((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ buffEffect.applyTo(MapleCharacter.this);
+ MapleCharacter.this.client.sendPacket(MaplePacketCreator.showOwnBuffEffect(1321007, 2));
+ MapleCharacter.this.map.broadcastMessage(MaplePacketCreator.summonSkill(MapleCharacter.this.getId(), 1321007, Randomizer.nextInt(3) + 6));
+ MapleCharacter.this.map.broadcastMessage(MapleCharacter.this, MaplePacketCreator.showBuffeffect(MapleCharacter.this.getId(), 1321007, 2), false);
+ }
+ }, (long) buffInterval, (long) buffInterval);
+ }
+ }
+
+ public void setChalkboard(final String text) {
+ this.chalktext = text;
+ this.map.broadcastMessage(MTSCSPacket.useChalkboard(this.getId(), text));
+ }
+
+ public String getChalkboard() {
+ return this.chalktext;
+ }
+
+ public MapleMount getMount() {
+ return this.mount;
+ }
+
+ public int gmLevel() {
+ return this.gmLevel;
+ }
+
+ public int[] getWishlist() {
+ return this.wishlist;
+ }
+
+ public void clearWishlist() {
+ for (int i = 0; i < 10; ++i) {
+ this.wishlist[i] = 0;
+ }
+ }
+
+ public int getWishlistSize() {
+ int ret = 0;
+ for (int i = 0; i < 10; ++i) {
+ if (this.wishlist[i] > 0) {
+ ++ret;
+ }
+ }
+ return ret;
+ }
+
+ public void setWishlist(final int[] wl) {
+ this.wishlist = wl;
+ }
+
+ public int[] getRocks() {
+ return this.rocks;
+ }
+
+ public int getRockSize() {
+ int ret = 0;
+ for (int i = 0; i < 10; ++i) {
+ if (this.rocks[i] != 999999999) {
+ ++ret;
+ }
+ }
+ return ret;
+ }
+
+ public void deleteFromRocks(final int map) {
+ for (int i = 0; i < 10; ++i) {
+ if (this.rocks[i] == map) {
+ this.rocks[i] = 999999999;
+ break;
+ }
+ }
+ }
+
+ public void addRockMap() {
+ if (this.getRockSize() >= 10) {
+ return;
+ }
+ this.rocks[this.getRockSize()] = this.getMapId();
+ }
+
+ public boolean isRockMap(final int id) {
+ for (int i = 0; i < 10; ++i) {
+ if (this.rocks[i] == id) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public int[] getRegRocks() {
+ return this.regrocks;
+ }
+
+ public int getRegRockSize() {
+ int ret = 0;
+ for (int i = 0; i < 5; ++i) {
+ if (this.regrocks[i] != 999999999) {
+ ++ret;
+ }
+ }
+ return ret;
+ }
+
+ public void deleteFromRegRocks(final int map) {
+ for (int i = 0; i < 5; ++i) {
+ if (this.regrocks[i] == map) {
+ this.regrocks[i] = 999999999;
+ break;
+ }
+ }
+ }
+
+ public void addRegRockMap() {
+ if (this.getRegRockSize() >= 5) {
+ return;
+ }
+ this.regrocks[this.getRegRockSize()] = this.getMapId();
+ }
+
+ public boolean isRegRockMap(final int id) {
+ for (int i = 0; i < 5; ++i) {
+ if (this.regrocks[i] == id) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public List getLastRes() {
+ return this.lastres;
+ }
+
+ public void setLastRes(final List lastres) {
+ this.lastres = lastres;
+ }
+
+ public void setMonsterBookCover(final int bookCover) {
+ this.bookCover = bookCover;
+ }
+
+ public int getMonsterBookCover() {
+ return this.bookCover;
+ }
+
+ public String getAccountSecondPassword() {
+ return this.accountsecondPassword;
+ }
+
+ public final void openNpc(final int id) {
+ this.openNpc(id, null);
+ }
+
+ public final void openPartyNpc(final MapleCharacter c, final int id, final String bossid) {
+ if (c.getParty() == null || c.getParty().getMembers().size() == 1) {
+ c.openNpc(id, bossid);
+ return;
+ }
+ for (final MaplePartyCharacter chr : c.getParty().getMembers()) {
+ final MapleCharacter curChar = c.getMap().getCharacterById(chr.getId());
+ if (curChar != null) {
+ curChar.openNpc(id, bossid);
+ }
+ }
+ }
+
+ public final void setPartyAccountidLog(final MapleCharacter c, final String log1, final int slot) {
+ if (c.getParty() == null || c.getParty().getMembers().size() == 1) {
+ c.setAccountidLog(log1, slot);
+ return;
+ }
+ for (final MaplePartyCharacter chr : c.getParty().getMembers()) {
+ final MapleCharacter curChar = c.getMap().getCharacterById(chr.getId());
+ if (curChar != null) {
+ curChar.setAccountidLog(log1, slot);
+ }
+ }
+ }
+
+ public final void openNpc(final int id, final String mode) {
+ this.getClient().removeClickedNPC();
+ NPCScriptManager.getInstance().dispose(this.getClient());
+ NPCScriptManager.getInstance().start(this.getClient(), id, mode);
+ }
+
+ public int getOneWeekLog(final String log1) {
+ int jf = 0;
+ Connection con = null;
+ PreparedStatement ps = null;
+ PreparedStatement psu = null;
+ ResultSet rs = null;
+ try {
+ con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con.prepareStatement("select * from onetimelogd where characterid =? and log = ?");
+ ps.setInt(1, this.id);
+ ps.setString(2, log1);
+ rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ psu = con.prepareStatement("insert into onetimelogd (characterid,log, sz1) VALUES (?,?, ?)");
+ psu.setInt(1, this.id);
+ psu.setString(2, log1);
+ psu.setInt(3, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("onetimelogd读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void setOneWeekLog(final String boss) {
+ this.setOneWeekLog(boss, 1);
+ }
+
+ public void setOneWeekLog(final String boss, final int count) {
+ final int bossCount = this.getOneWeekLog(boss);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE onetimelogd SET sz1 = ? WHERE characterid = ? AND log = ?");
+ ps.setInt(1, bossCount + count);
+ ps.setInt(2, this.id);
+ ps.setString(3, boss);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex) {
+ System.err.println("onetimelogd读取发生错误: " + Ex);
+ }
+ }
+
+ public int getBossLog1(final String boss) {
+ return this.getBossLog1(boss, 0);
+ }
+
+ public int getBossLog1(final String boss, final int type) {
+ try {
+ int count = 0;
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM bosslog1 WHERE characterid = ? AND bossid = ?");
+ ps.setInt(1, this.id);
+ ps.setString(2, boss);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ count = rs.getInt("count");
+ final Timestamp bossTime = rs.getTimestamp("time");
+ if (type == 0) {
+ if (bossTime != null) {
+ final Calendar cal = Calendar.getInstance();
+ cal.setTimeInMillis(bossTime.getTime());
+ if (cal.get(5) + 1 <= Calendar.getInstance().get(5) || cal.get(2) + 1 <= Calendar.getInstance().get(2)) {
+ count = 0;
+ final PreparedStatement psa = con.prepareStatement("UPDATE bosslog1 SET count = 0 WHERE characterid = ? AND bossid = ?");
+ psa.setInt(1, this.id);
+ psa.setString(2, boss);
+ psa.executeUpdate();
+ psa.close();
+ }
+ }
+ final PreparedStatement psa2 = con.prepareStatement("UPDATE bosslog1 SET time = CURRENT_TIMESTAMP() WHERE characterid = ? AND bossid = ?");
+ psa2.setInt(1, this.id);
+ psa2.setString(2, boss);
+ psa2.executeUpdate();
+ psa2.close();
+ }
+ } else {
+ final PreparedStatement psu = con.prepareStatement("INSERT INTO bosslog1 (characterid, bossid, count, type) VALUES (?, ?, ?, ?)");
+ psu.setInt(1, this.id);
+ psu.setString(2, boss);
+ psu.setInt(3, 0);
+ psu.setInt(4, type);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return count;
+ } catch (Exception ex) {
+ return -1;
+ }
+ }
+
+ public void setBossLog1(final String boss) {
+ this.setBossLog1(boss, 0);
+ }
+
+ public void setBossLog1(final String boss, final int type) {
+ this.setBossLog1(boss, type, 1);
+ }
+
+ public void setBossLog1(final String boss, final int type, final int count) {
+ final int bossCount = this.getBossLog1(boss, type);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE bosslog1 SET count = ?, type = ?, time = CURRENT_TIMESTAMP() WHERE characterid = ? AND bossid = ?");
+ ps.setInt(1, bossCount + count);
+ ps.setInt(2, type);
+ ps.setInt(3, this.id);
+ ps.setString(4, boss);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception ex) {
+ }
+ }
+
+ public int getAccountidLog(final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from accountidlog where id =? and log = ?");
+ ps.setInt(1, this.accountid);
+ ps.setString(2, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into accountidlog (id,log, sz1) VALUES (?,?, ?)");
+ psu.setInt(1, this.accountid);
+ psu.setString(2, log1);
+ psu.setInt(3, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("FZ3读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void setAccountidLog(final String log1) {
+ this.setAccountidLog(log1, 1);
+ }
+
+ public void setAccountidLog(final String log1, final int slot) {
+ final int jf = this.getAccountidLog(log1);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE accountidlog SET sz1 = ? where id = ? AND log = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, this.accountid);
+ ps.setString(3, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("FZ3加减发生错误: " + ex);
+ }
+ }
+
+ public int getAccountLog(final String log1, final int a) {
+ if (a < 1) {
+ return this.getAccountidBossLog(log1);
+ }
+ return this.getAccountidLog(log1);
+ }
+
+ public void setAccountLog(final String log1, final int a) {
+ if (a < 1) {
+ this.setAccountidBossLog(log1, 1);
+ } else {
+ this.setAccountidLog(log1, 1);
+ }
+ }
+
+ public void setAccountLog(final String log1, final int a, final int b) {
+ if (a < 1) {
+ this.setAccountidBossLog(log1, b);
+ } else {
+ this.setAccountidLog(log1, b);
+ }
+ }
+
+ public int getAccountidBossLog(final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from accountidbosslog where id =? and log = ?");
+ ps.setInt(1, this.accountid);
+ ps.setString(2, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into accountidbosslog (id,log, sz1) VALUES (?,?, ?)");
+ psu.setInt(1, this.accountid);
+ psu.setString(2, log1);
+ psu.setInt(3, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("FZ3读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void setAccountidBossLog(final String log1) {
+ this.setAccountidBossLog(log1, 1);
+ }
+
+ public void setAccountidBossLog(final String log1, final int slot) {
+ final int jf = this.getAccountidBossLog(log1);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE accountidbosslog SET sz1 = ? where id = ? AND log = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, this.accountid);
+ ps.setString(3, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("accountidbosslog加减发生错误: " + ex);
+ }
+ }
+
+ public int getFZ4(final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from fz4 where log = ?");
+ ps.setString(1, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into fz4 (log, sz1) VALUES (?, ?)");
+ psu.setString(1, log1);
+ jf = 0;
+ psu.setInt(2, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("FZ4读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void setFZ4(final String name, final int value) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ PreparedStatement ps = null;
+ ps = con.prepareStatement("UPDATE fz4 SET sz1 = ? WHERE log = ?");
+ ps.setInt(1, value);
+ ps.setString(2, name);
+ ps.execute();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("FZ4更新发生错误: " + ex);
+ }
+ }
+
+ public static int getFZ9(final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from fz9 where log = ?");
+ ps.setString(1, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into fz9 (log, sz1) VALUES (?, ?)");
+ psu.setString(1, log1);
+ jf = 50;
+ psu.setInt(2, 50);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("FZ9读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public int getFZ3modid(final int someid, final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from fz3 where cid = ? AND log = ?");
+ ps.setInt(1, someid);
+ ps.setString(2, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into fz3 (cid,log, sz1,sz2) VALUES (?, ?, ?,?)");
+ psu.setInt(1, someid);
+ psu.setString(2, log1);
+ psu.setInt(3, 0);
+ psu.setInt(4, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("FZ3读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public int getFZ3slid(final int someid, final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from fz3 where cid = ? AND log = ?");
+ ps.setInt(1, someid);
+ ps.setString(2, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz2");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into fz3 (cid,log, sz1,sz2) VALUES (?, ?, ?,?)");
+ psu.setInt(1, someid);
+ psu.setString(2, log1);
+ psu.setInt(3, 0);
+ psu.setInt(4, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("FZ3读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public int setFZ3modid(final int someid, final String log1, final int slot) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE fz3 SET sz1 = ? where cid = ? AND log = ?");
+ ps.setInt(1, slot);
+ ps.setInt(2, someid);
+ ps.setString(3, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ return 1;
+ } catch (SQLException ex) {
+ System.err.println("FZ3加减发生错误: " + ex);
+ return 0;
+ }
+ }
+
+ public int setFZ3slid(final int someid, final String log1, final int slot) {
+ final int jf = this.getFZ3slid(someid, log1);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE fz3 SET sz2 = ? where cid = ? AND log = ? ");
+ ps.setInt(1, slot + jf);
+ ps.setInt(2, someid);
+ ps.setString(3, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ return 1;
+ } catch (SQLException ex) {
+ System.err.println("FZ3加减发生错误: " + ex);
+ return 0;
+ }
+ }
+
+ public int reaFZ3slid(final int someid, final String log1) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE fz3 SET sz2 = ? AND sz2 = ?where cid = ? AND log = ?");
+ ps.setInt(1, 0);
+ ps.setInt(2, 0);
+ ps.setInt(3, someid);
+ ps.setString(4, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ return 1;
+ } catch (SQLException ex) {
+ System.err.println("FZ3加减发生错误: " + ex);
+ return 0;
+ }
+ }
+
+ public int getAccNewTime(final String time) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from accounts where id = ? and createdat <= '" + time + "'");
+ ps.setInt(1, this.accountid);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getAddLog() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ int money = 0;
+ final PreparedStatement ps = con.prepareStatement("SELECT money FROM addlog WHERE accid = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ money += rs.getInt("money");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return money;
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -1;
+ }
+ }
+
+ public void setPrizeLog(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into Prizelog (accid, bossid) values (?,?)");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ }
+ }
+
+ public int getPrizeLog(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ int ret_count = 0;
+ final PreparedStatement ps = con.prepareStatement("select count(*) from Prizelog where accid = ? and bossid = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (Exception Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ return -1;
+ }
+ }
+
+ public void setAcLog(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into Aclog (accid, bossid) values (?,?)");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ }
+ }
+
+ public void setAcLogS(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into Aclog (accid, bossid) values (?,?)");
+ ps.setInt(1, this.getAccountID());
+ ps.setString(2, bossid);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ }
+ }
+
+ public int getAcLog(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ int ret_count = 0;
+ final PreparedStatement ps = con.prepareStatement("select count(*) from Aclog where accid = ? and bossid = ? and lastattempt >= subtime(current_timestamp, '1 0:0:0.0')");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (Exception Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ return -1;
+ }
+ }
+
+ public int getAcLogS(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ int ret_count = 0;
+ final PreparedStatement ps = con.prepareStatement("select count(*) from Aclog where accid = ? and bossid = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (Exception Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ return -1;
+ }
+ }
+
+ public void dropMessage(final int type, final String message) {
+ if (type == -1) {
+ this.client.sendPacket(UIPacket.getTopMsg(message));
+ } else if (type == -2) {
+ this.client.sendPacket(PlayerShopPacket.shopChat(message, 0));
+ } else if (type == -11) {
+ this.client.getSession().writeAndFlush(MaplePacketCreator.yellowChat(message));
+ } else {
+ this.client.sendPacket(MaplePacketCreator.serverNotice(type, message));
+ }
+ }
+
+ public void showInfo(final String caption, final boolean pink, String msg) {
+ final short type = (short) (pink ? 5 : 6);
+ if (caption != null && !caption.isEmpty()) {
+ msg = "[" + caption + "] " + msg;
+ }
+ this.dropMessage((int) type, msg);
+ this.dropMessage(-1, msg);
+ }
+
+ public IMaplePlayerShop getPlayerShop() {
+ return this.playerShop;
+ }
+
+ public void setPlayerShop(final IMaplePlayerShop playerShop) {
+ this.playerShop = playerShop;
+ }
+
+ public int getConversation() {
+ return this.inst.get();
+ }
+
+ public void setConversation(final int inst) {
+ this.inst.set(inst);
+ }
+
+ public MapleCarnivalParty getCarnivalParty() {
+ return this.carnivalParty;
+ }
+
+ public void setCarnivalParty(final MapleCarnivalParty party) {
+ this.carnivalParty = party;
+ }
+
+ public void addCP(final int ammount) {
+ this.totalCP += (short) ammount;
+ this.availableCP += (short) ammount;
+ }
+
+ public void useCP(final int ammount) {
+ if (this.availableCP >= ammount) {
+ this.availableCP -= (short) ammount;
+ }
+ }
+
+ public int getAvailableCP() {
+ return this.availableCP;
+ }
+
+ public int getTotalCP() {
+ return this.totalCP;
+ }
+
+ public void resetCP() {
+ this.totalCP = 0;
+ this.availableCP = 0;
+ }
+
+ public static int getIdByName(final String name) {
+ try {
+ int id = -1;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT id FROM characters WHERE name = ?")) {
+ ps.setString(1, name);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ id = rs.getInt("id");
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ }
+ return id;
+ } catch (Exception e) {
+ System.err.println("错误 'getIdByName' " + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -1;
+ }
+ }
+
+ public void addCarnivalRequest(final MapleCarnivalChallenge request) {
+ this.pendingCarnivalRequests.add(request);
+ }
+
+ public final MapleCarnivalChallenge getNextCarnivalRequest() {
+ return (MapleCarnivalChallenge) this.pendingCarnivalRequests.pollLast();
+ }
+
+ public void clearCarnivalRequests() {
+ this.pendingCarnivalRequests = (Deque) new LinkedList();
+ }
+
+ public void startMonsterCarnival(final int enemyavailable, final int enemytotal) {
+ this.client.sendPacket(MonsterCarnivalPacket.startMonsterCarnival(this, enemyavailable, enemytotal));
+ }
+
+ public void CPUpdate(final boolean party, final int available, final int total, final int team) {
+ this.client.sendPacket(MonsterCarnivalPacket.CPUpdate(party, available, total, team));
+ }
+
+ public void playerDiedCPQ(final String name, final int lostCP, final int team) {
+ this.client.sendPacket(MonsterCarnivalPacket.playerDiedMessage(name, lostCP, team));
+ }
+
+ public boolean getCanTalk() {
+ return this.canTalk;
+ }
+
+ public void canTalk(final boolean talk) {
+ this.canTalk = talk;
+ }
+
+ public int getEXPMod() {
+ return this.stats.expMod;
+ }
+
+ public int getDropMod() {
+ return this.stats.dropMod;
+ }
+
+ public double getDropm() {
+ return this.stats.dropm;
+ }
+
+ public double getExpm() {
+ return this.stats.expm;
+ }
+
+ public int getCashMod() {
+ return this.stats.cashMod;
+ }
+
+ public int getCloneDamgeRate() {
+ return this.clonedamgerate;
+ }
+
+ public void setCloneDamgeRate(final int a) {
+ this.clonedamgerate = a;
+ }
+
+ public void setVPoints(final int p) {
+ this.vpoints = p;
+ }
+
+ public int getVPoints() {
+ return this.vpoints;
+ }
+
+ public CashShop getCashInventory() {
+ return this.cs;
+ }
+
+ public void removeAll(final int id) {
+ this.removeAll(id, false);
+ }
+
+ public void removeAll(final int id, final boolean show) {
+ this.removeAll(id, false, false);
+ }
+
+ public void removeAll(final int id, final boolean show, final boolean equip) {
+ MapleInventoryType type = GameConstants.getInventoryType(id);
+ int possessed = this.getInventory(type).countById(id);
+ if (possessed > 0) {
+ MapleInventoryManipulator.removeById(this.getClient(), type, id, possessed, true, false);
+ if (show) {
+ this.getClient().sendPacket(MaplePacketCreator.getShowItemGain(id, (short) (-possessed), true));
+ }
+ }
+ if (equip && type == MapleInventoryType.EQUIP) {
+ type = MapleInventoryType.EQUIPPED;
+ possessed = this.getInventory(type).countById(id);
+ if (possessed > 0) {
+ MapleInventoryManipulator.removeById(this.getClient(), type, id, possessed, true, false);
+ this.getClient().sendPacket(MaplePacketCreator.getShowItemGain(id, (short) (-possessed), true));
+ }
+ }
+ }
+
+ public MapleRing getMarriageRing(final boolean incluedEquip) {
+ MapleInventory iv = this.getInventory(MapleInventoryType.EQUIPPED);
+ final Collection equippedC = iv.list();
+ final List- equipped = (List
- ) new ArrayList(equippedC.size());
+ for (final IItem item : equippedC) {
+ equipped.add((Item) item);
+ }
+ for (final Item item2 : equipped) {
+ if (item2.getRing() != null) {
+ final MapleRing ring = item2.getRing();
+ ring.setEquipped(true);
+ if (GameConstants.isMarriageRing(item2.getItemId())) {
+ return ring;
+ }
+ continue;
+ }
+ }
+ if (incluedEquip) {
+ iv = this.getInventory(MapleInventoryType.EQUIP);
+ for (final IItem item : iv.list()) {
+ if (item.getRing() != null && GameConstants.isMarriageRing(item.getItemId())) {
+ final MapleRing ring = item.getRing();
+ ring.setEquipped(false);
+ return ring;
+ }
+ }
+ }
+ return null;
+ }
+
+ public Pair
, List> getRings(final boolean equip) {
+ MapleInventory iv = this.getInventory(MapleInventoryType.EQUIPPED);
+ final Collection equippedC = iv.list();
+ final List- equipped = (List
- ) new ArrayList(equippedC.size());
+ for (final IItem item : equippedC) {
+ equipped.add((Item) item);
+ }
+ Collections.sort(equipped);
+ final List crings = (List) new ArrayList();
+ final List frings = (List) new ArrayList();
+ for (final Item item2 : equipped) {
+ if (item2.getRing() != null) {
+ final MapleRing ring = item2.getRing();
+ ring.setEquipped(true);
+ if (!GameConstants.isEffectRing(item2.getItemId())) {
+ continue;
+ }
+ if (equip) {
+ if (GameConstants.isCrushRing(item2.getItemId())) {
+ crings.add(ring);
+ } else {
+ if (!GameConstants.isFriendshipRing(item2.getItemId())) {
+ continue;
+ }
+ frings.add(ring);
+ }
+ } else if (crings.isEmpty() && GameConstants.isCrushRing(item2.getItemId())) {
+ crings.add(ring);
+ } else {
+ if (!frings.isEmpty() || !GameConstants.isFriendshipRing(item2.getItemId())) {
+ continue;
+ }
+ frings.add(ring);
+ }
+ }
+ }
+ if (equip) {
+ iv = this.getInventory(MapleInventoryType.EQUIP);
+ for (final IItem item3 : iv.list()) {
+ if (item3.getRing() != null && GameConstants.isEffectRing(item3.getItemId())) {
+ final MapleRing ring = item3.getRing();
+ ring.setEquipped(false);
+ if (GameConstants.isFriendshipRing(item3.getItemId())) {
+ frings.add(ring);
+ } else {
+ if (!GameConstants.isCrushRing(item3.getItemId())) {
+ continue;
+ }
+ crings.add(ring);
+ }
+ }
+ }
+ }
+ Collections.sort(frings, new RingComparator());
+ Collections.sort(crings, new RingComparator());
+ return new Pair(crings, frings);
+ }
+
+ public int getFH() {
+ final MapleFoothold fh = this.getMap().getFootholds().findBelow(this.getPosition());
+ if (fh != null) {
+ return fh.getId();
+ }
+ return 0;
+ }
+
+ public void startFairySchedule(final boolean exp) {
+ this.startFairySchedule(exp, false);
+ }
+
+ public void startFairySchedule(final boolean exp, final boolean equipped) {
+ try {
+ this.cancelFairySchedule(exp);
+ if (this.fairyExp < 30 && this.stats.equippedFairy) {
+ if (equipped) {
+ this.dropMessage(5, "您装备了精灵吊坠在1小时后经验获取将增加到 " + (this.fairyExp + 10) + "%");
+ }
+ this.fairySchedule = EtcTimer.getInstance().schedule((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ if (MapleCharacter.this.fairyExp < 30 && MapleCharacter.this.stats.equippedFairy) {
+ MapleCharacter.this.fairyExp = (byte) 30;
+ ++MapleCharacter.this.fairyHour;
+ MapleCharacter.this.dropMessage(5, "因装备精灵坠饰经过了" + (int) MapleCharacter.this.fairyHour + "小时,打怪时可以额外获得红利经验值" + (int) MapleCharacter.this.fairyExp + "%.");
+ MapleCharacter.this.startFairySchedule(false, true);
+ } else {
+ MapleCharacter.this.cancelFairySchedule(!MapleCharacter.this.stats.equippedFairy);
+ }
+ }
+ }, 3600000L);
+ } else {
+ this.cancelFairySchedule(!this.stats.equippedFairy);
+ }
+ } catch (RejectedExecutionException ex) {
+ }
+ }
+
+ public void cancelFairySchedule(final boolean exp) {
+ if (this.fairySchedule != null) {
+ this.fairySchedule.cancel(false);
+ this.fairySchedule = null;
+ }
+ if (exp) {
+ this.fairyExp = 30;
+ this.fairyHour = 1;
+ }
+ }
+
+ public byte getFairyExp() {
+ return this.fairyExp;
+ }
+
+ public void setFairyExp(final byte Exp) {
+ this.fairyExp = Exp;
+ }
+
+ public int getCoconutTeam() {
+ return this.coconutteam;
+ }
+
+ public void setCoconutTeam(final int team) {
+ this.coconutteam = team;
+ }
+
+ public void spawnPet(final byte slot) {
+ this.spawnPet(slot, false, true);
+ }
+
+ public void spawnPet(final byte slot, final boolean lead) {
+ this.spawnPet(slot, lead, true);
+ final boolean 宠物buff开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.宠物buff开关"));
+ final boolean 宠物特殊buff开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.宠物特殊buff开关"));
+ final boolean 宠物基础buff开关 = Boolean.parseBoolean(ServerProperties.getProperty("pp.宠物基础buff开关"));
+ final String[] 特殊宠物代码 = ServerProperties.getProperty("pp.特殊宠物代码").split(",");
+ boolean 特殊宠物开关 = false;
+ if (宠物buff开关) {
+ for (int i = 0; i < 特殊宠物代码.length; ++i) {
+ if (this.getInventory(MapleInventoryType.CASH).getItem((short) slot).getItemId() == Integer.parseInt(特殊宠物代码[i])) {
+ 特殊宠物开关 = true;
+ }
+ }
+ if (特殊宠物开关) {
+ if (宠物特殊buff开关) {
+ MapleItemInformationProvider.getInstance().getItemEffect1(2001517).applyTo(this.client.getPlayer());
+ }
+ } else if (宠物基础buff开关) {
+ MapleItemInformationProvider.getInstance().getItemEffect1(2001519).applyTo(this.client.getPlayer());
+ }
+ }
+ }
+
+ public void removeFromSlot(final int type, final short slot, final short number) {
+ MapleInventoryType a = MapleInventoryType.EQUIP;
+ if (type == 1) {
+ a = MapleInventoryType.EQUIP;
+ } else if (type == 2) {
+ a = MapleInventoryType.USE;
+ } else if (type == 3) {
+ a = MapleInventoryType.SETUP;
+ } else if (type == 4) {
+ a = MapleInventoryType.ETC;
+ } else if (type == 5) {
+ a = MapleInventoryType.CASH;
+ }
+ MapleInventoryManipulator.removeFromSlot(this.client, a, slot, number, false);
+ }
+
+ public void addFromDrop(final IItem item, final boolean a) {
+ MapleInventoryManipulator.addFromDrop(this.client, item, a);
+ }
+
+ public void spawnPet(final byte slot, final boolean lead, final boolean broadcast) {
+ final IItem item = this.getInventory(MapleInventoryType.CASH).getItem((short) slot);
+ final MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
+ if (item == null || item.getItemId() > 5010000 || item.getItemId() < 5000000) {
+ return;
+ }
+ switch (item.getItemId()) {
+ case 5000028:
+ case 5000047: {
+ final MaplePet pet = MaplePet.createPet(item.getItemId() + 1, MapleInventoryIdentifier.getInstance());
+ if (pet != null) {
+ MapleInventoryManipulator.addById(this.client, item.getItemId() + 1, (short) 1, item.getOwner(), pet, 45L);
+ MapleInventoryManipulator.removeFromSlot(this.client, MapleInventoryType.CASH, (short) slot, (short) 1, false);
+ break;
+ }
+ break;
+ }
+ default: {
+ final MaplePet pet = item.getPet();
+ if (pet == null || (item.getItemId() == 5000054 && pet.getSecondsLeft() <= 0) || (item.getExpiration() != -1L && item.getExpiration() <= System.currentTimeMillis())) {
+ break;
+ }
+ if (pet.getSummoned()) {
+ this.unequipPet(pet, false);
+ break;
+ }
+ int leadid = 8;
+ if (GameConstants.isKOC((int) this.getJob())) {
+ leadid = 10000018;
+ } else if (GameConstants.isAran((int) this.getJob())) {
+ leadid = 20000024;
+ }
+ if (this.getSkillLevel(SkillFactory.getSkill(leadid)) == 0 && this.getSummonedPet(0) != null) {
+ this.unequipPet(this.getSummonedPet(0), false);
+ } else if (lead) {
+ this.shiftPetsRight();
+ }
+ final Point pos = this.getPosition();
+ pet.setPos(pos);
+ try {
+ pet.setFh(this.getMap().getFootholds().findBelow(pos).getId());
+ } catch (NullPointerException e) {
+ pet.setFh(0);
+ }
+ pet.setStance(0);
+ pet.setSummoned(this.getPetSlotNext() + 1);
+ this.addPet(pet);
+ if (this.getMap() != null) {
+ this.getMap().broadcastMessage(this, PetPacket.showPet(this, pet, false, false), true);
+ this.client.sendPacket(PetPacket.loadExceptionList(this, pet));
+ this.client.sendPacket(PetPacket.petStatUpdate(this));
+ }
+ break;
+ }
+ }
+ this.client.sendPacket(PetPacket.emptyStatUpdate());
+ }
+
+ public void addMoveMob(int mobid) {
+ if (movedMobs.containsKey(mobid)) {
+ movedMobs.put(mobid, movedMobs.get(mobid) + 1);
+ if (movedMobs.get(mobid) > 30) {
+ for (MapleCharacter chr : getMap().getCharactersThreadsafe()) {
+ if (chr.getMoveMobs().containsKey(mobid)) {
+ chr.getClient().sendPacket(MobPacket.killMonster(mobid, 1));
+ chr.getMoveMobs().remove(mobid);
+ }
+ }
+ }
+ } else {
+ movedMobs.put(mobid, 1);
+ }
+ }
+
+ public Map getMoveMobs() {
+ return this.movedMobs;
+ }
+
+ public int getLinkMid() {
+ return this.linkMid;
+ }
+
+ public void setLinkMid(final int lm) {
+ this.linkMid = lm;
+ }
+
+ public boolean isClone() {
+ return this.clone;
+ }
+
+ public void setClone(final boolean c) {
+ this.clone = c;
+ }
+
+ public WeakReference[] getClones() {
+ return this.clones;
+ }
+
+ public MapleCharacter cloneLooks() {
+ final MapleClient cloneClient = new MapleClient(null, null, (Channel) new MockIOSession());
+ final int minus = this.getId() + Randomizer.nextInt(this.getId());
+ final MapleCharacter ret = new MapleCharacter(true);
+ ret.id = minus;
+ ret.client = cloneClient;
+ ret.exp = 0;
+ ret.meso = 0;
+ ret.beans = this.beans;
+ ret.blood = this.blood;
+ ret.month = this.month;
+ ret.day = this.day;
+ ret.charmessage = this.charmessage;
+ ret.expression = this.expression;
+ ret.constellation = this.constellation;
+ ret.remainingAp = 0;
+ ret.fame = 0;
+ ret.accountid = this.client.getAccID();
+ ret.name = this.name;
+ ret.level = this.level;
+ ret.fame = this.fame;
+ ret.job = this.job;
+ ret.hair = this.hair;
+ ret.face = this.face;
+ ret.skinColor = this.skinColor;
+ ret.bookCover = this.bookCover;
+ ret.monsterbook = this.monsterbook;
+ ret.mount = this.mount;
+ ret.CRand = new PlayerRandomStream();
+ ret.gmLevel = this.gmLevel;
+ ret.gender = this.gender;
+ ret.mapid = this.map.getId();
+ ret.map = this.map;
+ ret.setStance(this.getStance());
+ ret.chair = this.chair;
+ ret.itemEffect = this.itemEffect;
+ ret.guildid = this.guildid;
+ ret.currentrep = this.currentrep;
+ ret.totalrep = this.totalrep;
+ ret.stats = this.stats;
+ ret.limitBreak = this.limitBreak;
+ ret.reinNumber = this.reinNumber;
+ ret.effects.putAll(this.effects);
+ if (ret.effects.get(MapleBuffStat.ILLUSION) != null) {
+ ret.effects.remove(MapleBuffStat.ILLUSION);
+ }
+ if (ret.effects.get(MapleBuffStat.SUMMON) != null) {
+ ret.effects.remove(MapleBuffStat.SUMMON);
+ }
+ if (ret.effects.get(MapleBuffStat.PUPPET) != null) {
+ ret.effects.remove(MapleBuffStat.PUPPET);
+ }
+ ret.guildrank = this.guildrank;
+ ret.allianceRank = this.allianceRank;
+ ret.hidden = this.hidden;
+ ret.setPosition(new Point(this.getPosition()));
+ for (final IItem equip : this.getInventory(MapleInventoryType.EQUIPPED)) {
+ ret.getInventory(MapleInventoryType.EQUIPPED).addFromDB(equip);
+ }
+ ret.skillMacros = this.skillMacros;
+ ret.keylayout = this.keylayout;
+ ret.questinfo = this.questinfo;
+ ret.savedLocations = this.savedLocations;
+ ret.wishlist = this.wishlist;
+ ret.rocks = this.rocks;
+ ret.regrocks = this.regrocks;
+ ret.buddylist = this.buddylist;
+ ret.keydown_skill = 0L;
+ ret.lastmonthfameids = this.lastmonthfameids;
+ ret.lastfametime = this.lastfametime;
+ ret.storage = this.storage;
+ ret.cs = this.cs;
+ ret.client.setAccountName(this.client.getAccountName());
+ ret.maplepoints = this.maplepoints;
+ ret.clone = true;
+ ret.client.setChannel(this.client.getChannel());
+ while (this.map.getCharacterById(ret.id) != null || this.client.getChannelServer().getPlayerStorage().getCharacterById(ret.id) != null) {
+ final MapleCharacter mapleCharacter = ret;
+ ++mapleCharacter.id;
+ }
+ ret.client.setPlayer(ret);
+ return ret;
+ }
+
+ public final void cloneLook() {
+ this.cloneLook(false, null, null);
+ }
+
+ public final void cloneLook(final boolean isStopMoving) {
+ this.cloneLook(isStopMoving, null, null);
+ }
+
+ public final void cloneLook(final MapleCharacter look) {
+ this.cloneLook(false, look, null);
+ }
+
+ public final void cloneLook(final boolean isStopMoving, final MapleCharacter look) {
+ this.cloneLook(isStopMoving, look, null);
+ }
+
+ public boolean isStopMoving() {
+ return this.stopMoving;
+ }
+
+ public void setStopMoving(final boolean stopMoving) {
+ this.stopMoving = stopMoving;
+ }
+
+ public final void cloneLook(final boolean isStopMoving, final MapleCharacter look, final String name) {
+ if (this.clone) {
+ return;
+ }
+ for (int i = 0; i < this.clones.length; ++i) {
+ if (this.clones[i].get() == null) {
+ final MapleCharacter newp = (look == null) ? this.cloneLooks() : look;
+ if (name != null) {
+ newp.setName(name);
+ }
+ this.map.addPlayer(newp);
+ this.map.broadcastMessage(MaplePacketCreator.updateCharLook(newp));
+ this.map.movePlayer(newp, this.getPosition());
+ this.clones[i] = new WeakReference(newp);
+ newp.setStopMoving(isStopMoving);
+ return;
+ }
+ }
+ }
+
+ public final void disposeClones() {
+ this.numClones = 0;
+ for (int i = 0; i < this.clones.length; ++i) {
+ if (this.clones[i].get() != null) {
+ this.map.removePlayer((MapleCharacter) this.clones[i].get());
+ ((MapleCharacter) this.clones[i].get()).getClient().disconnect(false, false);
+ this.clones[i] = new WeakReference(null);
+ ++this.numClones;
+ }
+ }
+ }
+
+ public final int getCloneSize() {
+ int z = 0;
+ for (final WeakReference clone1 : this.clones) {
+ if (clone1.get() != null) {
+ ++z;
+ }
+ }
+ return z;
+ }
+
+ public void spawnClones() {
+ if (this.numClones == 0 && this.stats.hasClone) {
+ this.cloneLook();
+ }
+ for (int i = 0; i < this.numClones; ++i) {
+ this.cloneLook();
+ }
+ this.numClones = 0;
+ }
+
+ public byte getNumClones() {
+ return this.numClones;
+ }
+
+ public final void spawnSavedPets() {
+ for (int i = 0; i < this.petStore.length; ++i) {
+ if (this.petStore[i] > -1) {
+ this.spawnPet(this.petStore[i], false, false);
+ }
+ }
+ this.client.sendPacket(PetPacket.petStatUpdate(this));
+ this.petStore = new byte[]{-1, -1, -1};
+ }
+
+ public final byte[] getPetStores() {
+ return this.petStore;
+ }
+
+ public void resetStats(final int str, final int dex, final int int_, final int luk) {
+ final Map statup = new EnumMap(MapleStat.class);
+ int total = this.stats.getStr() + this.stats.getDex() + this.stats.getLuk() + this.stats.getInt() + this.getRemainingAp();
+ total -= str;
+ this.stats.setStr((short) str);
+ total -= dex;
+ this.stats.setDex((short) dex);
+ total -= int_;
+ this.stats.setInt((short) int_);
+ total -= luk;
+ this.stats.setLuk((short) luk);
+ this.setRemainingAp((short) total);
+ statup.put(MapleStat.STR, (long) str);
+ statup.put(MapleStat.DEX, (long) dex);
+ statup.put(MapleStat.INT, (long) int_);
+ statup.put(MapleStat.LUK, (long) luk);
+ statup.put(MapleStat.AVAILABLEAP, (long) total);
+ this.client.sendPacket(MaplePacketCreator.updatePlayerStats(statup, false, this));
+ }
+
+ public Event_PyramidSubway getPyramidSubway() {
+ return this.pyramidSubway;
+ }
+
+ public void setPyramidSubway(final Event_PyramidSubway ps) {
+ this.pyramidSubway = ps;
+ }
+
+ public byte getSubcategory() {
+ if (this.job >= 430 && this.job <= 434) {
+ return 1;
+ }
+ return this.subcategory;
+ }
+
+ public int itemQuantity(final int itemid) {
+ return this.getInventory(GameConstants.getInventoryType(itemid)).countById(itemid);
+ }
+
+ public void setRPS(final RockPaperScissors rps) {
+ this.rps = rps;
+ }
+
+ public RockPaperScissors getRPS() {
+ return this.rps;
+ }
+
+ public long getNextConsume() {
+ return this.nextConsume;
+ }
+
+ public void setNextConsume(final long nc) {
+ this.nextConsume = nc;
+ }
+
+ public int getRank() {
+ return this.rank;
+ }
+
+ public int getRankMove() {
+ return this.rankMove;
+ }
+
+ public int getJobRank() {
+ return this.jobRank;
+ }
+
+ public int getJobRankMove() {
+ return this.jobRankMove;
+ }
+
+ public void dispelBuff() {
+ final LinkedList> allBuffs = new LinkedList(this.effects.entrySet());
+ for (final Entry mbsvh : allBuffs) {
+ final long startTime = ((MapleBuffStatValueHolder) mbsvh.getValue()).startTime;
+ final long localDuration = (long) ((MapleBuffStatValueHolder) mbsvh.getValue()).localDuration;
+ final long nowtime = System.currentTimeMillis();
+ if (startTime + localDuration - nowtime < 8000L) {
+ this.dispelBuff(((MapleBuffStatValueHolder) mbsvh.getValue()).skillid);
+ }
+ }
+ }
+
+ public void ForcechangeChannel(final int channel) {
+ final ChannelServer toch = ChannelServer.getInstance(channel);
+ try {
+ this.saveToDB(false, false);
+ } catch (Exception ex) {
+ FileoutputUtil.logToFile("logs/ForcechangeChannel保存数据异常.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getClient().getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.getClient().getAccountName() + " 账号ID " + this.getClient().getAccID() + " 角色名 " + this.getName() + " 角色ID " + this.getId());
+ FileoutputUtil.outError("logs/ForcechangeChannel保存数据异常.txt", (Throwable) ex);
+ }
+ if (toch == null || toch.isShutdown()) {
+ this.client.sendPacket(MaplePacketCreator.serverBlocked(1));
+ return;
+ }
+ this.changeRemoval();
+ this.dispelBuff();
+ final ChannelServer ch = ChannelServer.getInstance(this.client.getChannel());
+ if (this.getMessenger() != null) {
+ Messenger.silentLeaveMessenger(this.getMessenger().getId(), new MapleMessengerCharacter(this));
+ }
+ PlayerBuffStorage.addBuffsToStorage(this.getId(), this.getAllBuffs());
+ PlayerBuffStorage.addCooldownsToStorage(this.getId(), this.getCooldowns());
+ PlayerBuffStorage.addDiseaseToStorage(this.getId(), this.getAllDiseases());
+ World.channelChangeData(new CharacterTransfer(this), this.getId(), channel);
+ ch.removePlayer(this);
+ this.client.updateLoginState(6, this.client.getSessionIPAddress());
+ this.client.sendPacket(MaplePacketCreator.getChannelChange(this.client, Integer.parseInt(toch.getSocket().split(":")[1])));
+ this.getMap().removePlayer(this);
+ this.client.setPlayer(null);
+ this.client.setReceiving(false);
+ }
+
+ public void changeChannel(final int channel) {
+ final ChannelServer toch = ChannelServer.getInstance(channel);
+ try {
+ this.saveToDB(false, false);
+ } catch (Exception ex) {
+ FileoutputUtil.logToFile("logs/更换频道保存数据异常.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getClient().getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.getClient().getAccountName() + " 账号ID " + this.getClient().getAccID() + " 角色名 " + this.getName() + " 角色ID " + this.getId());
+ FileoutputUtil.outError("logs/更换频道保存数据异常.txt", (Throwable) ex);
+ }
+ if (channel == this.client.getChannel() || toch == null || toch.isShutdown()) {
+ this.client.sendPacket(MaplePacketCreator.serverBlocked(1));
+ return;
+ }
+ this.dispelBuff();
+ this.changeRemoval();
+ final ChannelServer ch = ChannelServer.getInstance(this.client.getChannel());
+ if (this.getMessenger() != null) {
+ Messenger.silentLeaveMessenger(this.getMessenger().getId(), new MapleMessengerCharacter(this));
+ }
+ PlayerBuffStorage.addBuffsToStorage(this.getId(), this.getAllBuffs());
+ PlayerBuffStorage.addCooldownsToStorage(this.getId(), this.getCooldowns());
+ PlayerBuffStorage.addDiseaseToStorage(this.getId(), this.getAllDiseases());
+ World.channelChangeData(new CharacterTransfer(this), this.getId(), channel);
+ if (ch != null) {
+ ch.removePlayer(this);
+ }
+ this.client.updateLoginState(6, this.client.getSessionIPAddress());
+ this.client.sendPacket(MaplePacketCreator.getChannelChange(this.client, Integer.parseInt(toch.getSocket().split(":")[1])));
+ this.getMap().removePlayer(this);
+ if (!LoginServer.CanLoginKey(this.getLoginKey(), this.getAccountID()) || (LoginServer.getLoginKey(this.getAccountID()) == null && !this.getLoginKey().isEmpty())) {
+ FileoutputUtil.logToFile("logs/Data/客戶端登录KEY异常.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.client.getSession().remoteAddress().toString().split(":")[0] + " 账号: " + this.client.getAccountName() + " 客戶端key:" + LoginServer.getLoginKey(this.getAccountID()) + " 服务端key:" + this.getLoginKey() + " 更换频道10");
+ Broadcast.broadcastGMMessage(MaplePacketCreator.serverNotice(6, "[GM 密语系统] 非法更换频道 账号 " + this.client.getAccountName()));
+ this.client.getSession().close();
+ return;
+ }
+ if (!LoginServer.CanServerKey(this.getServerKey(), this.getAccountID()) || (LoginServer.getServerKey(this.getAccountID()) == null && !this.getServerKey().isEmpty())) {
+ FileoutputUtil.logToFile("logs/Data/客戶端频道KEY异常.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.client.getSession().remoteAddress().toString().split(":")[0] + " 账号: " + this.client.getAccountName() + " 客戶端key:" + LoginServer.getServerKey(this.getAccountID()) + " 服务端key:" + this.getServerKey() + " 更换频道11");
+ Broadcast.broadcastGMMessage(MaplePacketCreator.serverNotice(6, "[GM 密语系统] 非法更换频道 账号 " + this.client.getAccountName()));
+ this.client.getSession().close();
+ return;
+ }
+ if (!LoginServer.CanClientKey(this.getClientKey(), this.getAccountID()) || (LoginServer.getClientKey(this.getAccountID()) == null && !this.getClientKey().isEmpty())) {
+ FileoutputUtil.logToFile("logs/Data/客戶端进入KEY异常.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.client.getSession().remoteAddress().toString().split(":")[0] + " 账号: " + this.client.getAccountName() + " 客戶端key:" + LoginServer.getClientKey(this.getAccountID()) + " 服务端key:" + this.getClientKey() + " 更换频道12");
+ Broadcast.broadcastGMMessage(MaplePacketCreator.serverNotice(6, "[GM 密语系统] 非法更换频道 账号 " + this.client.getAccountName()));
+ this.client.getSession().close();
+ return;
+ }
+ final List charNamesa = this.client.loadCharacterNamesByCharId(this.getId());
+ for (final ChannelServer cs : ChannelServer.getAllInstances()) {
+ for (final String name : charNamesa) {
+ if (cs.getPlayerStorage().getCharacterByName(name) != null) {
+ FileoutputUtil.logToFile("logs/Data/非法登录.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.client.getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.client.getAccountName() + "更换频道1");
+ Broadcast.broadcastGMMessage(MaplePacketCreator.serverNotice(6, "[GM 密语系统] 非法更换频道 账号 " + this.client.getAccountName()));
+ this.client.getSession().close();
+ return;
+ }
+ }
+ }
+ for (final String name2 : charNamesa) {
+ if (CashShopServer.getPlayerStorage().getCharacterByName(name2) != null) {
+ FileoutputUtil.logToFile("logs/Data/非法登录.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.client.getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.client.getAccountName() + "更换频道2");
+ Broadcast.broadcastGMMessage(MaplePacketCreator.serverNotice(6, "[GM 密语系统] 非法更换频道 账号 " + this.client.getAccountName()));
+ this.client.getSession().close();
+ return;
+ }
+ }
+ final List charNames = this.client.loadCharacterNamesByCharId(this.getId());
+ for (final ChannelServer cs2 : ChannelServer.getAllInstances()) {
+ for (final String name3 : charNames) {
+ final MapleCharacter character = cs2.getPlayerStorage().getCharacterByName(name3);
+ if (character != null) {
+ FileoutputUtil.logToFile("logs/Data/非法登录.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.client.getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.client.getAccountName() + "更换频道3");
+ Broadcast.broadcastGMMessage(MaplePacketCreator.serverNotice(6, "[GM 密语系统] 非法更换频道 账号 " + this.client.getAccountName()));
+ this.client.getSession().close();
+ character.getClient().getSession().close();
+ }
+ }
+ }
+ for (final String name4 : charNames) {
+ final MapleCharacter charactercs = CashShopServer.getPlayerStorage().getCharacterByName(name4);
+ if (charactercs != null) {
+ FileoutputUtil.logToFile("logs/Data/非法登录.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.client.getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.client.getAccountName() + "更换频道4");
+ Broadcast.broadcastGMMessage(MaplePacketCreator.serverNotice(6, "[GM 密语系统] 非法更换频道 账号 " + this.client.getAccountName()));
+ this.client.getSession().close();
+ charactercs.getClient().getSession().close();
+ }
+ }
+ this.client.setPlayer(null);
+ this.client.setReceiving(false);
+ this.expirationTask(true, false);
+ }
+
+ public void expandInventory(final byte type, final int amount) {
+ final MapleInventory inv = this.getInventory(MapleInventoryType.getByType(type));
+ inv.addSlot((byte) amount);
+ this.client.sendPacket(MaplePacketCreator.getSlotUpdate(type, inv.getSlotLimit()));
+ }
+
+ public boolean allowedToTarget(final MapleCharacter other) {
+ return other != null && (!other.isHidden() || this.getGMLevel() >= other.getGMLevel());
+ }
+
+ public int getFollowId() {
+ return this.followid;
+ }
+
+ public void setFollowId(final int fi) {
+ this.followid = fi;
+ if (fi == 0) {
+ this.followinitiator = false;
+ this.followon = false;
+ }
+ }
+
+ public void setFollowInitiator(final boolean fi) {
+ this.followinitiator = fi;
+ }
+
+ public void setFollowOn(final boolean fi) {
+ this.followon = fi;
+ }
+
+ public boolean isFollowOn() {
+ return this.followon;
+ }
+
+ public boolean isFollowInitiator() {
+ return this.followinitiator;
+ }
+
+ public void checkFollow() {
+ if (this.followon) {
+ this.map.broadcastMessage(MaplePacketCreator.followEffect(this.id, 0, null));
+ this.map.broadcastMessage(MaplePacketCreator.followEffect(this.followid, 0, null));
+ final MapleCharacter tt = this.map.getCharacterById(this.followid);
+ this.client.sendPacket(MaplePacketCreator.getFollowMessage("Follow canceled."));
+ if (tt != null) {
+ tt.setFollowId(0);
+ tt.getClient().sendPacket(MaplePacketCreator.getFollowMessage("Follow canceled."));
+ }
+ this.setFollowId(0);
+ }
+ }
+
+ public int getMarriageId() {
+ return this.marriageId;
+ }
+
+ public void setMarriageId(final int mi) {
+ this.marriageId = mi;
+ }
+
+ public int getMarriageItemId() {
+ return this.marriageItemId;
+ }
+
+ public void setMarriageItemId(final int mi) {
+ this.marriageItemId = mi;
+ }
+
+ public boolean isStaff() {
+ return this.gmLevel > PlayerGMRank.普通玩家.getLevel();
+ }
+
+ public boolean startPartyQuest(final int questid) {
+ boolean ret = false;
+ if (!this.quests.containsKey(MapleQuest.getInstance(questid)) || !this.questinfo.containsKey(Integer.valueOf(questid))) {
+ final MapleQuestStatus status = this.getQuestNAdd(MapleQuest.getInstance(questid));
+ status.setStatus((byte) 1);
+ this.updateQuest(status);
+ switch (questid) {
+ case 1300:
+ case 1301:
+ case 1302: {
+ this.updateInfoQuest(questid, "min=0;sec=0;date=0000-00-00;have=0;rank=F;try=0;cmp=0;CR=0;VR=0;gvup=0;vic=0;lose=0;draw=0");
+ break;
+ }
+ case 1204: {
+ this.updateInfoQuest(questid, "min=0;sec=0;date=0000-00-00;have0=0;have1=0;have2=0;have3=0;rank=F;try=0;cmp=0;CR=0;VR=0");
+ break;
+ }
+ case 1206: {
+ this.updateInfoQuest(questid, "min=0;sec=0;date=0000-00-00;have0=0;have1=0;rank=F;try=0;cmp=0;CR=0;VR=0");
+ break;
+ }
+ default: {
+ this.updateInfoQuest(questid, "min=0;sec=0;date=0000-00-00;have=0;rank=F;try=0;cmp=0;CR=0;VR=0");
+ break;
+ }
+ }
+ ret = true;
+ }
+ return ret;
+ }
+
+ public String getOneInfo(final int questid, final String key) {
+ if (!this.questinfo.containsKey(Integer.valueOf(questid)) || key == null) {
+ return null;
+ }
+ final String[] split3;
+ final String[] split = split3 = ((String) this.questinfo.get(Integer.valueOf(questid))).split(";");
+ for (final String x : split3) {
+ final String[] split2 = x.split("=");
+ if (split2.length == 2 && split2[0].equals(key)) {
+ return split2[1];
+ }
+ }
+ return null;
+ }
+
+ public void updateOneInfo(final int questid, final String key, final String value) {
+ if (!this.questinfo.containsKey(Integer.valueOf(questid)) || key == null || value == null) {
+ return;
+ }
+ final String[] split = ((String) this.questinfo.get(Integer.valueOf(questid))).split(";");
+ boolean changed = false;
+ final StringBuilder newQuest = new StringBuilder();
+ for (final String x : split) {
+ final String[] split2 = x.split("=");
+ if (split2.length == 2) {
+ if (split2[0].equals(key)) {
+ newQuest.append(key).append("=").append(value);
+ } else {
+ newQuest.append(x);
+ }
+ newQuest.append(";");
+ changed = true;
+ }
+ }
+ this.updateInfoQuest(questid, changed ? newQuest.toString().substring(0, newQuest.toString().length() - 1) : newQuest.toString());
+ }
+
+ public void recalcPartyQuestRank(final int questid) {
+ if (!this.startPartyQuest(questid)) {
+ final String oldRank = this.getOneInfo(questid, "rank");
+ if (oldRank == null || oldRank.equals("S")) {
+ return;
+ }
+ final String s = oldRank;
+ String newRank = null;
+ switch (s) {
+ case "A": {
+ newRank = "S";
+ break;
+ }
+ case "B": {
+ newRank = "A";
+ break;
+ }
+ case "C": {
+ newRank = "B";
+ break;
+ }
+ case "D": {
+ newRank = "C";
+ break;
+ }
+ case "F": {
+ newRank = "D";
+ break;
+ }
+ default: {
+ return;
+ }
+ }
+ final List>> questInfo = MapleQuest.getInstance(questid).getInfoByRank(newRank);
+ for (final Pair> q : questInfo) {
+ boolean found = false;
+ final String val = this.getOneInfo(questid, (String) (q.right).left);
+ if (val == null) {
+ return;
+ }
+ int vall;
+ try {
+ vall = Integer.parseInt(val);
+ } catch (NumberFormatException e) {
+ return;
+ }
+ final String s2 = (String) q.left;
+ switch (s2) {
+ case "less": {
+ found = (vall < ((Integer) (q.right).right).intValue());
+ break;
+ }
+ case "more": {
+ found = (vall > ((Integer) (q.right).right).intValue());
+ break;
+ }
+ case "equal": {
+ found = (vall == ((Integer) (q.right).right).intValue());
+ break;
+ }
+ }
+ if (!found) {
+ return;
+ }
+ }
+ this.updateOneInfo(questid, "rank", newRank);
+ }
+ }
+
+ public void tryPartyQuest(final int questid) {
+ try {
+ this.startPartyQuest(questid);
+ this.pqStartTime = System.currentTimeMillis();
+ this.updateOneInfo(questid, "try", String.valueOf(Integer.parseInt(this.getOneInfo(questid, "try")) + 1));
+ } catch (Exception e) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e, "tryPartyQuest error");
+ }
+ }
+
+ public void cmpPartyQuest(final int questid, final int sl) {
+ this.updateOneInfo(questid, "cmp", String.valueOf(Integer.parseInt(this.getOneInfo(questid, "cmp")) - sl));
+ }
+
+ public void endPartyQuest(final int questid) {
+ try {
+ this.startPartyQuest(questid);
+ if (this.pqStartTime > 0L) {
+ final long changeTime = System.currentTimeMillis() - this.pqStartTime;
+ final int mins = (int) (changeTime / 1000L / 60L);
+ final int secs = (int) (changeTime / 1000L % 60L);
+ final int mins2 = Integer.parseInt(this.getOneInfo(questid, "min"));
+ final int secs2 = Integer.parseInt(this.getOneInfo(questid, "sec"));
+ if (mins2 <= 0 || mins < mins2) {
+ this.updateOneInfo(questid, "min", String.valueOf(mins));
+ this.updateOneInfo(questid, "sec", String.valueOf(secs));
+ this.updateOneInfo(questid, "date", FilePrinter.getLocalDateString());
+ }
+ final int newCmp = Integer.parseInt(this.getOneInfo(questid, "cmp")) + 1;
+ this.updateOneInfo(questid, "cmp", String.valueOf(newCmp));
+ this.updateOneInfo(questid, "CR", String.valueOf((int) Math.ceil((double) newCmp * 100.0 / (double) Integer.parseInt(this.getOneInfo(questid, "try")))));
+ this.recalcPartyQuestRank(questid);
+ this.pqStartTime = 0L;
+ }
+ } catch (Exception e) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e, "endPartyQuest error");
+ }
+ }
+
+ public void havePartyQuest(final int itemId) {
+ int index = -1;
+ int questid = 0;
+ switch (itemId) {
+ case 1002798: {
+ questid = 1200;
+ break;
+ }
+ case 1072369: {
+ questid = 1201;
+ break;
+ }
+ case 1022073: {
+ questid = 1202;
+ break;
+ }
+ case 1082232: {
+ questid = 1203;
+ break;
+ }
+ case 1002571:
+ case 1002572:
+ case 1002573:
+ case 1002574: {
+ questid = 1204;
+ index = itemId - 1002571;
+ break;
+ }
+ case 1122010: {
+ questid = 1205;
+ break;
+ }
+ case 1032060:
+ case 1032061: {
+ questid = 1206;
+ index = itemId - 1032060;
+ break;
+ }
+ case 3010018: {
+ questid = 1300;
+ break;
+ }
+ case 1122007: {
+ questid = 1301;
+ break;
+ }
+ case 1122058: {
+ questid = 1302;
+ break;
+ }
+ default: {
+ return;
+ }
+ }
+ this.startPartyQuest(questid);
+ this.updateOneInfo(questid, "have" + ((index == -1) ? "" : Integer.valueOf(index)), "1");
+ }
+
+ public void resetStatsByJob(final boolean beginnerJob) {
+ final int baseJob = beginnerJob ? (this.job % 1000) : (this.job % 1000 / 100 * 100);
+ if (baseJob == 100) {
+ this.resetStats(25, 4, 4, 4);
+ } else if (baseJob == 200) {
+ this.resetStats(4, 4, 25, 4);
+ } else if (baseJob == 300 || baseJob == 400) {
+ this.resetStats(4, 25, 4, 4);
+ } else if (baseJob == 400) {
+ this.resetStats(4, 4, 4, 25);
+ } else if (baseJob == 500) {
+ this.resetStats(4, 4, 4, 4);
+ }
+ }
+
+ public void setGMLevel(final byte g) {
+ this.gmLevel = g;
+ }
+
+ public int get刷钱模式() {
+ return this.刷钱模式;
+ }
+
+ public void set刷钱模式(final int invinc) {
+ this.刷钱模式 = invinc;
+ }
+
+ public boolean hasSummon() {
+ return this.hasSummon;
+ }
+
+ public void setHasSummon(final boolean summ) {
+ this.hasSummon = summ;
+ }
+
+ public void removeDoor() {
+ final MapleDoor door = (MapleDoor) this.getDoors().iterator().next();
+ for (final MapleCharacter chr : door.getTarget().getCharactersThreadsafe()) {
+ door.sendDestroyData(chr.getClient());
+ }
+ for (final MapleCharacter chr : door.getTown().getCharactersThreadsafe()) {
+ door.sendDestroyData(chr.getClient());
+ }
+ for (final MapleDoor destroyDoor : this.getDoors()) {
+ door.getTarget().removeMapObject((MapleMapObject) destroyDoor);
+ door.getTown().removeMapObject((MapleMapObject) destroyDoor);
+ }
+ this.clearDoors();
+ }
+
+ public void changeRemoval() {
+ this.changeRemoval(false);
+ }
+
+ public void changeRemoval(final boolean dc) {
+ if (this.getTrade() != null) {
+ if (this.getTrade().getPartner() != null) {
+ final MapleTrade local = this.getTrade();
+ final MapleTrade partners = local.getPartner();
+ if (local.isLocked() && partners.isLocked()) {
+ this.client.getSession().write(MaplePacketCreator.enableActions());
+ } else {
+ MapleTrade.cancelTrade(this.getTrade(), this.getClient());
+ }
+ } else {
+ MapleTrade.cancelTrade(this.getTrade(), this.client);
+ }
+ }
+ if (this.getCheatTracker() != null) {
+ this.getCheatTracker().dispose();
+ }
+ if (!dc) {
+ this.cancelEffectFromBuffStat(MapleBuffStat.MONSTER_RIDING);
+ this.cancelEffectFromBuffStat(MapleBuffStat.PUPPET);
+ }
+ if (this.getPyramidSubway() != null) {
+ this.getPyramidSubway().dispose(this);
+ }
+ if (this.playerShop != null && !dc) {
+ this.playerShop.removeVisitor(this);
+ if (this.playerShop.isOwner(this)) {
+ this.playerShop.setOpen(true);
+ }
+ }
+ if (!this.getDoors().isEmpty()) {
+ this.removeDoor();
+ }
+ this.disposeClones();
+ NPCScriptManager.getInstance().dispose(this.client);
+ }
+
+ public void updateTick(final int newTick) {
+ if (this.anticheat != null) {
+ this.anticheat.updateTick(newTick);
+ }
+ }
+
+ public boolean canUseFamilyBuff(final MapleFamilyBuffEntry buff) {
+ final MapleQuestStatus stat = this.getQuestNAdd(MapleQuest.getInstance(buff.questID));
+ if (stat.getCustomData() == null) {
+ stat.setCustomData("0");
+ }
+ return Long.parseLong(stat.getCustomData()) + 86400000L < System.currentTimeMillis();
+ }
+
+ public void useFamilyBuff(final MapleFamilyBuffEntry buff) {
+ final MapleQuestStatus stat = this.getQuestNAdd(MapleQuest.getInstance(buff.questID));
+ stat.setCustomData(String.valueOf(System.currentTimeMillis()));
+ }
+
+ public List> usedBuffs() {
+ final List> used = (List>) new ArrayList();
+ for (final MapleFamilyBuffEntry buff : MapleFamilyBuff.getBuffEntry()) {
+ if (!this.canUseFamilyBuff(buff)) {
+ used.add(new Pair(Integer.valueOf(buff.index), Integer.valueOf(buff.count)));
+ }
+ }
+ return used;
+ }
+
+ public String getTeleportName() {
+ return this.teleportname;
+ }
+
+ public void setTeleportName(final String tname) {
+ this.teleportname = tname;
+ }
+
+ public int getNoJuniors() {
+ if (this.mfc == null) {
+ return 0;
+ }
+ return this.mfc.getNoJuniors();
+ }
+
+ public MapleFamilyCharacter getMFC() {
+ return this.mfc;
+ }
+
+ public void makeMFC(final int familyid, final int seniorid, final int junior1, final int junior2) {
+ if (familyid > 0) {
+ final MapleFamily f = Family.getFamily(familyid);
+ if (f == null) {
+ this.mfc = null;
+ } else {
+ this.mfc = f.getMFC(this.id);
+ if (this.mfc == null) {
+ this.mfc = f.addFamilyMemberInfo(this, seniorid, junior1, junior2);
+ }
+ if (this.mfc.getSeniorId() != seniorid) {
+ this.mfc.setSeniorId(seniorid);
+ }
+ if (this.mfc.getJunior1() != junior1) {
+ this.mfc.setJunior1(junior1);
+ }
+ if (this.mfc.getJunior2() != junior2) {
+ this.mfc.setJunior2(junior2);
+ }
+ }
+ } else {
+ this.mfc = null;
+ }
+ }
+
+ public void setFamily(final int newf, final int news, final int newj1, final int newj2) {
+ if (this.mfc == null || newf != this.mfc.getFamilyId() || news != this.mfc.getSeniorId() || newj1 != this.mfc.getJunior1() || newj2 != this.mfc.getJunior2()) {
+ this.makeMFC(newf, news, newj1, newj2);
+ }
+ }
+
+ public int maxBattleshipHP(final int skillid) {
+ return this.getSkillLevel(skillid) * 5000 + (this.getLevel() - 120) * 3000;
+ }
+
+ public int currentBattleshipHP() {
+ return this.battleshipHP;
+ }
+
+ public int getGachExp() {
+ return this.gachexp;
+ }
+
+ public void setGachExp(final int ge) {
+ this.gachexp = ge;
+ }
+
+ public void sendEnglishQuiz(final String msg) {
+ this.client.sendPacket(MaplePacketCreator.englishQuizMsg(msg));
+ }
+
+ public void fakeRelog() {
+ final int chan = this.client.getChannel();
+ this.client.sendPacket(MaplePacketCreator.getCharInfo(this));
+ final MapleMap mapp = this.getMap();
+ mapp.removePlayer(this);
+ mapp.addPlayer(this);
+ this.ForcechangeChannel(chan);
+ }
+
+ public String getcharmessage() {
+ return this.charmessage;
+ }
+
+ public void setcharmessage(String s) {
+ if (s.getBytes().length >= 24) {
+ s = s.substring(0, 24);
+ }
+ this.charmessage = s;
+ }
+
+ public int getexpression() {
+ return this.expression;
+ }
+
+ public void setexpression(final int s) {
+ this.expression = s;
+ }
+
+ public int getconstellation() {
+ return this.constellation;
+ }
+
+ public void setconstellation(final int s) {
+ this.constellation = s;
+ }
+
+ public int getblood() {
+ return this.blood;
+ }
+
+ public void setblood(final int s) {
+ this.blood = s;
+ }
+
+ public int getmonth() {
+ return this.month;
+ }
+
+ public void setmonth(final int s) {
+ this.month = s;
+ }
+
+ public int getday() {
+ return this.day;
+ }
+
+ public void setday(final int s) {
+ this.day = s;
+ }
+
+ public int getTeam() {
+ return this.coconutteam;
+ }
+
+ public int getBeans() {
+ return this.beans;
+ }
+
+ public void gainBeans(final int s) {
+ this.beans += s;
+ }
+
+ public void setBeans(final int s) {
+ this.beans = s;
+ }
+
+ public int getBeansNum() {
+ return this.beansNum;
+ }
+
+ public void setBeansNum(final int beansNum) {
+ this.beansNum = beansNum;
+ }
+
+ public int getBeansRange() {
+ return this.beansRange;
+ }
+
+ public void setBeansRange(final int beansRange) {
+ this.beansRange = beansRange;
+ }
+
+ public boolean isCanSetBeansNum() {
+ return this.canSetBeansNum;
+ }
+
+ public void setCanSetBeansNum(final boolean canSetBeansNum) {
+ this.canSetBeansNum = canSetBeansNum;
+ }
+
+ public boolean getBeansStart() {
+ return this.beansStart;
+ }
+
+ public void setBeansStart(final boolean beansStart) {
+ this.beansStart = beansStart;
+ }
+
+ public boolean haveGM() {
+ return this.gmLevel >= 2 && this.gmLevel <= 3;
+ }
+
+ public void setprefix(final String prefix) {
+ this.prefix = prefix;
+ }
+
+ public String getPrefix() {
+ return this.prefix;
+ }
+
+ public void gainItem(final int code, final int amount) {
+ MapleInventoryManipulator.addById(this.client, code, (short) amount, null);
+ }
+
+ public void gainItem(final int code) {
+ MapleInventoryManipulator.addById(this.client, code, (short) 1, null);
+ }
+
+ public void giftMedal(final int id) {
+ if (!this.getInventory(MapleInventoryType.EQUIP).isFull() && this.getInventory(MapleInventoryType.EQUIP).countById(id) == 0 && this.getInventory(MapleInventoryType.EQUIPPED).countById(id) == 0) {
+ MapleInventoryManipulator.addById(this.client, id, (short) 1);
+ Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(6, "[恭喜]" + this.getName() + "刚才得到了 " + MapleItemInformationProvider.getInstance().getName(id) + "!"));
+ } else if (this.getInventory(MapleInventoryType.EQUIP).countById(id) == 0 && this.getInventory(MapleInventoryType.EQUIPPED).countById(id) == 0) {
+ MapleInventoryManipulator.drop(this.client, MapleInventoryType.EQUIP, (short) 1, (short) 1);
+ MapleInventoryManipulator.addById(this.client, id, (short) 1);
+ Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(6, "[恭喜]" + this.getName() + "刚才得到了 " + MapleItemInformationProvider.getInstance().getName(id) + "!"));
+ }
+ }
+
+ public final void showInstruction(final String msg, final int width, final int height) {
+ this.client.getSession().writeAndFlush(MaplePacketCreator.sendHint(msg, width, height));
+ }
+
+ public void removeItem(final int id, final int quantity) {
+ MapleInventoryManipulator.removeById(this.client, GameConstants.getInventoryType(id), id, -quantity, true, false);
+ this.client.sendPacket(MaplePacketCreator.getShowItemGain(id, (short) quantity, true));
+ }
+
+ public String getVipName() {
+ String name = "";
+ if (this.getVip() > 0) {
+ name = ServerConfig.getVipMedalName(this.getVip());
+ }
+ return name;
+ }
+
+ public String getNick() {
+ String name = "";
+ if (this.getOneTimeLog("关闭VIP星星数显示") < 1 && this.getVipMedal() && this.getVip() > 0) {
+ name += this.getVipName();
+ }
+ if (this.getGMLevel() > 0) {
+ name += "";
+ }
+ return name;
+ }
+
+ public boolean getVipMedal() {
+ return this.Vip_Medal;
+ }
+
+ public void setVipMedat(final boolean x) {
+ this.Vip_Medal = x;
+ }
+
+ public void setVipMedal(final boolean x) {
+ this.Vip_Medal = x;
+ }
+
+ public int getVipExpRate() {
+ if (this.getVip() <= 5) {
+ return (this.getVip() == 0) ? 0 : ((this.getVip() + 1) * 5);
+ }
+ return (this.getVip() == 0) ? 0 : ((this.getVip() + 1) * 5);
+ }
+
+ public void control_精灵商人(final boolean control) {
+ this.精灵商人购买开关 = control;
+ }
+
+ public void control_玩家私聊(final boolean control) {
+ this.玩家私聊开关 = control;
+ }
+
+ public void control_玩家密语(final boolean control) {
+ this.玩家密语开关 = control;
+ }
+
+ public void control_好友聊天(final boolean control) {
+ this.好友聊天开关 = control;
+ }
+
+ public void control_队伍聊天(final boolean control) {
+ this.队伍聊天开关 = control;
+ }
+
+ public void control_公会聊天(final boolean control) {
+ this.公会聊天开关 = control;
+ }
+
+ public void control_联盟聊天(final boolean control) {
+ this.联盟聊天开关 = control;
+ }
+
+ public void control_吸怪讯息(final boolean control) {
+ this.GM吸怪讯息开关 = control;
+ }
+
+ public boolean get_control_精灵商人() {
+ return this.精灵商人购买开关;
+ }
+
+ public boolean get_control_玩家私聊() {
+ return this.玩家私聊开关;
+ }
+
+ public boolean get_control_玩家密语() {
+ return this.玩家密语开关;
+ }
+
+ public boolean get_control_好友聊天() {
+ return this.好友聊天开关;
+ }
+
+ public boolean get_control_队伍聊天() {
+ return this.队伍聊天开关;
+ }
+
+ public boolean get_control_公会聊天() {
+ return this.公会聊天开关;
+ }
+
+ public boolean get_control_联盟聊天() {
+ return this.联盟聊天开关;
+ }
+
+ public boolean get_control_吸怪讯息() {
+ return this.GM吸怪讯息开关;
+ }
+
+ public int getDiseaseSize() {
+ return this.diseases.size();
+ }
+
+ public int getMSG() {
+ return this.MSG;
+ }
+
+ public void setMSG(final int x) {
+ this.MSG = x;
+ }
+
+ public void addMSG() {
+ ++this.MSG;
+ }
+
+ public void fly() {
+ }
+
+ public final boolean CanStorage() {
+ if (this.lastStorageTime + 1000L > System.currentTimeMillis()) {
+ return false;
+ }
+ this.lastStorageTime = System.currentTimeMillis();
+ return true;
+ }
+
+ public final boolean canHP() {
+ if (this.lastHPTime + 5000L > System.currentTimeMillis()) {
+ return false;
+ }
+ this.lastHPTime = System.currentTimeMillis();
+ return true;
+ }
+
+ public final boolean canMP() {
+ if (this.lastMPTime + 5000L > System.currentTimeMillis()) {
+ return false;
+ }
+ this.lastMPTime = System.currentTimeMillis();
+ return true;
+ }
+
+ public final boolean canUseMD() {
+ if (this.lastMDTime + 5000L > System.currentTimeMillis()) {
+ return false;
+ }
+ this.lastMDTime = System.currentTimeMillis();
+ return true;
+ }
+
+ public void add打怪() {
+ ++this.打怪;
+ }
+
+ public int get打怪() {
+ return this.打怪;
+ }
+
+ public void add吸怪() {
+ ++this.吸怪;
+ }
+
+ public int get吸怪() {
+ return this.吸怪;
+ }
+
+ public void addFly_吸怪() {
+ ++this.FLY_吸怪;
+ }
+
+ public int getFly_吸怪() {
+ return this.FLY_吸怪;
+ }
+
+ public int Aran_ReduceCombo(final int skill) {
+ int reduce = 0;
+ switch (skill) {
+ case 21100004:
+ case 21100005: {
+ reduce = 1;
+ break;
+ }
+ case 21110004: {
+ reduce = 1;
+ break;
+ }
+ case 21120006:
+ case 21120007: {
+ reduce = 1;
+ break;
+ }
+ }
+ return reduce;
+ }
+
+ public int getAcash() {
+ return this.getAcash(this);
+ }
+
+ public int getAcash(final MapleCharacter chr) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select Acash from Accounts Where id = " + chr.getClient().getAccID());
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("Acash");
+ } catch (Exception ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("Acash");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ System.err.println("[getAcash]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "getAcash");
+ System.err.println("[getAcash]" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return x;
+ }
+
+ public void setAcash(final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set Acash = ? Where id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("[Acash]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex2, "SetAcash");
+ System.err.println("[setAcash]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public int getCZJF() {
+ return this.getCZJF(this);
+ }
+
+ public int getCZJF(final MapleCharacter chr) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select CZJF from Accounts Where id = " + chr.getClient().getAccID());
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("CZJF");
+ } catch (Exception ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("CZJF");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ System.err.println("[getCZJF]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "getCZJF");
+ System.err.println("[getCZJF]" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return x;
+ }
+
+ public void setCZJF(final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set CZJF = ? Where id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("[CZJF]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex2, "SetCZJF");
+ System.err.println("[setCZJF]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public int getTGJF() {
+ return this.getTGJF(this);
+ }
+
+ public int getTGJF(final MapleCharacter chr) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select TGJF from Accounts Where id = " + chr.getClient().getAccID());
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("TGJF");
+ } catch (Exception ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("TGJF");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ System.err.println("[getTGJF]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "getTGJF");
+ System.err.println("[getTGJF]" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return x;
+ }
+
+ public void setTGJF(final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set TGJF = ? Where id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("[TGJF]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex2, "SetTGJFF");
+ System.err.println("[setTGJF]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public int getTJJF() {
+ return this.getTJJF(this);
+ }
+
+ public int getTJJF(final MapleCharacter chr) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select TJJF from Accounts Where id = " + chr.getClient().getAccID());
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("TJJF");
+ } catch (Exception ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("TJJF");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ System.err.println("[getTJJF]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "getTJJF");
+ System.err.println("[getTJJF]" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return x;
+ }
+
+ public void setTJJF(final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set TJJF = ? Where id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("[TJJF]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex2, "SetTJJFF");
+ System.err.println("[setTJJF]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public void modifyJF(final int type, final int quantity) {
+ switch (type) {
+ case 1: {
+ final int CZJF = this.getCZJF();
+ if (CZJF + quantity < 0) {
+ return;
+ }
+ this.setCZJF(CZJF + quantity);
+ break;
+ }
+ case 2: {
+ final int TGJF = this.getTGJF();
+ if (TGJF + quantity < 0) {
+ return;
+ }
+ this.setTGJF(TGJF + quantity);
+ break;
+ }
+ case 3: {
+ final int TJJF = this.getTJJF();
+ if (TJJF + quantity < 0) {
+ return;
+ }
+ this.setTJJF(TJJF + quantity);
+ break;
+ }
+ case 4: {
+ final int DDJF = this.getDDJF();
+ if (DDJF + quantity < 0) {
+ return;
+ }
+ this.setDDJF(DDJF + quantity);
+ break;
+ }
+ }
+ }
+
+ public boolean getAuto吸怪() {
+ return this.auto吸怪;
+ }
+
+ public void setAuto吸怪(final boolean x) {
+ this.auto吸怪 = x;
+ }
+
+ public void warpAuto吸怪(final MapleCharacter chr_) {
+ final MapleCharacter chr = this;
+ try {
+ if (chr.getMapId() != chr_.getMapId()) {
+ chr.changeMap(chr_.getMapId());
+ chr.changeMap(chr_.getMap(), chr_.getMap().findClosestSpawnpoint(chr_.getPosition()));
+ }
+ if (chr.getClient().getChannel() != chr_.getClient().getChannel()) {
+ chr.changeChannel(chr_.getClient().getChannel());
+ }
+ } catch (Exception ex) {
+ }
+ }
+
+ public void setDebugMessage(final boolean control) {
+ this.DebugMessage = control;
+ }
+
+ public boolean getDebugMessage() {
+ return this.DebugMessage;
+ }
+
+ public void RemoveHired() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("Delete From hiredmerch Where characterid = ?");
+ ps.setInt(1, this.id);
+ ps.execute();
+ ps = con.prepareStatement("Delete From hiredmerchitems Where characterid = ?");
+ ps.setInt(1, this.id);
+ ps.execute();
+ ps.close();
+ } catch (Exception ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "RemoveHired");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+
+ public final void maxSkills() {
+ for (final ISkill skil : SkillFactory.getAllSkills()) {
+ this.changeSkillLevel(skil, skil.getMaxLevel(), skil.getMaxLevel());
+ }
+ }
+
+ public final void maxSkillsa() {
+ for (final ISkill skil : SkillFactory.getAllSkills()) {
+ if (skil.getId() != 5121003 && skil.getId() != 5111005 && skil.getId() != 15111002) {
+ this.changeSkillLevel(skil, skil.getMaxLevel(), skil.getMaxLevel());
+ }
+ }
+ }
+
+ public final void clearSkills() {
+ for (final ISkill skil : SkillFactory.getAllSkills()) {
+ this.changeSkillLevel(skil, (byte) 0, (byte) 0);
+ }
+ deleteskillmacros();
+ }
+
+ public final void deleteskillmacros() {
+ try {
+ String format = String.format("DELETE FROM skillmacros WHERE characterid=%s", this.id);
+ final Connection con = DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement(format);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex2) {
+ System.err.println("清除宏出错" + Ex2);
+ }
+ }
+
+ public final void LearnSameSkill(final MapleCharacter victim) {
+ for (final ISkill skil : SkillFactory.getAllSkills()) {
+ if (victim.getSkillLevel(skil) > 0) {
+ this.changeSkillLevel(skil, victim.getSkillLevel(skil), victim.getMasterLevel(skil));
+ }
+ }
+ }
+
+ public final void openSkill(final MapleCharacter victim) {
+ for (final ISkill skil : SkillFactory.getAllSkills()) {
+ if (victim.getSkillLevel(skil) < 1) {
+ this.changeSkillLevel(skil, (byte) 0, (byte) 10);
+ }
+ }
+ }
+
+ public int getStr() {
+ return this.getStat().getStr();
+ }
+
+ public int getInt() {
+ return this.getStat().getInt();
+ }
+
+ public int getLuk() {
+ return this.getStat().getLuk();
+ }
+
+ public int getDex() {
+ return this.getStat().getDex();
+ }
+
+ public int getHp() {
+ return this.getStat().getHp();
+ }
+
+ public int getMp() {
+ return this.getStat().getMp();
+ }
+
+ public int getMaxHp() {
+ return this.getStat().getMaxHp();
+ }
+
+ public int getMaxMp() {
+ return this.getStat().getMaxMp();
+ }
+
+ public void setHp(final int amount) {
+ this.getStat().setHp(amount);
+ }
+
+ public void setMp(final int amount) {
+ this.getStat().setMp(amount);
+ }
+
+ public void setMaxHp(final int amount) {
+ this.getStat().setMaxHp((short) amount);
+ }
+
+ public void setMaxMp(final int amount) {
+ this.getStat().setMaxMp((short) amount);
+ }
+
+ public void setStr(final int str) {
+ this.stats.str = (short) str;
+ this.stats.recalcLocalStats(false);
+ }
+
+ public void setLuk(final int luk) {
+ this.stats.luk = (short) luk;
+ this.stats.recalcLocalStats(false);
+ }
+
+ public void setDex(final int dex) {
+ this.stats.dex = (short) dex;
+ this.stats.recalcLocalStats(false);
+ }
+
+ public void setInt(final int int_) {
+ this.stats.int_ = (short) int_;
+ this.stats.recalcLocalStats(false);
+ }
+
+ public void setMeso(final int mesos) {
+ this.meso = mesos;
+ }
+
+ public void updateFame() {
+ this.updateSingleStat(MapleStat.FAME, (int) this.getFame());
+ }
+
+ public boolean inBossMap() {
+ return MapConstants.inBossMap(this.getMapId());
+ }
+
+ public static boolean isVpn(final String ip) {
+ switch (ip) {
+ case "/1.34.145.220":
+ case "/59.125.5.52":
+ case "/59.126.97.123":
+ case "/60.251.73.100":
+ case "/61.219.216.173":
+ case "/61.219.216.174":
+ case "/61.227.252.169":
+ case "/61.228.228.128": {
+ return true;
+ }
+ default: {
+ return false;
+ }
+ }
+ }
+
+ public boolean isKOC() {
+ return this.job >= 1000 && this.job < 2000;
+ }
+
+ public boolean isAran() {
+ return this.job >= 2000 && this.job <= 2112 && this.job != 2001;
+ }
+
+ public boolean isAdventurer() {
+ return this.job >= 0 && this.job < 1000;
+ }
+
+ public boolean isCygnus() {
+ return this.job >= 1000 && this.job <= 1512;
+ }
+
+ public boolean isGod() {
+ return this.gmLevel >= 100;
+ }
+
+ public static String getCharacterNameById(final int id) {
+ String name = null;
+ final MapleCharacter chr = getOnlineCharacterById(id);
+ if (chr != null) {
+ return chr.getName();
+ }
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = null;
+ final Statement stmt = con.createStatement();
+ ps = con.prepareStatement("select name from characters where id = ?");
+ ps.setInt(1, id);
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ name = rs.getString("name");
+ }
+ ps.close();
+ rs.close();
+ con.close();
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return name;
+ }
+
+ public static String getCharacterNameById2(final int id) {
+ String name = null;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = null;
+ final Statement stmt = con.createStatement();
+ ps = con.prepareStatement("select name from characters where id = ?");
+ ps.setInt(1, id);
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ name = rs.getString("name");
+ }
+ ps.close();
+ rs.close();
+ con.close();
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return name;
+ }
+
+ public static int getCharacterIdByName(final String name) {
+ int id = -1;
+ final MapleCharacter chr = getOnlineCharacterByName(name);
+ if (chr != null) {
+ return chr.getId();
+ }
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = null;
+ final Statement stmt = con.createStatement();
+ ps = con.prepareStatement("select id from characters where name = ?");
+ ps.setString(1, name);
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ id = rs.getInt("id");
+ }
+ ps.close();
+ rs.close();
+ con.close();
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return id;
+ }
+
+ public static MapleCharacter getOnlineCharacterById(final int cid) {
+ MapleCharacter chr = null;
+ if (Find.findChannel(cid) >= 1) {
+ chr = ChannelServer.getInstance(Find.findChannel(cid)).getPlayerStorage().getCharacterById(cid);
+ if (chr != null) {
+ return chr;
+ }
+ }
+ return null;
+ }
+
+ public static MapleCharacter getOnlineCharacterByName(final String name) {
+ MapleCharacter chr = null;
+ if (Find.findChannel(name) >= 1) {
+ chr = ChannelServer.getInstance(Find.findChannel(name)).getPlayerStorage().getCharacterByName(name);
+ if (chr != null) {
+ return chr;
+ }
+ }
+ return null;
+ }
+
+ public static MapleCharacter getCharacterById(final int cid) {
+ final MapleCharacter chr = getOnlineCharacterById(cid);
+ if (chr != null) {
+ return chr;
+ }
+ final String name = getCharacterNameById(cid);
+ return (name == null) ? null : loadCharFromDB(cid, new MapleClient(null, null, (Channel) new MockIOSession()), true);
+ }
+
+ public static MapleCharacter getCharacterByName(final String name) {
+ final MapleCharacter chr = getOnlineCharacterByName(name);
+ if (chr != null) {
+ return chr;
+ }
+ final int cid = getCharacterIdByName(name);
+ return (cid == -1) ? null : loadCharFromDB(cid, new MapleClient(null, null, (Channel) new MockIOSession()), true);
+ }
+
+ public static void setMP(final Map GiveList, final boolean showMessage) {
+ final Iterator iter = GiveList.keySet().iterator();
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = null;
+ while (iter.hasNext()) {
+ final StringBuilder sql = new StringBuilder();
+ final MapleCharacter chr = (MapleCharacter) iter.next();
+ final int MP = ((Integer) GiveList.get(chr)).intValue();
+ sql.append("Update Accounts set MP = ");
+ sql.append(chr.getMP() + MP);
+ sql.append(" Where id = ");
+ sql.append(chr.getAccountID());
+ ps = con.prepareStatement(sql.toString());
+ ps.execute();
+ if (showMessage) {
+ final String MSG = "「在线奖励」获得在线点数 " + MP + " 若要领取请输入 @在线点数/@jcds";
+ chr.dropMessage(MSG);
+ }
+ }
+ if (ps != null) {
+ ps.close();
+ }
+ } catch (SQLException ex) {
+ System.err.println("[setMP]无法连接资料库 " + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex2, "setMP");
+ System.err.println("[setMP]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public void setMP(final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set MP = ? Where id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("[setMP]无法连接资料库 " + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex2, "setMP");
+ System.err.println("[setMP]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public int getMP() {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int mp = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select MP from Accounts Where id = " + this.getClient().getAccID());
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("MP");
+ } catch (Exception ex2) {
+ }
+ if (debug != -1) {
+ mp = rs.getInt("MP");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ System.err.println("[getMP] 无法连接资料库" + SQL);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "getMP");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return mp;
+ }
+
+ public boolean hasBlockedInventory(final boolean dead) {
+ boolean has = false;
+ if (dead) {
+ has = (!this.isAlive() || this.getTrade() != null || this.getConversation() > 0 || this.getPlayerShop() != null);
+ } else {
+ has = (this.getTrade() != null || this.getConversation() > 0 || this.getPlayerShop() != null);
+ }
+ return has;
+ }
+
+ public boolean hasBlockedInventory2(final boolean dead) {
+ boolean has = false;
+ if (dead) {
+ has = (!this.isAlive() || this.getTrade() != null || this.getPlayerShop() != null);
+ } else {
+ has = (this.getTrade() != null || this.getPlayerShop() != null);
+ }
+ return has;
+ }
+
+ public String getNowMacs() {
+ return this.nowmacs;
+ }
+
+ public void setNowMacs(final String macs) {
+ this.nowmacs = macs;
+ }
+
+ public int loadVip(final int accountID) {
+ int vip = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT vip FROM accounts WHERE id = ?");
+ ps.setInt(1, accountID);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ vip = rs.getShort("vip");
+ ps.close();
+ rs.close();
+ }
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ return vip;
+ }
+
+ public Map getSkillID() {
+ return this.skillID;
+ }
+
+ public boolean isItemBuffedValue(final int itemid) {
+ final LinkedList allBuffs = new LinkedList(this.skillID.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (mbsvh.effect.getSourceId() == itemid) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void startMapEffect(final String msg, final int itemId) {
+ this.startMapEffect(msg, itemId, 10000);
+ }
+
+ public void startMapEffect(final String msg, final int itemId, final int duration) {
+ final MapleMapEffect mapEffect = new MapleMapEffect(msg, itemId);
+ this.getClient().getSession().writeAndFlush(mapEffect.makeStartData());
+ EventTimer.getInstance().schedule((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ MapleCharacter.this.getClient().getSession().writeAndFlush(mapEffect.makeDestroyData());
+ }
+ }, (long) duration);
+ }
+
+ public void forceCompleteQuest(final int id) {
+ MapleQuest.getInstance(id).forceComplete(this, 0);
+ }
+
+ public String getLoginKey() {
+ return this.loginkey;
+ }
+
+ public String getServerKey() {
+ return this.serverkey;
+ }
+
+ public String getClientKey() {
+ return this.clientkey;
+ }
+
+ public boolean chrdangerousIp(final String lip) {
+ final String ip = lip.substring(1, lip.lastIndexOf(58));
+ boolean ret = false;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM dangerousip WHERE ? LIKE CONCAT(ip, '%')")) {
+ ps.setString(1, ip);
+ try (final ResultSet rs = ps.executeQuery()) {
+ rs.next();
+ if (rs.getInt(1) > 0) {
+ ret = true;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("Error dangerousIp " + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return ret;
+ }
+
+ public void setChrDangerousIp(final String lip) {
+ final String ip = lip.substring(1, lip.lastIndexOf(58));
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("INSERT INTO dangerousip (ip) VALUES (?)");
+ ps.setString(1, ip);
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ }
+ }
+
+ public final void updateNewState(final int newstate, final int accountId) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE `accounts` SET `loggedin` = ? WHERE id = ?")) {
+ ps.setInt(1, newstate);
+ ps.setInt(2, accountId);
+ ps.executeUpdate();
+ } catch (SQLException ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+
+ public int getIntNoRecord(final int questID) {
+ final MapleQuestStatus stat = this.getQuestNoAdd(MapleQuest.getInstance(questID));
+ if (stat == null || stat.getCustomData() == null) {
+ return 0;
+ }
+ return Integer.parseInt(stat.getCustomData());
+ }
+
+ public int getIntRecord(final int questID) {
+ final MapleQuestStatus stat = this.getQuestNAdd(MapleQuest.getInstance(questID));
+ if (stat.getCustomData() == null) {
+ stat.setCustomData("0");
+ }
+ return Integer.parseInt(stat.getCustomData());
+ }
+
+ public void updatePetAuto() {
+ if (this.getIntNoRecord(122221) > 0) {
+ this.client.getSession().writeAndFlush(MaplePacketCreator.petAutoHP(this.getIntRecord(122221)));
+ }
+ if (this.getIntNoRecord(122223) > 0) {
+ this.client.getSession().writeAndFlush(MaplePacketCreator.petAutoMP(this.getIntRecord(122223)));
+ }
+ }
+
+ public long getChrMeso() {
+ long meso = 0L;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM characters")) {
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ meso += (long) rs.getInt("meso");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (Exception e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ e.printStackTrace();
+ }
+ return meso;
+ }
+
+ public long getStorageMeso() {
+ long meso = 0L;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM storages")) {
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ meso += (long) rs.getInt("meso");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (Exception e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ e.printStackTrace();
+ }
+ return meso;
+ }
+
+ public long getHiredMerchMeso() {
+ long meso = 0L;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM hiredmerch")) {
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ meso += (long) rs.getInt("Mesos");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (Exception e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ e.printStackTrace();
+ }
+ return meso;
+ }
+
+ public int getQianDaoTime(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from bosslog where characterid = ? and bossid = ? and lastattempt >= DATE_SUB(curdate(),INTERVAL 0 DAY)");
+ ps.setInt(1, this.id);
+ ps.setString(2, bossid);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getQianDaoAcLog(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ int ret_count = 0;
+ final PreparedStatement ps = con.prepareStatement("select count(*) from Aclog where accid = ? and bossid = ? and lastattempt >= DATE_SUB(curdate(),INTERVAL 0 DAY)");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (Exception Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ return -1;
+ }
+ }
+
+ public boolean ChrDangerousAcc(final String acc) {
+ boolean ret = false;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM dangerousacc WHERE ? LIKE CONCAT(acc, '%')")) {
+ ps.setString(1, acc);
+ try (final ResultSet rs = ps.executeQuery()) {
+ rs.next();
+ if (rs.getInt(1) > 0) {
+ ret = true;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("Error dangerousname " + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return ret;
+ }
+
+ public void setChrDangerousAcc(final String acc) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("INSERT INTO dangerousacc (acc) VALUES (?)");
+ ps.setString(1, acc);
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ }
+ }
+
+ public long getChangeTime() {
+ return this.mapChangeTime;
+ }
+
+ public void setChangeTime(final boolean changeMap) {
+ this.mapChangeTime = System.currentTimeMillis();
+ if (changeMap) {
+ this.getCheatTracker().resetInMapIimeCount();
+ }
+ }
+
+ public int getDDJF() {
+ return this.getDDJF(this);
+ }
+
+ public int getDDJF(final MapleCharacter chr) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select DDJF from Accounts Where id = " + chr.getClient().getAccID());
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("DDJF");
+ } catch (Exception ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("DDJF");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ System.err.println("[getDDJF]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "getDDJF");
+ System.err.println("[getDDJF]" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return x;
+ }
+
+ public void setDDJF(final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set DDJF = ? Where id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("[DDJF]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex2, "SetDDJFF");
+ System.err.println("[setDDJF]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public final boolean canHold() {
+ for (int i = 1; i <= 5; ++i) {
+ if (this.getInventory(MapleInventoryType.getByType((byte) i)).getNextFreeSlot() <= -1) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public void deleteAcLog(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("DELETE FROM Aclog WHERE accid = ? and bossid = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ }
+ }
+
+ public int getAcLogD(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from Aclog where accid = ? and bossid = ? and lastattempt >= DATE_SUB(curdate(),INTERVAL 0 DAY)");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getAclogY(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from Aclog where accid = ? and bossid = ? and DATE_FORMAT(lastattempt, '%Y%m') = DATE_FORMAT(CURDATE( ), '%Y%m')");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getBossLogAS(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from bosslog where characterid = ? and bossid = ?");
+ ps.setInt(1, this.id);
+ ps.setString(2, bossid);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getBossLogC(final String bossid) {
+ int ret_count = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from bosslog where characterid = ? and bossid = ?");
+ ps.setInt(1, this.id);
+ ps.setString(2, bossid);
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ ret_count += rs.getInt(1);
+ }
+ ps.close();
+ rs.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getAcLogC(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ int ret_count = 0;
+ final PreparedStatement ps = con.prepareStatement("select count(*) from Aclog where accid = ? and bossid = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ ret_count += rs.getInt(1);
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ return -1;
+ }
+ }
+
+ public int getBossLogD(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from bosslog where characterid = ? and bossid = ? and lastattempt >= DATE_SUB(curdate(),INTERVAL 0 DAY)");
+ ps.setInt(1, this.id);
+ ps.setString(2, bossid);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getBossLogY(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from bosslog where characterid = ? and bossid = ? and DATE_FORMAT(lastattempt, '%Y%m') = DATE_FORMAT(CURDATE( ), '%Y%m')");
+ ps.setInt(1, this.id);
+ ps.setString(2, bossid);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public long getMrqdTime() {
+ return this.mrqdTime;
+ }
+
+ public void setMrqdTime(final long r) {
+ this.mrqdTime = r;
+ }
+
+ public int getStChrLog() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from characterid where stlog = ?");
+ ps.setInt(1, this.id);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public String getStChrNameLog(final int id) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ String name = "";
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select characterid from stlog Where stid = " + id);
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("characterid");
+ } catch (SQLException ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("characterid");
+ name = name + getCharacterNameById(x) + ",";
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return name;
+ }
+
+ public int getStLog() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from stlog where characterid = ?");
+ ps.setInt(1, this.id);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getStjfLog(final int id) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from stjflog where characterid = ?");
+ ps.setInt(1, id);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int getStLogid(final int id) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select stid from stlog Where characterid = " + id);
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("stid");
+ } catch (SQLException ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("stid");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return x;
+ }
+
+ public void setStLog(final int stid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into stlog (characterid, stid) values (?,?)");
+ ps.setInt(1, this.id);
+ ps.setInt(2, stid);
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public void setStjfLog(final int id, final int stid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into stjflog (characterid, stjf) values (?,?)");
+ ps.setInt(1, id);
+ ps.setInt(2, stid);
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public void updateStjfLog(final int id, final int stid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update stjflog SET stjf = ? WHERE characterid = ?");
+ ps.setInt(1, stid);
+ ps.setInt(2, id);
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public int getStjf(final int id) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select stjf from stjflog Where characterid = " + id);
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("stjf");
+ } catch (SQLException ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("stjf");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return x;
+ }
+
+ public int getVip() {
+ return this.vip;
+ }
+
+ public void setVip(final int r) {
+ this.vip = r;
+ }
+
+ public boolean isVip() {
+ return this.getVip() > 0;
+ }
+
+ public int getOfflinePoints(final MapleCharacter victim) {
+ return this.getPoints(victim);
+ }
+
+ public int getPoints() {
+ return this.getPoints(this);
+ }
+
+ public int getPoints(final MapleCharacter chr) {
+ final int maxtimes = 10;
+ int nowtime = 0;
+ final int delay = 500;
+ boolean error = false;
+ int x = 0;
+ do {
+ ++nowtime;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final Statement stmt = con.createStatement();
+ final ResultSet rs = stmt.executeQuery("Select points from Accounts Where id = " + chr.getClient().getAccID());
+ while (rs.next()) {
+ int debug = -1;
+ try {
+ debug = rs.getInt("points");
+ } catch (SQLException ex2) {
+ }
+ if (debug != -1) {
+ x = rs.getInt("points");
+ error = false;
+ } else {
+ error = true;
+ }
+ }
+ rs.close();
+ stmt.close();
+ con.close();
+ } catch (SQLException SQL) {
+ System.err.println("[getPoints]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) SQL);
+ } catch (Exception ex) {
+ System.err.println("[getPoints]" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ if (error) {
+ try {
+ Thread.sleep((long) delay);
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ } while (error && nowtime < maxtimes);
+ return x;
+ }
+
+ public void setPoints(final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set points = ? Where id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("[Points]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ System.err.println("[setPoints]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public void gainVip() {
+ final int rmb = this.getMoneyAll();
+ if (rmb >= 2000 && rmb < 4000) {
+ this.setVip(1);
+ } else if (rmb >= 4000 && rmb < 6000) {
+ this.setVip(2);
+ } else if (rmb >= 6000 && rmb < 8000) {
+ this.setVip(3);
+ } else if (rmb >= 8000 && rmb < 10000) {
+ this.setVip(4);
+ } else if (rmb >= 10000) {
+ this.setVip(5);
+ }
+ }
+
+ public int getMoneyAll() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ int money = 0;
+ final PreparedStatement ps = con.prepareStatement("SELECT amount FROM donate WHERE username = ?");
+ ps.setString(1, this.getClient().getAccountName());
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ money += rs.getInt("amount");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return money;
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -1;
+ }
+ }
+
+ public void setBuLingZanZu(final int bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into donate (username, amount, paymentMethod, date) values (?,?,?,?)");
+ ps.setString(1, this.getClient().getAccountName());
+ ps.setString(2, String.valueOf(bossid));
+ ps.setString(3, "补领赞助");
+ ps.setString(4, FileoutputUtil.NowTime());
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ }
+ }
+
+ public void isSquadPlayerID() {
+ if (this.getMapId() == 240060000 || this.getMapId() == 240060100 || this.getMapId() == 240060200) {
+ final EventManager em = this.getClient().getChannelServer().getEventSM().getEventManager("HorntailBattle");
+ final EventInstanceManager eim = em.getInstance("HorntailBattle");
+ final String propsa = eim.getProperty("isSquadPlayerID_" + this.getId());
+ if (eim != null && propsa != null && propsa.equals("0")) {
+ eim.setProperty("isSquadPlayerID_" + this.getId(), "1");
+ }
+ }
+ if (this.getMapId() == 280030000) {
+ final EventManager em = this.getClient().getChannelServer().getEventSM().getEventManager("ZakumBattle");
+ final EventInstanceManager eim = em.getInstance("ZakumBattle");
+ final String propsa = eim.getProperty("isSquadPlayerID_" + this.getId());
+ if (eim != null && propsa != null && propsa.equals("0")) {
+ eim.setProperty("isSquadPlayerID_" + this.getId(), "1");
+ }
+ }
+ if (this.getMapId() == 802000823) {
+ final EventManager em = this.getClient().getChannelServer().getEventSM().getEventManager("pangboss");
+ final EventInstanceManager eim = em.getInstance("pangboss");
+ final String propsa = eim.getProperty("isSquadPlayerID_" + this.getId());
+ if (eim != null && propsa != null && propsa.equals("0")) {
+ eim.setProperty("isSquadPlayerID_" + this.getId(), "1");
+ }
+ }
+ if (this.getMapId() == 270050100) {
+ final EventManager em = this.getClient().getChannelServer().getEventSM().getEventManager("PinkBeanBattle");
+ final EventInstanceManager eim = em.getInstance("PinkBeanBattle");
+ final String propsa = eim.getProperty("isSquadPlayerID_" + this.getId());
+ if (eim != null && propsa != null && propsa.equals("0")) {
+ eim.setProperty("isSquadPlayerID_" + this.getId(), "1");
+ }
+ }
+ if (this.getMapId() == 551030200) {
+ final EventManager em = this.getClient().getChannelServer().getEventSM().getEventManager("ScarTarBattle");
+ final EventInstanceManager eim = em.getInstance("ScarTarBattle");
+ final String propsa = eim.getProperty("isSquadPlayerID_" + this.getId());
+ if (eim != null && propsa != null && propsa.equals("0")) {
+ eim.setProperty("isSquadPlayerID_" + this.getId(), "1");
+ }
+ }
+ }
+
+ public void setCsMod(final int mod) {
+ this.CsMod = mod;
+ }
+
+ public int getCsMod() {
+ return this.CsMod;
+ }
+
+ public void setFxName(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into fxlog (bossid, characterid) values (?,?)");
+ ps.setString(1, bossid);
+ ps.setInt(2, this.id);
+ ps.executeUpdate();
+ ps.close();
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public int getFxName(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from fxlog where bossid = ?");
+ ps.setString(1, bossid);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public int[] getSavedFaces() {
+ return this.savedFaces;
+ }
+
+ public void setSavedFace(final int sel, final int id) {
+ this.savedFaces[sel] = id;
+ }
+
+ public int getSavedFace(final int sel) {
+ if (sel < this.savedFaces.length) {
+ return this.savedFaces[sel];
+ }
+ return -1;
+ }
+
+ public int[] getSavedHairs() {
+ return this.savedHairs;
+ }
+
+ public void setSavedHair(final int sel, final int id) {
+ this.savedHairs[sel] = id;
+ }
+
+ public int getSavedHair(final int sel) {
+ if (sel < this.savedHairs.length) {
+ return this.savedHairs[sel];
+ }
+ return -1;
+ }
+
+ public final void maxSkillsByJob() {
+ for (final ISkill skil : SkillFactory.getAllSkills()) {
+ if (skil.canBeLearnedBy((int) this.job) && skil.getId() >= 1000000) {
+ this.changeSkillLevel(skil, skil.getMaxLevel(), skil.getMaxLevel());
+ }
+ }
+ }
+
+ public final void LearnSkillsByJob(final MapleCharacter c) {
+ for (final ISkill skil : SkillFactory.getAllSkills()) {
+ if (skil.canBeLearnedBy((int) this.job) && Math.floor((double) (skil.getId() / 10000)) == (double) c.getJob()) {
+ this.changeSkillLevel(skil, (byte) 0, (byte) 10);
+ }
+ }
+ }
+
+ public int setHuanPaoTask(final int item) {
+ final Map itemMap = this.selectPaoHuanItem();
+ if (itemMap == null) {
+ this.insertPaoHuanItem(item, 0);
+ return item;
+ }
+ return ((Integer) itemMap.get("itemId")).intValue();
+ }
+
+ public void insertPaoHuanItem(final int itemId, final int times) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ try (final PreparedStatement ps = con.prepareStatement("INSERT INTO `pao_huan` ( `characters_id`, `item_id`, `date`, `times`, `gmt_create`) VALUES ( ?, ?, ?, ?, now())")) {
+ ps.setInt(1, this.id);
+ ps.setInt(2, itemId);
+ ps.setString(3, FileoutputUtil.CurrentReadable_Date());
+ ps.setInt(4, times);
+ ps.execute();
+ }
+ } catch (SQLException Ex) {
+ throw new RuntimeException();
+ }
+ }
+
+ public Map selectPaoHuanItem() {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ try (final PreparedStatement ps = con.prepareStatement("SELECT * from pao_huan where characters_id=? and date=?")) {
+ ps.setInt(1, this.id);
+ ps.setString(2, FileoutputUtil.CurrentReadable_Date());
+ final ResultSet resultSet = ps.executeQuery();
+ if (resultSet.next()) {
+ final int itemId = resultSet.getInt("item_id");
+ final int times = resultSet.getInt("times");
+ final Map result = (Map) new HashMap();
+ result.put("itemId", Integer.valueOf(itemId));
+ result.put("times", Integer.valueOf(times));
+ resultSet.close();
+ return result;
+ }
+ ps.close();
+ }
+ con.close();
+ } catch (SQLException Ex) {
+ throw new RuntimeException();
+ }
+ return null;
+ }
+
+ public void deletePaoHuanItem() {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ try (final PreparedStatement ps = con.prepareStatement("delete from pao_huan where characters_id=?")) {
+ ps.setInt(1, this.id);
+ ps.execute();
+ }
+ } catch (SQLException Ex) {
+ throw new RuntimeException();
+ }
+ }
+
+ public int setHuanPaoTask2(final int item) {
+ final Map itemMap = this.selectPaoHuanItem2();
+ if (itemMap == null) {
+ this.insertPaoHuanItem2(item, 0);
+ return item;
+ }
+ return ((Integer) itemMap.get("itemId")).intValue();
+ }
+
+ public void insertPaoHuanItem2(final int itemId, final int times) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ try (final PreparedStatement ps = con.prepareStatement("INSERT INTO `pao_huan2` ( `characters_id`, `item_id`, `date`, `times`, `gmt_create`) VALUES ( ?, ?, ?, ?, now())")) {
+ ps.setInt(1, this.id);
+ ps.setInt(2, itemId);
+ ps.setString(3, FileoutputUtil.CurrentReadable_Date());
+ ps.setInt(4, times);
+ ps.execute();
+ }
+ } catch (SQLException Ex) {
+ throw new RuntimeException();
+ }
+ }
+
+ public Map selectPaoHuanItem2() {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ try (final PreparedStatement ps = con.prepareStatement("SELECT * from pao_huan2 where characters_id=? and date=?")) {
+ ps.setInt(1, this.id);
+ ps.setString(2, FileoutputUtil.CurrentReadable_Date());
+ final ResultSet resultSet = ps.executeQuery();
+ if (resultSet.next()) {
+ final int itemId = resultSet.getInt("item_id");
+ final int times = resultSet.getInt("times");
+ final Map result = (Map) new HashMap();
+ result.put("itemId", Integer.valueOf(itemId));
+ result.put("times", Integer.valueOf(times));
+ resultSet.close();
+ return result;
+ }
+ ps.close();
+ }
+ con.close();
+ } catch (SQLException Ex) {
+ throw new RuntimeException();
+ }
+ return null;
+ }
+
+ public void deletePaoHuanItem2() {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ try (final PreparedStatement ps = con.prepareStatement("delete from pao_huan2 where characters_id=?")) {
+ ps.setInt(1, this.id);
+ ps.execute();
+ }
+ } catch (SQLException Ex) {
+ throw new RuntimeException();
+ }
+ }
+
+ public byte getProfessionLevel(final int id) {
+ final int ret = this.getSkillLevel(id);
+ if (ret <= 0) {
+ return 0;
+ }
+ return (byte) (ret >>> 24 & 0xFF);
+ }
+
+ public short getProfessionExp(final int id) {
+ final int ret = this.getSkillLevel(id);
+ if (ret <= 0) {
+ return 0;
+ }
+ return (short) (ret & 0xFFFF);
+ }
+
+ public int getQianDao(final String bossid) {
+ return this.getQianDao(this.id, bossid);
+ }
+
+ public int getQianDao(final int id, final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from qiandao where id =? and log = ?");
+ ps.setInt(1, id);
+ ps.setString(2, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into qiandao (id,log, sz1) VALUES (?,?, ?)");
+ psu.setInt(1, id);
+ psu.setString(2, log1);
+ psu.setInt(3, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("onetimelog读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void setQianDao(final int id, final String bossid) {
+ this.setQianDao(id, bossid, 1);
+ }
+
+ public void setQianDao(final int id, final String log1, final int slot) {
+ final int jf = this.getQianDao(log1);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE qiandao SET sz1 = ? where id = ? AND log = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, id);
+ ps.setString(3, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("qiaodao加减发生错误: " + ex);
+ }
+ }
+
+ public void setQLQianDao(final int id, final String bossid) {
+ try {
+ final Connection con1 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = DBConPool.getInstance().getDataSource().getConnection().getConnection().prepareStatement("delete from qiandao where characterid = ? and log = ?");
+ ps.setInt(1, id);
+ ps.setString(2, bossid);
+ ps.executeUpdate();
+ ps.close();
+ con1.close();
+ } catch (SQLException ex) {
+ }
+ }
+
+ public int getGamePoints() {
+ try {
+ int gamePoints = 0;
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM accounts_info WHERE accId = ? AND worldId = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setInt(2, (int) this.getWorld());
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ gamePoints = rs.getInt("gamePoints");
+ final Timestamp updateTime = rs.getTimestamp("updateTime");
+ final Calendar sqlcal = Calendar.getInstance();
+ if (updateTime != null) {
+ sqlcal.setTimeInMillis(updateTime.getTime());
+ }
+ if (sqlcal.get(5) + 1 <= Calendar.getInstance().get(5) || sqlcal.get(2) + 1 <= Calendar.getInstance().get(2) || sqlcal.get(1) + 1 <= Calendar.getInstance().get(1)) {
+ gamePoints = 0;
+ final PreparedStatement psu = con.prepareStatement("UPDATE accounts_info SET gamePoints = 0, updateTime = CURRENT_TIMESTAMP() WHERE accId = ? AND worldId = ?");
+ psu.setInt(1, this.getClient().getAccID());
+ psu.setInt(2, (int) this.getWorld());
+ psu.executeUpdate();
+ psu.close();
+ }
+ } else {
+ final PreparedStatement psu2 = con.prepareStatement("INSERT INTO accounts_info (accId, worldId, gamePoints) VALUES (?, ?, ?)");
+ psu2.setInt(1, this.getClient().getAccID());
+ psu2.setInt(2, (int) this.getWorld());
+ psu2.setInt(3, 0);
+ psu2.executeUpdate();
+ psu2.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return gamePoints;
+ } catch (SQLException Ex) {
+ System.err.println("获取角色帐号的在线时间点出现错误 - 数据库查询失败1" + Ex);
+ return -1;
+ }
+ }
+
+ public int getGamePointsPD() {
+ try {
+ int gamePointsPD = 0;
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM accounts_info WHERE accId = ? AND worldId = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setInt(2, (int) this.getWorld());
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ gamePointsPD = rs.getInt("gamePointspd");
+ final Timestamp updateTime = rs.getTimestamp("updateTime");
+ final Calendar sqlcal = Calendar.getInstance();
+ if (updateTime != null) {
+ sqlcal.setTimeInMillis(updateTime.getTime());
+ }
+ if (sqlcal.get(5) + 1 <= Calendar.getInstance().get(5) || sqlcal.get(2) + 1 <= Calendar.getInstance().get(2) || sqlcal.get(1) + 1 <= Calendar.getInstance().get(1)) {
+ gamePointsPD = 0;
+ final PreparedStatement psu = con.prepareStatement("UPDATE accounts_info SET gamePointspd = 0, updateTime = CURRENT_TIMESTAMP() WHERE accId = ? AND worldId = ?");
+ psu.setInt(1, this.getClient().getAccID());
+ psu.setInt(2, (int) this.getWorld());
+ psu.executeUpdate();
+ psu.close();
+ }
+ } else {
+ final PreparedStatement psu2 = con.prepareStatement("INSERT INTO accounts_info (accId, worldId, gamePointspd) VALUES (?, ?, ?)");
+ psu2.setInt(1, this.getClient().getAccID());
+ psu2.setInt(2, (int) this.getWorld());
+ psu2.setInt(3, 0);
+ psu2.executeUpdate();
+ psu2.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return gamePointsPD;
+ } catch (SQLException Ex) {
+ System.err.println("获取角色帐号的在线时间点出现错误 - 数据库查询失败2" + Ex);
+ return -1;
+ }
+ }
+
+ public void gainGamePoints(final int amount) {
+ final int gamePoints = this.getGamePoints() + amount;
+ this.updateGamePoints(gamePoints);
+ }
+
+ public void gainGamePointsPD(final int amount) {
+ final int gamePointsPD = this.getGamePointsPD() + amount;
+ this.updateGamePointsPD(gamePointsPD);
+ }
+
+ public void resetGamePointsPD() {
+ this.updateGamePointsPD(0);
+ }
+
+ public void updateGamePointsPD(final int amount) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts_info SET gamePointspd = ?, updateTime = CURRENT_TIMESTAMP() WHERE accId = ? AND worldId = ?");
+ ps.setInt(1, amount);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.setInt(3, (int) this.getWorld());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException Ex) {
+ System.err.println("更新角色帐号的在线时间出现错误 - 数据库更新失败3." + Ex);
+ }
+ }
+
+ public void resetGamePoints() {
+ this.updateGamePoints(0);
+ }
+
+ public void updateGamePoints(final int amount) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts_info SET gamePoints = ?, updateTime = CURRENT_TIMESTAMP() WHERE accId = ? AND worldId = ?");
+ ps.setInt(1, amount);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.setInt(3, (int) this.getWorld());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException Ex) {
+ System.err.println("更新角色帐号的在线时间出现错误 - 数据库更新失败4." + Ex);
+ }
+ }
+
+ public int getGamePointsRQ() {
+ try {
+ int gamePointsRQ = 0;
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM accounts_info WHERE accId = ? AND worldId = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setInt(2, (int) this.getWorld());
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ gamePointsRQ = rs.getInt("gamePointsrq");
+ final Timestamp updateTime = rs.getTimestamp("updateTime");
+ final Calendar sqlcal = Calendar.getInstance();
+ if (updateTime != null) {
+ sqlcal.setTimeInMillis(updateTime.getTime());
+ }
+ if (sqlcal.get(5) + 1 <= Calendar.getInstance().get(5) || sqlcal.get(2) + 1 <= Calendar.getInstance().get(2) || sqlcal.get(1) + 1 <= Calendar.getInstance().get(1)) {
+ gamePointsRQ = 0;
+ final PreparedStatement psu = con.prepareStatement("UPDATE accounts_info SET gamePointsrq = 0, updateTime = CURRENT_TIMESTAMP() WHERE accId = ? AND worldId = ?");
+ psu.setInt(1, this.getClient().getAccID());
+ psu.setInt(2, (int) this.getWorld());
+ psu.executeUpdate();
+ psu.close();
+ }
+ } else {
+ final PreparedStatement psu2 = con.prepareStatement("INSERT INTO accounts_info (accId, worldId, gamePointsrq) VALUES (?, ?, ?)");
+ psu2.setInt(1, this.getClient().getAccID());
+ psu2.setInt(2, (int) this.getWorld());
+ psu2.setInt(3, 0);
+ psu2.executeUpdate();
+ psu2.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return gamePointsRQ;
+ } catch (SQLException Ex) {
+ System.err.println("获取角色帐号的在线时间点出现错误 - 数据库查询失败5" + Ex);
+ return -1;
+ }
+ }
+
+ public void gainGamePointsRQ(final int amount) {
+ final int gamePointsRQ = this.getGamePointsRQ() + amount;
+ this.updateGamePointsRQ(gamePointsRQ);
+ }
+
+ public void resetGamePointsRQ() {
+ this.updateGamePointsRQ(0);
+ }
+
+ public void updateGamePointsRQ(final int amount) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts_info SET gamePointsrq = ?, updateTime = CURRENT_TIMESTAMP() WHERE accId = ? AND worldId = ?");
+ ps.setInt(1, amount);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.setInt(3, (int) this.getWorld());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException Ex) {
+ System.err.println("更新角色帐号的在线时间出现错误 - 数据库更新失败6." + Ex);
+ }
+ }
+
+ public int getGamePointsPS() {
+ try {
+ int gamePointsRQ = 0;
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM accounts_info WHERE accId = ? AND worldId = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setInt(2, (int) this.getWorld());
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ gamePointsRQ = rs.getInt("gamePointsps");
+ final Timestamp updateTime = rs.getTimestamp("updateTime");
+ final Calendar sqlcal = Calendar.getInstance();
+ if (updateTime != null) {
+ sqlcal.setTimeInMillis(updateTime.getTime());
+ }
+ if (sqlcal.get(5) + 1 <= Calendar.getInstance().get(5) || sqlcal.get(2) + 1 <= Calendar.getInstance().get(2) || sqlcal.get(1) + 1 <= Calendar.getInstance().get(1)) {
+ gamePointsRQ = 0;
+ final PreparedStatement psu = con.prepareStatement("UPDATE accounts_info SET gamePointsps = 0, updateTime = CURRENT_TIMESTAMP() WHERE accId = ? AND worldId = ?");
+ psu.setInt(1, this.getClient().getAccID());
+ psu.setInt(2, (int) this.getWorld());
+ psu.executeUpdate();
+ psu.close();
+ }
+ } else {
+ final PreparedStatement psu2 = con.prepareStatement("INSERT INTO accounts_info (accId, worldId, gamePointsps) VALUES (?, ?, ?)");
+ psu2.setInt(1, this.getClient().getAccID());
+ psu2.setInt(2, (int) this.getWorld());
+ psu2.setInt(3, 0);
+ psu2.executeUpdate();
+ psu2.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return gamePointsRQ;
+ } catch (SQLException Ex) {
+ System.err.println("获取角色帐号的在线时间点出现错误 - 数据库查询失败7" + Ex);
+ return -1;
+ }
+ }
+
+ public void gainGamePointsPS(final int amount) {
+ final int gamePointsPS = this.getGamePointsPS() + amount;
+ this.updateGamePointsPS(gamePointsPS);
+ }
+
+ public void resetGamePointsPS() {
+ this.updateGamePointsPS(0);
+ }
+
+ public void updateGamePointsPS(final int amount) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts_info SET gamePointsps = ?, updateTime = CURRENT_TIMESTAMP() WHERE accId = ? AND worldId = ?");
+ ps.setInt(1, amount);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.setInt(3, (int) this.getWorld());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException Ex) {
+ System.err.println("更新角色帐号的在线时间出现错误 - 数据库更新失败8." + Ex);
+ }
+ }
+
+ public int getSkillzq() {
+ return this.skillzq;
+ }
+
+ public void gainSkillzq(final int gain) {
+ this.skillzq += gain;
+ }
+
+ public void setSkillzq(final int id) {
+ this.skillzq = id;
+ }
+
+ public static int getQuestKillCount(final MapleCharacter chr, final int mobid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement pse;
+ try (final PreparedStatement ps = con.prepareStatement("SELECT queststatusid FROM queststatus WHERE characterid = ?")) {
+ ResultSet rse;
+ try (final ResultSet rs = ps.executeQuery()) {
+ pse = con.prepareStatement("SELECT count FROM queststatusmobs WHERE queststatusid = ?");
+ rse = pse.executeQuery();
+ if (rs.next()) {
+ return rse.getInt("count");
+ }
+ rs.close();
+ }
+ rse.close();
+ }
+ pse.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("getQuestKillCount" + e);
+ FileoutputUtil.outputFileError("logs/数据库异常.txt", (Throwable) e);
+ }
+ return -1;
+ }
+
+ public static void deleteWhereCharacterId_NoLock(final Connection con, final String sql, final int id) throws SQLException {
+ try (final PreparedStatement ps = con.prepareStatement(sql)) {
+ ps.setInt(1, id);
+ ps.execute();
+ }
+ }
+
+ public boolean isBuffFrom(final MapleBuffStat stat, final Skill skill) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(stat);
+ return mbsvh != null && mbsvh.effect != null && mbsvh.effect.isSkill() && mbsvh.effect.getSourceId() == skill.getId();
+ }
+
+ public int getTrueBuffSource(final MapleBuffStat stat) {
+ final MapleBuffStatValueHolder mbsvh = (MapleBuffStatValueHolder) this.effects.get(stat);
+ return (mbsvh == null) ? -1 : (mbsvh.effect.isSkill() ? mbsvh.effect.getSourceId() : (-mbsvh.effect.getSourceId()));
+ }
+
+ public int getItemQuantity(final int itemid) {
+ final MapleInventoryType type = GameConstants.getInventoryType(itemid);
+ return this.getInventory(type).countById(itemid);
+ }
+
+ public void cancelEffectFromBuffStat(final MapleBuffStat stat, final int from) {
+ if (this.effects.get(stat) != null && ((MapleBuffStatValueHolder) this.effects.get(stat)).cid == from) {
+ this.cancelEffect(((MapleBuffStatValueHolder) this.effects.get(stat)).effect, false, -1L);
+ }
+ }
+
+ public void dispelSummons() {
+ final LinkedList allBuffs = new LinkedList(this.effects.values());
+ for (final MapleBuffStatValueHolder mbsvh : allBuffs) {
+ if (mbsvh.effect.getSummonMovementType() != null) {
+ this.cancelEffect(mbsvh.effect, false, mbsvh.startTime);
+ }
+ }
+ }
+
+ public String getJobName(final short id) {
+ return MapleJob.getName(MapleJob.getById((int) id));
+ }
+
+ public void gainFame(final int famechange, final boolean show) {
+ this.fame += (short) famechange;
+ this.updateSingleStat(MapleStat.FAME, (int) this.fame);
+ if (show && famechange != 0) {
+ this.client.sendPacket(MaplePacketCreator.getShowFameGain(famechange));
+ }
+ }
+
+ public void handleDemonJob(final int selection) {
+ if (selection == 0) {
+ this.changeJob(3101);
+ } else if (selection == 1) {
+ this.changeJob(3100);
+ }
+ }
+
+ public void resetSP(final int sp) {
+ for (int i = 0; i < this.remainingSp.length; ++i) {
+ this.remainingSp[i] = sp;
+ }
+ this.client.getSession().write(MaplePacketCreator.updateSp(this, false));
+ }
+
+ public void setGmLevel(final byte level) {
+ this.gmLevel = level;
+ }
+
+ public void dispose(final byte level) {
+ this.gmLevel = level;
+ }
+
+ public void setGM(final byte level) {
+ this.gmLevel = level;
+ }
+
+ public short getSpace(final int type) {
+ return this.getInventory(MapleInventoryType.getByType((byte) type)).getNumFreeSlot();
+ }
+
+ public int getCooldownSize() {
+ return this.coolDowns.size();
+ }
+
+ public void 击杀野外BOSS特效2() {
+ this.map.broadcastMessage(MaplePacketCreator.environmentChange("dojang/end/clear", 3));
+ }
+
+ public void 击杀野外BOSS特效() {
+ }
+
+ public void giveDebuff(final MapleDisease disease, final MobSkill skill) {
+ this.giveDebuff(disease, skill.getX(), skill.getDuration(), skill.getSkillId(), skill.getSkillLevel());
+ }
+
+ public void giveDebuff(final MapleDisease disease, final int x, final long duration, final int skillid, final int level) {
+ final List> debuff = Collections.singletonList(new Pair(disease, Integer.valueOf(x)));
+ if (!this.hasDisease(disease) && this.diseases.size() < 2) {
+ if (disease != MapleDisease.SEDUCE && disease != MapleDisease.STUN && this.isActiveBuffedValue(2321005)) {
+ return;
+ }
+ this.client.sendPacket(MaplePacketCreator.giveDebuff(debuff, skillid, level, (int) duration));
+ this.map.broadcastMessage(this, MaplePacketCreator.giveForeignDebuff(this.id, debuff, skillid, level), false);
+ this.diseases.put(disease, new MapleDiseaseValueHolder(disease, System.currentTimeMillis(), duration / 100L * 65L));
+ } else {
+ this.diseases.put(disease, new MapleDiseaseValueHolder(disease, System.currentTimeMillis(), duration));
+ }
+ }
+
+ public void setBossLogs(final String bossid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into bosslogps (characterid, bossid) values (?,?)");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public void deleteBossLogps(final String bossid) {
+ try {
+ final Connection con1 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con1.prepareStatement("delete from bosslogps where characterid = ? and bossid = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ ps.executeUpdate();
+ ps.close();
+ con1.close();
+ } catch (SQLException ex) {
+ }
+ }
+
+ public void deleteBossLog(final String bossid) {
+ try {
+ final Connection con1 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con1.prepareStatement("delete from bosslog where characterid = ? and bossid = ?");
+ ps.setInt(1, this.id);
+ ps.setString(2, bossid);
+ ps.executeUpdate();
+ ps.close();
+ con1.close();
+ } catch (SQLException ex) {
+ }
+ }
+
+ public int getBossLogS(final String bossid) {
+ try {
+ final Connection con1 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ int ret_count = 0;
+ final PreparedStatement ps = con1.prepareStatement("select count(*) from bosslogps where characterid = ? and bossid = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ ps.setString(2, bossid);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ ps.close();
+ con1.close();
+ return ret_count;
+ } catch (Exception Wx) {
+ return -1;
+ }
+ }
+
+ public void setLxExp(final int a) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update characters set exp = ? Where id = ?");
+ ps.setInt(1, a);
+ ps.setInt(2, this.id);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public void setLxMeso(final int a) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update characters set meso = ? Where id = ?");
+ ps.setInt(1, a);
+ ps.setInt(2, this.id);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public void setMPoints(final int a) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set mPoints = ? Where id = ?");
+ ps.setInt(1, a);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public void setMQoints(final int a) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set Acash = ? Where id = ?");
+ ps.setInt(1, a);
+ ps.setInt(2, this.getClient().getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public void updateOfflineTime1() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update lefttime set lefttime = ? Where accid = ?");
+ ps.setLong(1, System.currentTimeMillis());
+ ps.setInt(2, this.getClient().getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public void updateOfflineTime() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update lefttime set lefttime = ? Where accid = ?");
+ ps.setLong(1, System.currentTimeMillis());
+ ps.setInt(2, this.getClient().getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (Exception Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ }
+ }
+
+ public long getLastOfflineTime() {
+ long 离线时间 = 0L;
+ try {
+ final Connection con1 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con1.prepareStatement("select lefttime from lefttime WHERE accid = ?");
+ ps.setInt(1, this.getClient().getAccID());
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ 离线时间 = rs.getLong("lefttime");
+ } else {
+ 离线时间 = System.currentTimeMillis();
+ final PreparedStatement psu = con1.prepareStatement("insert into lefttime (accid, lefttime) values (?,?)");
+ psu.setInt(1, this.getClient().getAccID());
+ psu.setLong(2, System.currentTimeMillis());
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con1.close();
+ return 离线时间;
+ } catch (Exception Ex) {
+ return -1L;
+ }
+ }
+
+ public void setNewWorldLevel() {
+ Start.世界等级 = getFZ9("世界等级");
+ }
+
+ public int getBossLog(final String log1, final int a) {
+ if (a < 1) {
+ return this.getBossLog(log1);
+ }
+ return this.getOneTimeLog(log1);
+ }
+
+ public void setBossLog(final String log1, final int a, final int b) {
+ if (a < 1) {
+ this.setBossLog(log1, b);
+ } else {
+ this.setOneTimeLog(log1, b);
+ }
+ }
+
+ public int getBossLog(final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from bosslog where id =? and log = ?");
+ ps.setInt(1, this.id);
+ ps.setString(2, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into bosslog (id,log, sz1) VALUES (?,?, ?)");
+ psu.setInt(1, this.id);
+ psu.setString(2, log1);
+ psu.setInt(3, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("bosslog读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void setBossLog(final String log1) {
+ this.setBossLog(log1, 1);
+ }
+
+ public void set套装伤害加成(final double set) {
+ this.套装伤害加成 = set;
+ }
+
+ public double get套装伤害加成() {
+ return this.套装伤害加成;
+ }
+
+ public void setBossLog(final String log1, final int slot) {
+ final int jf = this.getBossLog(log1);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE bosslog SET sz1 = ? where id = ? AND log = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, this.id);
+ ps.setString(3, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("bosslog加减发生错误: " + ex);
+ }
+ }
+
+ public int getOneTimeLog(final String log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from onetimelog where id =? and log = ?");
+ ps.setInt(1, this.id);
+ ps.setString(2, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("sz1");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into onetimelog (id,log, sz1) VALUES (?,?, ?)");
+ psu.setInt(1, this.id);
+ psu.setString(2, log1);
+ psu.setInt(3, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("onetimelog读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void setOneTimeLog(final String log1) {
+ this.setOneTimeLog(log1, 1);
+ }
+
+ public void setOneTimeLog(final String log1, final int slot) {
+ final int jf = this.getOneTimeLog(log1);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE onetimelog SET sz1 = ? where id = ? AND log = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, this.id);
+ ps.setString(3, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("onetimelog加减发生错误: " + ex);
+ }
+ }
+
+ public void deleteOneTimeLog(final String log1) {
+ this.deleteOneTimeLog(log1, 1);
+ }
+
+ public void deleteOneTimeLog(final String log1, final int slot) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE onetimelog SET sz1 = ? where id = ? AND log = ?");
+ ps.setInt(1, 0);
+ ps.setInt(2, this.id);
+ ps.setString(3, log1);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("onetimelog加减发生错误: " + ex);
+ }
+ }
+
+ public String getItemName(final int id) {
+ final MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance();
+ return ii.getName(id);
+ }
+
+ public int getzb() {
+ return this.getLJJF(this.id);
+ }
+
+ public void gainzb(final int number) {
+ this.setLJJF(this.id, number);
+ }
+
+ public int getLJJF(final int id) {
+ int jf = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select * from paymoney where characterid =?");
+ ps.setInt(1, id);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("ljjf");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into paymoney (characterid,syjf,ljjf,kydj) VALUES (?,?,?,?)");
+ psu.setInt(1, id);
+ psu.setInt(2, 0);
+ psu.setInt(3, 0);
+ psu.setInt(4, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("累计积分读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public int getSYJF(final int id) {
+ int jf = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select * from paymoney where characterid =?");
+ ps.setInt(1, id);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("syjf");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into paymoney (characterid,syjf,ljjf,kydj) VALUES (?,?,?,?)");
+ psu.setInt(1, id);
+ psu.setInt(2, 0);
+ psu.setInt(3, 0);
+ psu.setInt(4, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ ps.close();
+ rs.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("剩余积分读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public int getKYDJ(final int id) {
+ int jf = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select * from paymoney where characterid =?");
+ ps.setInt(1, id);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("kydj");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into paymoney (characterid,syjf,ljjf,kydj) VALUES (?,?,?,?)");
+ psu.setInt(1, id);
+ psu.setInt(2, 0);
+ psu.setInt(3, 0);
+ psu.setInt(4, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ ps.close();
+ rs.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("可用点券读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public int getMRJF(final int id) {
+ int jf = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select * from paymoney1 where characterid =?");
+ ps.setInt(1, id);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("mrjf");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into paymoney1 (characterid,mrjf) VALUES (?,?)");
+ psu.setInt(1, id);
+ psu.setInt(2, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ ps.close();
+ rs.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("每日积分读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void setLJJF(final int id, final int slot) {
+ final int jf = this.getLJJF(id);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE paymoney SET ljjf = ? where characterid = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, id);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("累计充值加减发生错误: " + ex);
+ }
+ }
+
+ public void setSYJF(final int id, final int slot) {
+ final int jf = this.getSYJF(id);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE paymoney SET syjf = ? where characterid = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, id);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("剩余充值加减发生错误: " + ex);
+ }
+ }
+
+ public void setKYDJ(final int id, final int slot) {
+ final int jf = this.getKYDJ(id);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE paymoney SET kydj = ? where characterid = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, id);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("可用点券加减发生错误: " + ex);
+ }
+ }
+
+ public void setMRJF(final int id, final int slot) {
+ final int jf = this.getMRJF(id);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE paymoney1 SET mrjf = ? where characterid = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, id);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("每日充值加减发生错误: " + ex);
+ }
+ }
+
+ public int getMountId() {
+ for (int i = 0; i < Start.坐骑列表.size(); ++i) {
+ if (this.id == ((Integer) (Start.坐骑列表.get(i)).getLeft()).intValue()) {
+ return ((Integer) (Start.坐骑列表.get(i)).getRight()).intValue();
+ }
+ }
+ this.初始化坐骑();
+ return 0;
+ }
+
+ public void setMountId(final int cid) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ PreparedStatement ps = null;
+ ps = con.prepareStatement("UPDATE riddingmob SET numb = ? WHERE characterid = ?");
+ ps.setInt(1, cid);
+ ps.setInt(2, this.id);
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("更新坐骑发生错误: " + ex);
+ }
+ Start.坐骑列表.clear();
+ Start.GetRidMobTable();
+ }
+
+ public void 初始化坐骑() {
+ Start.坐骑列表.clear();
+ final int jf = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("insert into riddingmob (characterid,numb) VALUES (?,?)");
+ ps.setInt(1, this.id);
+ ps.setInt(2, 1902000);
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException ex) {
+ System.err.println("初始化坐骑发生错误: " + ex);
+ }
+ Start.GetRidMobTable();
+ }
+
+ public final int getNX() {
+ return this.getCSPoints(1);
+ }
+
+ public void setQuestAdd(final int quest) {
+ this.setQuestAddZ(MapleQuest.getInstance(quest), (byte) 2, null);
+ }
+
+ public final void setQuestAddZ(final MapleQuest quest, final byte status, final String customData) {
+ final MapleQuestStatus stat = new MapleQuestStatus(quest, (int) status);
+ stat.setCustomData(customData);
+ this.quests.put(quest, stat);
+ }
+
+ public long getLimitBreak() {
+ return this.limitBreak;
+ }
+
+ public void setLimitBreak(final long limitBreak) {
+ this.limitBreak = limitBreak;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE characters SET limitBreak = ? WHERE id = ?");
+ ps.setLong(1, limitBreak);
+ ps.setInt(2, this.getId());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException Ex) {
+ System.err.println("更新角色破功值错误-ps。" + Ex);
+ }
+ }
+
+ public int getReinNumber() {
+ return this.reinNumber;
+ }
+
+ public void setReinNumber(final int reinNumber) {
+ this.reinNumber = reinNumber;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE characters SET reinNumber = ? WHERE id = ?");
+ ps.setLong(1, (long) reinNumber);
+ ps.setInt(2, this.getId());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException Ex) {
+ System.err.println("更新角色破功值错误-ps。" + Ex);
+ }
+ }
+
+ public int getjyhbh() {
+ return this.jyhbh;
+ }
+
+ public final String ssjyhitem(final String beizhu) {
+ if (Start.canCheckjyh()) {
+ injyhDb();
+ }
+ String fh = "";
+ final Iterator i = Start.jyhshu.keySet().iterator();
+ while (i.hasNext()) {
+ final int key = ((Integer) i.next()).intValue();
+ if (((jyhwpss) Start.jyhshu.get(Integer.valueOf(key))).getbeizhu().indexOf(beizhu) != -1) {
+ fh = fh + "" + key + "#" + ((jyhwpss) Start.jyhshu.get(Integer.valueOf(key))).getbeizhu() + " (" + ((jyhwpss) Start.jyhshu.get(Integer.valueOf(key))).getsl() + ")@";
+ }
+ }
+ return fh;
+ }
+
+ public final String ssjyhitema(final int lei) {
+ if (Start.canCheckjyh()) {
+ injyhDb();
+ }
+ String fh = "";
+ final Iterator i = Start.jyhshu.keySet().iterator();
+ while (i.hasNext()) {
+ final int key = ((Integer) i.next()).intValue();
+ if (((jyhwpss) Start.jyhshu.get(Integer.valueOf(key))).inventorytype == lei) {
+ fh = fh + "" + key + "#" + ((jyhwpss) Start.jyhshu.get(Integer.valueOf(key))).getbeizhu() + " (" + ((jyhwpss) Start.jyhshu.get(Integer.valueOf(key))).getsl() + ")@";
+ }
+ }
+ return fh;
+ }
+
+ public final String ssjyhitemb() {
+ String fh = "";
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM jyh where charactersid =" + this.id);
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ String lx = "";
+ switch (rs.getInt("moneytype")) {
+ case 1: {
+ lx = " 点卷";
+ break;
+ }
+ case 2: {
+ lx = " 抵用卷";
+ break;
+ }
+ case 0: {
+ lx = " 金币";
+ break;
+ }
+ case 3: {
+ lx = " 交易币";
+ break;
+ }
+ }
+ fh = fh + "" + rs.getInt("tid") + "#" + rs.getString("beizhu") + " * " + (int) rs.getShort("quantity") + " 售价: " + rs.getInt("money") + lx + "@";
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ return fh;
+ } catch (SQLException ex) {
+ System.out.println("读取自身交易行失败");
+ return fh;
+ }
+ }
+
+ public final String cxjyhyh() {
+ String fh = "";
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ PreparedStatement ps = con.prepareStatement("SELECT * FROM jyhyh where characterid =" + this.id);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ fh = fh + "" + rs.getInt("jb") + "#" + rs.getInt("dj") + "#" + rs.getInt("jyb");
+ } else if (fh == "") {
+ final Connection con2 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con2.prepareStatement("insert into jyhyh (characterid,jb,dj,jyb) values (?,?,?,?)");
+ ps.setInt(1, this.id);
+ ps.setInt(2, 0);
+ ps.setInt(3, 0);
+ ps.setInt(4, 0);
+ ps.executeUpdate();
+ ps.close();
+ con2.close();
+ Start.jyhdq.put(Integer.valueOf(this.id), Boolean.valueOf(true));
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ if (fh != "") {
+ Start.jyhdq.put(Integer.valueOf(this.id), Boolean.valueOf(true));
+ }
+ return fh;
+ } catch (SQLException ex) {
+ System.out.println("读取自身交易行失败");
+ return fh;
+ }
+ }
+
+ public static void injyhDb() {
+ if (!Start.交易行) {
+ return;
+ }
+ Start.jyhItem.clear();
+ Start.jyhshu.clear();
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM jyh");
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ final int inventorytype = rs.getInt("inventorytype");
+ if (inventorytype == 1) {
+ Equip equip = null;
+ equip = new Equip(rs.getInt("itemid"), (short) 0);
+ equip.setQuantity((short) 1);
+ equip.setOwner(rs.getString("owner"));
+ equip.setExpiration(rs.getLong("expiredate"));
+ equip.setUpgradeSlots(rs.getByte("upgradeslots"));
+ equip.setLevel(rs.getByte("level"));
+ equip.setStr(rs.getShort("str"));
+ equip.setDex(rs.getShort("dex"));
+ equip.setInt(rs.getShort("int"));
+ equip.setLuk(rs.getShort("luk"));
+ equip.setHp(rs.getShort("hp"));
+ equip.setMp(rs.getShort("mp"));
+ equip.setWatk(rs.getShort("watk"));
+ equip.setMatk(rs.getShort("matk"));
+ equip.setWdef(rs.getShort("wdef"));
+ equip.setMdef(rs.getShort("mdef"));
+ equip.setAcc(rs.getShort("acc"));
+ equip.setAvoid(rs.getShort("avoid"));
+ equip.setHands(rs.getShort("hands"));
+ equip.setSpeed(rs.getShort("speed"));
+ equip.setJump(rs.getShort("jump"));
+ equip.setViciousHammer(rs.getByte("ViciousHammer"));
+ equip.setItemEXP(rs.getInt("itemEXP"));
+ equip.setGMLog(rs.getString("GM_Log"));
+ equip.setDurability(rs.getInt("durability"));
+ equip.setEnhance(rs.getByte("enhance"));
+ equip.setPotential1(rs.getShort("potential1"));
+ equip.setPotential2(rs.getShort("potential2"));
+ equip.setPotential3(rs.getShort("potential3"));
+ equip.setHpR(rs.getShort("hpR"));
+ equip.setMpR(rs.getShort("mpR"));
+ equip.setGiftFrom(rs.getString("sender"));
+ equip.setIncSkill(rs.getInt("incSkill"));
+ equip.setPVPDamage(rs.getShort("pvpDamage"));
+ equip.setCharmEXP(rs.getShort("charmEXP"));
+ Start.jyhItem.add(new MaplePlayerShopItem((Item) equip.copy(), (short) 1, rs.getInt("money"), rs.getInt("moneytype"), rs.getInt("tid")));
+ Start.jyhshucc(rs.getInt("itemid"), 1, rs.getString("beizhu"), inventorytype);
+ } else {
+ final Item item = new Item(rs.getInt("itemid"), rs.getByte("position"), rs.getShort("quantity"));
+ Start.jyhItem.add(new MaplePlayerShopItem((Item) item.copy(), rs.getShort("quantity"), rs.getInt("money"), rs.getInt("moneytype"), rs.getInt("tid")));
+ Start.jyhshucc(rs.getInt("itemid"), 1, rs.getString("beizhu"), inventorytype);
+ }
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.out.println("读取交易行失败" + ex);
+ }
+ }
+
+ public int getwzcz(final int id) {
+ int jf = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select * from paymoney2 where characterid =?");
+ ps.setInt(1, id);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("jyhhb");
+ } else {
+ final PreparedStatement psu = con.prepareStatement("insert into paymoney2 (characterid,jyhhb) VALUES (?,?)");
+ psu.setInt(1, id);
+ psu.setInt(2, 0);
+ psu.executeUpdate();
+ psu.close();
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("交易行货币读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public void gainwzcz(final int id, final int slot) {
+ final int jf = this.getwzcz(id);
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE paymoney2 SET jyhhb = ? where characterid = ?");
+ ps.setInt(1, jf + slot);
+ ps.setInt(2, id);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("交易行货币加减发生错误: " + ex);
+ }
+ }
+
+ public boolean buyjyhitem(final int 编号) {
+ return Start.交易行 && Start.buyjyh(this, 编号);
+ }
+
+ public final boolean canHoldSlots(final int slot) {
+ for (int i = 1; i <= 5; ++i) {
+ if (this.getInventory(MapleInventoryType.getByType((byte) i)).isFull(slot)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean gainjyhyh(final int lei, final int characterid, final int slot) {
+ if (!Start.jyhdq.containsKey(Integer.valueOf(characterid))) {
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ PreparedStatement ps = con.prepareStatement("SELECT * FROM jyhyh where characterid =" + characterid);
+ final ResultSet rs = ps.executeQuery();
+ String fh = null;
+ while (rs.next()) {
+ fh = fh + "" + rs.getInt("jb") + "#" + rs.getInt("dj") + "#" + rs.getInt("jyb");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ if (fh == null) {
+ final Connection con2 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ ps = con2.prepareStatement("insert into jyhyh (characterid,jb,dj,jyb) values (?,?,?,?)");
+ ps.setInt(1, characterid);
+ ps.setInt(2, 0);
+ ps.setInt(3, 0);
+ ps.setInt(4, 0);
+ ps.executeUpdate();
+ ps.close();
+ con2.close();
+ Start.jyhdq.put(Integer.valueOf(characterid), Boolean.valueOf(true));
+ }
+ } catch (SQLException ex) {
+ return false;
+ }
+ }
+ if (slot == 0) {
+ return false;
+ }
+ if (lei == 0) {
+ try {
+ final int cid = characterid;
+ final Connection con3 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps2 = con3.prepareStatement("UPDATE jyhyh SET jb =jb+ " + slot + " WHERE characterid = " + cid + "");
+ ps2.executeUpdate();
+ ps2.close();
+ con3.close();
+ return true;
+ } catch (SQLException ex) {
+ return false;
+ }
+ }
+ if (lei == 1) {
+ try {
+ final int cid = characterid;
+ final Connection con3 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps2 = con3.prepareStatement("UPDATE jyhyh SET dj =dj+ " + slot + " WHERE characterid = " + cid + "");
+ ps2.executeUpdate();
+ ps2.close();
+ con3.close();
+ return true;
+ } catch (SQLException ex) {
+ return false;
+ }
+ }
+ if (lei == 3) {
+ try {
+ final int cid = characterid;
+ final Connection con3 = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps2 = con3.prepareStatement("UPDATE jyhyh SET jyb =jyb+ " + slot + " WHERE characterid = " + cid + "");
+ ps2.executeUpdate();
+ ps2.close();
+ con3.close();
+ return true;
+ } catch (SQLException ex) {
+ return false;
+ }
+ }
+ return false;
+ }
+
+ public final void killjyhitem(final int id) {
+ for (final MaplePlayerShopItem itemss : Start.jyhItem) {
+ if (itemss.jyhid == id) {
+ Start.jyhItem.remove(itemss);
+ Start.jyhshucc(itemss.item.getItemId(), -1, ((jyhwpss) Start.jyhshu.get(Integer.valueOf(itemss.item.getItemId()))).getbeizhu(), ((jyhwpss) Start.jyhshu.get(Integer.valueOf(itemss.item.getItemId()))).getinventorytype());
+ break;
+ }
+ }
+ }
+
+ public int getOneTimeLogcs(final String log1) {
+ return this.getOneTimeLog(log1);
+ }
+
+ public void gainOneTimeLogcs(final String log1, final int slot) {
+ this.setOneTimeLog(log1, slot);
+ }
+
+ public boolean hasBlockedInventory() {
+ return !this.isAlive() || this.getTrade() != null || this.getConversation() > 0 || this.getPlayerShop() != null || this.map == null;
+ }
+
+ public int getInviteid(final int log1) {
+ int jf = 0;
+ try {
+ final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("select * from invsystem where ownid =? ");
+ ps.setInt(1, log1);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ jf = rs.getInt("objecid");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("invsystem读取发生错误: " + ex);
+ }
+ return jf;
+ }
+
+ public boolean get吸怪状态() {
+ return this.吸怪状态;
+ }
+
+ public void set吸怪状态(boolean xx) {
+ this.吸怪状态 = xx;
+ }
+
+ public enum FameStatus {
+ OK,
+ NOT_TODAY,
+ NOT_THIS_MONTH;
+ }
+
+ public int 取限制等级() {
+ int 限制等级 = 0;
+ try {
+ final int cid = 4001128;
+ final Connection con = DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement limitCheck = con.prepareStatement("SELECT * FROM shijiexianzhidengji WHERE huoyaotongid=" + cid + "");
+ final ResultSet rs = limitCheck.executeQuery();
+ if (rs.next()) {
+ 限制等级 = rs.getInt("xianzhidengji");
+ }
+ limitCheck.close();
+ rs.close();
+ con.close();
+ } catch (SQLException ex) {
+ }
+ return 限制等级;
+ }
+
+ public int getDD() {
+ int Magnification = 0;
+ JSONObject dd = Start.ConfigValuesJson.getJSONObject("ddbb");
+ JSONObject ddzb = Start.ConfigValuesJson.getJSONObject("ddzb");
+
+ if ((dd == null && ddzb == null) || Start.ConfigValuesJson.getInteger("isdd") == 0) return 0;
+
+
+ if (dd != null) {
+ Set strings = dd.keySet();
+ for (String string : strings) {
+ boolean b = this.haveItem(Integer.parseInt(string));
+ if (b) {
+ Magnification += dd.getInteger(string);
+ }
+ }
+ }
+ if (ddzb != null) {
+ Set strings = ddzb.keySet();
+ for (String string : strings) {
+ boolean b = this.hasEquipped(Integer.parseInt(string));
+ if (b) {
+ Magnification += ddzb.getInteger(string);
+
+ }
+ }
+ }
+ List equList = this.getEquList();
+ for (Equip equip : equList) {
+ Magnification += equip.getdd();
+ }
+ return Magnification;
+ }
+
+ public int getDB() {
+ int re = 0;
+ JSONObject dd = Start.ConfigValuesJson.getJSONObject("dbbb");
+ JSONObject ddzb = Start.ConfigValuesJson.getJSONObject("dbzb");
+
+ if ((dd == null && ddzb == null) || Start.ConfigValuesJson.getInteger("isdb") == 0) return 0;
+
+
+ if (dd != null) {
+ Set strings = dd.keySet();
+ for (String string : strings) {
+ boolean b = this.haveItem(Integer.parseInt(string));
+ if (b) {
+ re += dd.getInteger(string);
+ }
+ }
+ }
+ if (ddzb != null) {
+ Set strings = ddzb.keySet();
+ for (String string : strings) {
+ boolean b = this.hasEquipped(Integer.parseInt(string));
+ if (b) {
+ re += ddzb.getInteger(string);
+ }
+ }
+ }
+
+ List equList = this.getEquList();
+ for (Equip equip : equList) {
+ re += equip.getdb();
+ }
+
+ return re;
+ }
+
+
+ public int getQG() {
+ int re = 0;
+ JSONObject qgbb = Start.ConfigValuesJson.getJSONObject("qgbb");
+ JSONObject qgzb = Start.ConfigValuesJson.getJSONObject("qgzb");
+
+ if ((qgbb == null && qgzb == null) || Start.ConfigValuesJson.getInteger("isqg") == 0) return 0;
+ if (qgbb != null) {
+ Set strings = qgbb.keySet();
+ for (String string : strings) {
+ boolean b = this.haveItem(Integer.parseInt(string));
+ if (b) {
+ re += qgbb.getInteger(string);
+ }
+ }
+ }
+ if (qgzb != null) {
+ Set strings = qgzb.keySet();
+ for (String string : strings) {
+ boolean b = this.hasEquipped(Integer.parseInt(string));
+ if (b) {
+ re += qgzb.getInteger(string);
+ }
+ }
+ }
+
+ List equList = this.getEquList();
+ for (Equip equip : equList) {
+ re += equip.getqg();
+ }
+
+ return re;
+ }
+}
diff --git a/src/client/MapleCharacterUtil.java b/src/client/MapleCharacterUtil.java
new file mode 100644
index 0000000..6a5cca0
--- /dev/null
+++ b/src/client/MapleCharacterUtil.java
@@ -0,0 +1,328 @@
+package client;
+
+import tools.FilePrinter;
+import tools.Pair;
+
+import java.sql.ResultSet;
+import java.sql.PreparedStatement;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import tools.FileoutputUtil;
+import database.DBConPool;
+import constants.GameConstants;
+
+import java.util.regex.Pattern;
+
+public class MapleCharacterUtil {
+ private static final Pattern namePattern = Pattern.compile("[a-zA-Z0-9_-]{3,12}");
+ private static final Pattern petPattern = Pattern.compile("[a-zA-Z0-9_-]{4,12}");
+
+ public static final boolean canCreateChar(final String name) {
+ return getIdByName(name) == -1 && isEligibleCharName(name);
+ }
+
+ public static boolean canCreateChar(final String name, final boolean gm) {
+ return getIdByName(name) == -1 && isEligibleCharName(name, gm);
+ }
+
+ public static boolean isEligibleCharName(final String name, final boolean gm) {
+ if (name.getBytes().length > 13) {
+ return false;
+ }
+ if (gm) {
+ return true;
+ }
+ if (name.getBytes().length < 3) {
+ return false;
+ }
+ for (final String z : GameConstants.RESERVED) {
+ if (name.contains((CharSequence) z)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static final boolean isEligibleCharName(final String name) {
+ if (name.length() > 11) {
+ return false;
+ }
+ if (name.length() < 2) {
+ return false;
+ }
+ for (final String z : GameConstants.RESERVED) {
+ if (name.contains((CharSequence) z)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static final boolean canChangePetName(final String name) {
+ if (MapleCharacterUtil.petPattern.matcher((CharSequence) name).matches()) {
+ for (final String z : GameConstants.RESERVED) {
+ if (name.contains((CharSequence) z)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public static final String makeMapleReadable(final String in) {
+ String wui = in.replace('I', 'i');
+ wui = wui.replace('l', 'L');
+ wui = wui.replace((CharSequence) "rn", (CharSequence) "Rn");
+ wui = wui.replace((CharSequence) "vv", (CharSequence) "Vv");
+ wui = wui.replace((CharSequence) "VV", (CharSequence) "Vv");
+ return wui;
+ }
+
+ public static final int getIdByName(final String name) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT id FROM characters WHERE name = ?")) {
+ ps.setString(1, name);
+ int id;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ id = rs.getInt("id");
+ }
+ con.close();
+ return id;
+ } catch (SQLException e) {
+ System.err.println("error 'getIdByName' " + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -1;
+ }
+ }
+
+ public static final boolean PromptPoll(final int accountid) {
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ boolean prompt = false;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ ps = con.prepareStatement("SELECT * from game_poll_reply where AccountId = ?");
+ ps.setInt(1, accountid);
+ rs = ps.executeQuery();
+ prompt = !rs.next();
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+ if (rs != null) {
+ rs.close();
+ }
+ } catch (SQLException e2) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e2);
+ }
+ } finally {
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+ if (rs != null) {
+ rs.close();
+ }
+ } catch (SQLException e2) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e2);
+ }
+ }
+ return prompt;
+ }
+
+ public static final boolean SetPoll(final int accountid, final int selection) {
+ if (!PromptPoll(accountid)) {
+ return false;
+ }
+ PreparedStatement ps = null;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ ps = con.prepareStatement("INSERT INTO game_poll_reply (AccountId, SelectAns) VALUES (?, ?)");
+ ps.setInt(1, accountid);
+ ps.setInt(2, selection);
+ ps.execute();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+ } catch (SQLException e2) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e2);
+ }
+ } finally {
+ try {
+ if (ps != null) {
+ ps.close();
+ }
+ } catch (SQLException e2) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e2);
+ }
+ }
+ return true;
+ }
+
+ private static boolean check_ifPasswordEquals(final String passhash, final String pwd, final String salt) {
+ return (LoginCryptoLegacy.isLegacyPassword(passhash) && LoginCryptoLegacy.checkPassword(pwd, passhash)) || (salt == null && LoginCrypto.checkSha1Hash(passhash, pwd)) || LoginCrypto.checkSaltedSha512Hash(passhash, pwd, salt);
+ }
+
+ public static Pair> getInfoByName(final String name, final int world) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT * FROM characters WHERE name = ? AND world = ?")) {
+ ps.setString(1, name);
+ ps.setInt(2, world);
+ Pair> id;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return null;
+ }
+ id = new Pair(Integer.valueOf(rs.getInt("id")), new Pair(Integer.valueOf(rs.getInt("accountid")), Integer.valueOf(rs.getInt("gender"))));
+ }
+ con.close();
+ return id;
+ } catch (Exception e) {
+ FilePrinter.printError("MapleCharacterUtil.txt", (Throwable) e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return null;
+ }
+ }
+
+ public static void setNXCodeUsed(final String name, final String code) throws SQLException {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE nxcode SET `user` = ?, `valid` = 0 WHERE code = ?")) {
+ ps.setString(1, name);
+ ps.setString(2, code);
+ ps.execute();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+
+ public static void sendNote(final String to, final String name, final String msg, final int fame) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("INSERT INTO notes (`to`, `from`, `message`, `timestamp`, `gift`) VALUES (?, ?, ?, ?, ?)")) {
+ ps.setString(1, to);
+ ps.setString(2, name);
+ ps.setString(3, msg);
+ ps.setLong(4, System.currentTimeMillis());
+ ps.setInt(5, fame);
+ ps.executeUpdate();
+ } catch (SQLException e) {
+ FilePrinter.printError("MapleCharacterUtil.txt", (Throwable) e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public static boolean getNXCodeValid(final String code, boolean validcode) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT `valid` FROM nxcode WHERE code = ?")) {
+ ps.setString(1, code);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ validcode = (rs.getInt("valid") > 0);
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacterUtil.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return validcode;
+ }
+
+ public static int getNXCodeType(final String code) {
+ int type = -1;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT `type` FROM nxcode WHERE code = ?")) {
+ ps.setString(1, code);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ type = rs.getInt("type");
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacterUtil.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return type;
+ }
+
+ public static int getNXCodeItem(final String code) {
+ int item = -1;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT `item` FROM nxcode WHERE code = ?")) {
+ ps.setString(1, code);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ item = rs.getInt("item");
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacterUtil.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return item;
+ }
+
+ public static int getNXCodeSize(final String code) {
+ int item = -1;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT `size` FROM nxcode WHERE code = ?")) {
+ ps.setString(1, code);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ item = rs.getInt("size");
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacterUtil.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return item;
+ }
+
+ public static int getNXCodeTime(final String code) {
+ int item = -1;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT `time` FROM nxcode WHERE code = ?")) {
+ ps.setString(1, code);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ item = rs.getInt("time");
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacterUtil.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return item;
+ }
+
+}
diff --git a/src/client/MapleClient.java b/src/client/MapleClient.java
new file mode 100644
index 0000000..f3e7cc7
--- /dev/null
+++ b/src/client/MapleClient.java
@@ -0,0 +1,1902 @@
+package client;
+
+import tools.MaplePacketCreator;
+
+import java.util.Collections;
+import java.util.ArrayList;
+
+import constants.ServerConstants.PlayerGMRank;
+import server.Timer.PingTimer;
+import tools.packet.LoginPacket;
+import handling.world.family.MapleFamilyCharacter;
+import handling.world.guild.MapleGuildCharacter;
+import handling.world.MapleParty;
+import server.maps.MapleMap;
+import handling.cashshop.CashShopServer;
+import handling.world.World.Find;
+import handling.world.World.Family;
+import handling.world.World.Guild;
+import handling.world.World.Buddy;
+import handling.world.World.Party;
+import handling.world.PartyOperation;
+import handling.world.World.Messenger;
+import handling.world.MapleMessengerCharacter;
+import handling.world.MaplePartyCharacter;
+import server.shops.IMaplePlayerShop;
+import gui.Start;
+import server.quest.MapleQuest;
+import database.DatabaseException;
+
+import java.io.UnsupportedEncodingException;
+import java.security.NoSuchAlgorithmException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import tools.HexTool;
+
+import java.security.MessageDigest;
+
+import tools.FilePrinter;
+import handling.channel.ChannelServer;
+
+import java.sql.ResultSet;
+import java.sql.PreparedStatement;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import tools.FileoutputUtil;
+import database.DBConPool;
+
+import java.util.Iterator;
+import java.util.concurrent.locks.ReentrantLock;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.ScheduledFuture;
+import javax.script.ScriptEngine;
+import java.util.Map;
+import java.util.Set;
+import java.util.List;
+import java.util.Calendar;
+
+import io.netty.channel.Channel;
+import tools.MapleAESOFB;
+import io.netty.util.AttributeKey;
+
+public class MapleClient {
+ public static final transient byte LOGIN_NOTLOGGEDIN = 0;
+ public static final transient byte LOGIN_SERVER_TRANSITION = 1;
+ public static final transient byte LOGIN_LOGGEDIN = 2;
+ public static final transient byte LOGIN_WAITING = 3;
+ public static final transient byte CASH_SHOP_TRANSITION = 4;
+ public static final transient byte LOGIN_CS_LOGGEDIN = 5;
+ public static final transient byte CHANGE_CHANNEL = 6;
+ public static final int DEFAULT_CHARSLOT = 3;
+ public static final AttributeKey CLIENT_KEY = AttributeKey.valueOf("Client");
+ private final MapleAESOFB send;
+ private final MapleAESOFB receive;
+ private final Channel session;
+ private MapleCharacter player;
+ private MapleClient c;
+ private int accountId;
+ private String accountName;
+ private int world;
+ private int channel;
+ private int birthday;
+ private int charslots;
+ private boolean loggedIn;
+ private boolean serverTransition;
+ private boolean canloginpw;
+ private transient Calendar tempban;
+ private transient long lastPong;
+ private transient long lastPing;
+ private boolean monitored;
+ private boolean receiving;
+ private int gmLevel;
+ private short vip;
+ private byte bannedReason;
+ private byte gender;
+ public transient short loginAttempt;
+ private final transient List allowedChar;
+ private final transient Set macs;
+ private final transient Map engines;
+ private transient ScheduledFuture> idleTask;
+ private transient String secondPassword;
+ private final transient Lock mutex;
+ private final transient Lock npcMutex;
+ private long lastNpcClick;
+ private long lastLoginTime;
+ private static final Lock loginMutex = new ReentrantLock(true);
+ private String loginKey;
+ private String serverKey;
+ private int loginKeya;
+ private boolean closeseesion;
+
+ public MapleClient(final MapleAESOFB send, final MapleAESOFB receive, final Channel session) {
+ this.accountId = 1;
+ this.world = 1;
+ this.channel = 1;
+ this.charslots = 3;
+ this.loggedIn = false;
+ this.serverTransition = false;
+ this.canloginpw = false;
+ this.tempban = null;
+ this.lastPong = 0L;
+ this.lastPing = 0L;
+ this.monitored = false;
+ this.receiving = true;
+ this.bannedReason = 1;
+ this.gender = -1;
+ this.loginAttempt = 0;
+ this.allowedChar = (List) new LinkedList();
+ this.macs = (Set) new HashSet();
+ this.engines = (Map) new HashMap();
+ this.idleTask = null;
+ this.mutex = new ReentrantLock(true);
+ this.npcMutex = new ReentrantLock();
+ this.lastNpcClick = 0L;
+ this.loginKeya = 0;
+ this.closeseesion = false;
+ this.send = send;
+ this.receive = receive;
+ this.session = session;
+ }
+
+ public final MapleAESOFB getReceiveCrypto() {
+ return this.receive;
+ }
+
+ public final MapleAESOFB getSendCrypto() {
+ return this.send;
+ }
+
+ public final Channel getSession() {
+ return this.session;
+ }
+
+ public final Lock getLock() {
+ return this.mutex;
+ }
+
+ public final Lock getNPCLock() {
+ return this.npcMutex;
+ }
+
+ public MapleCharacter getPlayer() {
+ return this.player;
+ }
+
+ public void setPlayer(final MapleCharacter player) {
+ this.player = player;
+ }
+
+ public void createdChar(final int id) {
+ this.allowedChar.add(Integer.valueOf(id));
+ }
+
+ public final boolean login_Auth(final int id) {
+ return this.allowedChar.contains(Integer.valueOf(id));
+ }
+
+ public final List loadCharacters(final int serverId) {
+ final List chars = (List) new LinkedList();
+ for (final CharNameAndId cni : this.loadCharactersInternal(serverId)) {
+ final MapleCharacter chr = MapleCharacter.loadCharFromDB(cni.id, this, false);
+ chars.add(chr);
+ this.allowedChar.add(Integer.valueOf(chr.getId()));
+ }
+ return chars;
+ }
+
+ public List loadCharacterNames(final int serverId) {
+ final List chars = (List) new LinkedList();
+ for (final CharNameAndId cni : this.loadCharactersInternal(serverId)) {
+ chars.add(cni.name);
+ }
+ return chars;
+ }
+
+ private List loadCharactersInternal(final int serverId) {
+ final List chars = (List) new LinkedList();
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT id, name FROM characters WHERE accountid = ? AND world = ?")) {
+ ps.setInt(1, this.accountId);
+ ps.setInt(2, serverId);
+ try (final ResultSet rs = ps.executeQuery()) {
+ while (rs.next()) {
+ chars.add(new CharNameAndId(rs.getString("name"), rs.getInt("id")));
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("error loading characters internal" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ return chars;
+ }
+
+ public boolean isLoggedIn() {
+ return this.loggedIn;
+ }
+
+ private Calendar getTempBanCalendar(final ResultSet rs) throws SQLException {
+ final Calendar lTempban = Calendar.getInstance();
+ if (rs.getLong("tempban") == 0L) {
+ lTempban.setTimeInMillis(0L);
+ return lTempban;
+ }
+ final Calendar today = Calendar.getInstance();
+ lTempban.setTimeInMillis(rs.getTimestamp("tempban").getTime());
+ if (today.getTimeInMillis() < lTempban.getTimeInMillis()) {
+ return lTempban;
+ }
+ lTempban.setTimeInMillis(0L);
+ return lTempban;
+ }
+
+ public Calendar getTempBanCalendar() {
+ return this.tempban;
+ }
+
+ public byte getBanReason() {
+ return this.bannedReason;
+ }
+
+ public boolean isBannedIP(final String ip) {
+ boolean ret = false;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM ipbans WHERE ? LIKE CONCAT(ip, '%')")) {
+ ps.setString(1, ip);
+ try (final ResultSet rs = ps.executeQuery()) {
+ rs.next();
+ if (rs.getInt(1) > 0) {
+ ret = true;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("Error checking ip bans" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return ret;
+ }
+
+ public boolean hasBannedIP() {
+ boolean ret = false;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM ipbans WHERE ? LIKE CONCAT(ip, '%')")) {
+ ps.setString(1, this.getSessionIPAddress());
+ try (final ResultSet rs = ps.executeQuery()) {
+ rs.next();
+ if (rs.getInt(1) > 0) {
+ ret = true;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("Error checking ip bans" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return ret;
+ }
+
+ public int finishLogin() {
+ MapleClient.loginMutex.lock();
+ try {
+ final byte state = this.getLoginState();
+ if (state > 0 && state != 3) {
+ this.loggedIn = false;
+ return 7;
+ }
+ this.updateLoginState(2, this.getSessionIPAddress());
+ } finally {
+ MapleClient.loginMutex.unlock();
+ }
+ return 0;
+ }
+
+ public int login(final String account, final String password, final boolean isIPBanned) {
+ int loginok = 5;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ try (final PreparedStatement ps = con.prepareStatement("SELECT id, banned, password, salt, macs, 2ndpassword, gm, vip, greason, tempban, gender, SessionIP FROM accounts WHERE name = ?")) {
+ ps.setString(1, account);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ final int banned = rs.getInt("banned");
+ final String passhash = rs.getString("password");
+ final String salt = rs.getString("salt");
+ final String oldSession = rs.getString("SessionIP");
+ this.accountId = rs.getInt("id");
+ this.secondPassword = rs.getString("2ndpassword");
+ this.gmLevel = rs.getInt("gm");
+ this.vip = rs.getShort("vip");
+ this.bannedReason = rs.getByte("greason");
+ this.tempban = this.getTempBanCalendar(rs);
+ this.gender = rs.getByte("gender");
+ ps.close();
+ if (banned > 0 && !this.isGm()) {
+ loginok = 3;
+ } else {
+ if (banned == -1) {
+ this.unban();
+ }
+ final byte loginstate = this.getLoginState();
+ boolean updatePasswordHash = false;
+ if (LoginCryptoLegacy.isLegacyPassword(passhash) && LoginCryptoLegacy.checkPassword(password, passhash)) {
+ loginok = 0;
+ updatePasswordHash = true;
+ } else if (salt == null && LoginCrypto.checkSha1Hash(passhash, password)) {
+ loginok = 0;
+ updatePasswordHash = true;
+ } else if (password.equals(passhash)) {
+ loginok = 0;
+ updatePasswordHash = true;
+ } else if (LoginCrypto.checkSaltedSha512Hash(passhash, password, salt)) {
+ loginok = 0;
+ } else {
+ this.loggedIn = false;
+ loginok = 4;
+ }
+ if (loginok == 0) {
+ ChannelServer.forceRemovePlayerByAccId(this, this.accountId);
+ this.updateLoginState(0, this.getSessionIPAddress());
+ }
+ }
+ }
+ rs.close();
+ }
+ ps.close();
+ }
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("ERROR" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ if (loginok == 0) {
+ this.canloginpw = true;
+ this.lastLoginTime = System.currentTimeMillis();
+ }
+ return loginok;
+ }
+
+ public void loadVip(final int accountID) {
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ ps = con.prepareStatement("SELECT vip FROM accounts WHERE id = ?");
+ ps.setInt(1, accountID);
+ rs = ps.executeQuery();
+ if (rs.next()) {
+ this.vip = rs.getShort("vip");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FilePrinter.printError("MapleClient.txt", (Throwable) e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ try {
+ if (rs != null && !rs.isClosed()) {
+ rs.close();
+ }
+ if (ps != null && !ps.isClosed()) {
+ ps.close();
+ }
+ } catch (SQLException e2) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e2);
+ }
+ } finally {
+ try {
+ if (rs != null && !rs.isClosed()) {
+ rs.close();
+ }
+ if (ps != null && !ps.isClosed()) {
+ ps.close();
+ }
+ } catch (SQLException e2) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e2);
+ }
+ }
+ }
+
+ public final void update2ndPassword() {
+ try {
+ final MessageDigest digester = MessageDigest.getInstance("SHA-1");
+ digester.update(this.secondPassword.getBytes("UTF-8"), 0, this.secondPassword.length());
+ final String hash = HexTool.toString(digester.digest()).replace((CharSequence) " ", (CharSequence) "").toLowerCase();
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE `accounts` SET `2ndpassword` = ? WHERE id = ?")) {
+ ps.setString(1, hash);
+ ps.setInt(2, this.accountId);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleClient.txt", (Throwable) ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex4) {
+ Logger.getLogger(MapleClient.class.getName()).log(Level.SEVERE, null, (Throwable) ex4);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex4);
+ }
+ }
+
+ private void unban() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ try (final PreparedStatement ps = con.prepareStatement("UPDATE accounts SET banned = 0 and banreason = '' WHERE id = ?")) {
+ ps.setInt(1, this.accountId);
+ ps.executeUpdate();
+ ps.close();
+ }
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("Error while unbanning" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public static final byte unban(final String charname) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("SELECT accountid from characters where name = ?");
+ ps.setString(1, charname);
+ final ResultSet rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final int accid = rs.getInt(1);
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("UPDATE accounts SET banned = 0 and banreason = '' WHERE id = ?");
+ ps.setInt(1, accid);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("Error while unbanning" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -2;
+ }
+ return 0;
+ }
+
+ public void setAccID(final int id) {
+ this.accountId = id;
+ }
+
+ public int getAccID() {
+ return this.accountId;
+ }
+
+ public final void updateLoginState(final int newstate, final String SessionID) {
+ MapleClient.loginMutex.lock();
+ try {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts SET loggedin = ?, SessionIP = ?, lastlogin = CURRENT_TIMESTAMP() WHERE id = ?")) {
+ ps.setInt(1, newstate);
+ ps.setString(2, SessionID);
+ ps.setInt(3, this.getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("更新登入状态错误" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ if (newstate == 0 || newstate == 3) {
+ this.loggedIn = false;
+ this.serverTransition = false;
+ } else {
+ this.serverTransition = (newstate == 1 || newstate == 6);
+ this.loggedIn = !this.serverTransition;
+ }
+ } finally {
+ MapleClient.loginMutex.unlock();
+ }
+ }
+
+ public final void updateGender() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE `accounts` SET `gender` = ? WHERE id = ?")) {
+ ps.setInt(1, (int) this.gender);
+ ps.setInt(2, this.accountId);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("更新性別错误" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public final byte getLoginState() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT loggedin, lastlogin, `birthday` + 0 AS `bday` FROM accounts WHERE id = ?");
+ ps.setInt(1, this.getAccID());
+ byte state;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (!rs.next()) {
+ ps.close();
+ throw new DatabaseException("Everything sucks");
+ }
+ this.birthday = rs.getInt("bday");
+ state = rs.getByte("loggedin");
+ if ((state == 1 || state == 6) && rs.getTimestamp("lastlogin").getTime() + 70000L < System.currentTimeMillis()) {
+ state = 0;
+ this.updateLoginState((int) state, this.getSessionIPAddress());
+ }
+ rs.close();
+ }
+ ps.close();
+ this.loggedIn = (state == 2);
+ con.close();
+ return state;
+ } catch (SQLException e) {
+ this.loggedIn = false;
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ throw new DatabaseException("登入状态获取失败", (Throwable) e);
+ }
+ }
+
+ public final boolean checkBirthDate(final int date) {
+ return this.birthday == date;
+ }
+
+ public final void removalTask(final boolean shutdown) {
+ try {
+ this.player.cancelAllBuffs_();
+ this.player.cancelAllDebuffs();
+ this.player.cancelAllSkillID();
+ if (this.player.getMarriageId() > 0) {
+ final MapleQuestStatus stat1 = this.player.getQuestNAdd(MapleQuest.getInstance(160001));
+ final MapleQuestStatus stat2 = this.player.getQuestNAdd(MapleQuest.getInstance(160002));
+ if (stat1.getCustomData() != null && (stat1.getCustomData().equals("2_") || stat1.getCustomData().equals("2"))) {
+ if (stat2.getCustomData() != null) {
+ stat2.setCustomData("0");
+ }
+ stat1.setCustomData("3");
+ }
+ }
+ this.player.changeRemoval(true);
+ if (this.player.getEventInstance() != null) {
+ this.player.getEventInstance().playerDisconnected(this.player, this.player.getId());
+ }
+ if (this.player.getMap() != null) {
+ switch (this.player.getMapId()) {
+ case 220080001:
+ case 240060000:
+ case 240060100:
+ case 240060200:
+ case 541010100:
+ case 541020800:
+ case 551030200: {
+ this.player.getMap().addDisconnected(this.player.getId());
+ break;
+ }
+ }
+ if (((Integer) Start.ConfigValuesMap.get("离线泡点开关")).intValue() > 0 && this.player.getMapId() == ((Integer) Start.ConfigValuesMap.get("离线泡点地图")).intValue()) {
+ this.player.getMap().removePlayer2(this.player);
+ } else {
+ this.player.getMap().removePlayer(this.player);
+ }
+ }
+ final IMaplePlayerShop shop = this.player.getPlayerShop();
+ if (shop != null) {
+ shop.removeVisitor(this.player);
+ if (shop.isOwner(this.player)) {
+ if (shop.getShopType() == 1 && shop.isAvailable() && !shutdown) {
+ shop.setOpen(true);
+ } else {
+ shop.closeShop(true, !shutdown);
+ }
+ }
+ }
+ this.player.setMessenger(null);
+ if (this.player.getAntiMacro().inProgress()) {
+ this.player.getAntiMacro().end();
+ }
+ } catch (Throwable e) {
+ FilePrinter.printError("AccountStuck.txt", e);
+ }
+ }
+
+ public final void disconnect(final boolean RemoveInChannelServer, final boolean fromCS) {
+ this.disconnect(RemoveInChannelServer, fromCS, false);
+ }
+
+ public final void disconnect(final boolean RemoveInChannelServer, final boolean fromCS, final boolean shutdown) {
+ try {
+ if (this.player != null) {
+ final MapleMap map = this.player.getMap();
+ final MapleParty party = this.player.getParty();
+ final boolean clone = this.player.isClone();
+ final String namez = this.player.getName();
+ final boolean hidden = this.player.isHidden();
+ final int gmLevel = this.player.getGMLevel();
+ final int idz = this.player.getId();
+ final int messengerid = (this.player.getMessenger() == null) ? 0 : this.player.getMessenger().getId();
+ final int gid = this.player.getGuildId();
+ final int fid = this.player.getFamilyId();
+ final BuddyList bl = this.player.getBuddylist();
+ final MaplePartyCharacter chrp = new MaplePartyCharacter(this.player);
+ final MapleMessengerCharacter chrm = new MapleMessengerCharacter(this.player);
+ final MapleGuildCharacter chrg = this.player.getMGC();
+ final MapleFamilyCharacter chrf = this.player.getMFC();
+ this.removalTask(shutdown);
+ try {
+ if (this.player != null) {
+ this.player.saveToDB(true, fromCS);
+ }
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/下线保存数据异常.txt", (Throwable) ex);
+ FileoutputUtil.logToFile("logs/下线保存数据异常.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.getAccountName() + " 账号ID " + this.getAccID() + " 角色名 " + this.player.getName() + " 角色ID " + this.player.getId());
+ FileoutputUtil.outError("logs/下线保存数据异常.txt", (Throwable) ex);
+ }
+ if (shutdown) {
+ this.player = null;
+ this.receiving = false;
+ return;
+ }
+ if (!fromCS) {
+ final ChannelServer ch = ChannelServer.getInstance((map == null) ? this.channel : map.getChannel());
+ try {
+ if (ch == null || clone || ch.isShutdown()) {
+ this.player = null;
+ return;
+ }
+ if (messengerid > 0) {
+ Messenger.leaveMessenger(messengerid, chrm);
+ }
+ if (party != null) {
+ chrp.setOnline(false);
+ Party.updateParty(party.getId(), PartyOperation.LOG_ONOFF, chrp);
+ if (map != null && party.getLeader().getId() == idz) {
+ MaplePartyCharacter lchr = null;
+ for (final MaplePartyCharacter pchr : party.getMembers()) {
+ if (pchr != null && map.getCharacterById(pchr.getId()) != null && (lchr == null || lchr.getLevel() < pchr.getLevel())) {
+ lchr = pchr;
+ }
+ }
+ if (lchr != null) {
+ Party.updateParty(party.getId(), PartyOperation.CHANGE_LEADER_DC, lchr);
+ }
+ }
+ }
+ if (bl != null) {
+ if (!this.serverTransition && this.isLoggedIn()) {
+ Buddy.loggedOff(namez, idz, this.channel, bl.getBuddiesIds(), gmLevel, hidden);
+ } else {
+ Buddy.loggedOn(namez, idz, this.channel, bl.getBuddiesIds(), gmLevel, hidden);
+ }
+ }
+ if (gid > 0) {
+ Guild.setGuildMemberOnline(chrg, false, -1);
+ }
+ if (fid > 0) {
+ Family.setFamilyMemberOnline(chrf, false, -1);
+ }
+ } catch (Exception e) {
+ FilePrinter.printError("AccountStuck.txt", (Throwable) e);
+ } finally {
+ if (RemoveInChannelServer && ch != null) {
+ ch.removePlayer(idz, namez);
+ }
+ this.player = null;
+ }
+ } else {
+ final int ch2 = Find.findChannel(idz);
+ if (ch2 > 0) {
+ this.disconnect(RemoveInChannelServer, false);
+ return;
+ }
+ try {
+ if (party != null) {
+ chrp.setOnline(false);
+ Party.updateParty(party.getId(), PartyOperation.LOG_ONOFF, chrp);
+ }
+ if (!this.serverTransition && this.isLoggedIn()) {
+ Buddy.loggedOff(namez, idz, this.channel, bl.getBuddiesIds(), gmLevel, hidden);
+ } else {
+ Buddy.loggedOn(namez, idz, this.channel, bl.getBuddiesIds(), gmLevel, hidden);
+ }
+ if (gid > 0) {
+ Guild.setGuildMemberOnline(chrg, false, -1);
+ }
+ if (this.player != null) {
+ this.player.setMessenger(null);
+ }
+ } catch (Exception e) {
+ FilePrinter.printError("AccountStuck.txt", (Throwable) e);
+ } finally {
+ if ((RemoveInChannelServer && ch2 > 0) || (RemoveInChannelServer && ch2 == -10)) {
+ CashShopServer.getPlayerStorage().deregisterPlayer(idz, namez);
+ }
+ this.player = null;
+ }
+ }
+ }
+ if (!this.serverTransition && this.isLoggedIn()) {
+ this.updateLoginState(0, this.getSessionIPAddress());
+ }
+ this.engines.clear();
+ } catch (Exception ex2) {
+ FileoutputUtil.logToFile("logs/下线处理异常.txt", "\r\n " + FileoutputUtil.NowTime() + " IP: " + this.getSession().remoteAddress().toString().split(":")[0] + " 账号 " + this.getAccountName() + " 账号ID " + this.getAccID() + " 角色名 " + this.player.getName() + " 角色ID " + this.player.getId());
+ FileoutputUtil.outError("logs/下线处理异常.txt", (Throwable) ex2);
+ FileoutputUtil.outError("logs/下线处理异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public final String getSessionIPAddress() {
+ if (this.session != null && this.session.remoteAddress() != null) {
+ return this.session.remoteAddress().toString().split(":")[0];
+ }
+ return this.getLastIPAddress();
+ }
+
+ public final String getLastIPAddress() {
+ String sessionIP = null;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT SessionIP FROM accounts WHERE id = ?")) {
+ ps.setInt(1, this.accountId);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ sessionIP = rs.getString("SessionIP");
+ }
+ }
+ } catch (SQLException e) {
+ System.err.println("Failed in checking IP address for client.");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ return (sessionIP == null) ? "" : sessionIP;
+ }
+
+ public final boolean CheckIPAddress() {
+ boolean canlogin = false;
+ final String sessionIP = this.getLastIPAddress();
+ if (!sessionIP.isEmpty()) {
+ canlogin = this.getSessionIPAddress().equals(sessionIP.split(":")[0]);
+ }
+ return canlogin;
+ }
+
+ public final void DebugMessage(final StringBuilder sb) {
+ sb.append(this.getSession().remoteAddress());
+ sb.append(" Connected: ");
+ sb.append(this.getSession().isActive());
+ sb.append(" ClientKeySet: ");
+ sb.append(this.getSession().attr(MapleClient.CLIENT_KEY).get() != null);
+ sb.append(" loggedin: ");
+ sb.append(this.isLoggedIn());
+ sb.append(" has char: ");
+ sb.append(this.getPlayer() != null);
+ }
+
+ public final int getChannel() {
+ return this.channel;
+ }
+
+ public final ChannelServer getChannelServer() {
+ return ChannelServer.getInstance(this.channel);
+ }
+
+ public final int deleteCharacter(final int cid) {
+ String name = null;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = null;
+ ps = con.prepareStatement("select name from characters where id = ?");
+ ps.setInt(1, cid);
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ name = rs.getString("name");
+ }
+ ps.close();
+ rs.close();
+ } catch (Exception ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ FileoutputUtil.logToFile("Logs/Data/角色刪除.txt", FileoutputUtil.NowTime() + " 账号: " + this.accountName + "(" + this.accountId + ") 角色: " + cid + " (" + name + ") IP: " + this.getSessionIPAddress() + " \r\n");
+ final Set channels = ChannelServer.getAllChannels();
+ for (final Integer ch : channels) {
+ final MapleCharacter chr = ChannelServer.getInstance(ch.intValue()).getPlayerStorage().getCharacterById(cid);
+ if (chr != null) {
+ ChannelServer.getInstance(ch.intValue()).removePlayer(chr);
+ }
+ }
+ try (final Connection con2 = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ try (final PreparedStatement ps2 = con2.prepareStatement("SELECT guildid, guildrank, familyid, name FROM characters WHERE id = ? AND accountid = ?")) {
+ ps2.setInt(1, cid);
+ ps2.setInt(2, this.accountId);
+ try (final ResultSet rs2 = ps2.executeQuery()) {
+ if (!rs2.next()) {
+ rs2.close();
+ ps2.close();
+ return 1;
+ }
+ if (rs2.getInt("guildid") > 0) {
+ if (rs2.getInt("guildrank") == 1) {
+ rs2.close();
+ ps2.close();
+ return 1;
+ }
+ Guild.deleteGuildCharacter(rs2.getInt("guildid"), cid);
+ }
+ if (rs2.getInt("familyid") > 0) {
+ Family.getFamily(rs2.getInt("familyid")).leaveFamily(cid);
+ }
+ }
+ }
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM characters WHERE id = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM monsterbook WHERE charid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM mts_cart WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM mts_items WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM mountdata WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM inventoryitems WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM famelog WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM famelog WHERE characterid_to = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM dueypackages WHERE RecieverId = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM wishlist WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM buddies WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM buddies WHERE buddyid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM keymap WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM savedlocations WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM skills WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM mountdata WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM skillmacros WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM trocklocations WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM queststatus WHERE characterid = ?", cid);
+ MapleCharacter.deleteWhereCharacterId(con2, "DELETE FROM inventoryslot WHERE characterid = ?", cid);
+ return 0;
+ } catch (Exception e) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) e, "deleteCharacter");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return 1;
+ }
+ }
+
+ public final byte getGender() {
+ return this.gender;
+ }
+
+ public final void setGender(final byte gender) {
+ this.gender = gender;
+ }
+
+ public final String getSecondPassword() {
+ return this.secondPassword;
+ }
+
+ public boolean getCheckSecondPassword(final String in) {
+ boolean allow = false;
+ if (LoginCrypto.checkSha1Hash(this.secondPassword, in)) {
+ allow = true;
+ }
+ return allow;
+ }
+
+ public final void updateSecondPassword() {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("UPDATE `accounts` SET `2ndpassword` = ? WHERE id = ?");
+ ps.setString(1, LoginCrypto.hexSha1(this.secondPassword));
+ ps.setInt(2, this.accountId);
+ ps.executeUpdate();
+ ps.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ FileoutputUtil.outputFileError("logs/资料库异常.txt", (Throwable) e);
+ System.err.println("error updating login state" + e);
+ }
+ }
+
+ public final void setSecondPassword(final String secondPassword) {
+ this.secondPassword = secondPassword;
+ }
+
+ public boolean check2ndPassword(final String secondPassword) {
+ boolean allow = false;
+ if (checkHash(this.secondPassword, "SHA-1", secondPassword)) {
+ allow = true;
+ }
+ return allow;
+ }
+
+ public static boolean checkHash(final String hash, final String type, final String password) {
+ try {
+ final MessageDigest digester = MessageDigest.getInstance(type);
+ digester.update(password.getBytes("UTF-8"), 0, password.length());
+ return HexTool.toString(digester.digest()).replace((CharSequence) " ", (CharSequence) "").toLowerCase().equals(hash);
+ } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex2) {
+ throw new RuntimeException("Encoding the string failed", (Throwable) ex2);
+ }
+ }
+
+ public final String getAccountName() {
+ return this.accountName;
+ }
+
+ public final void setAccountName(final String accountName) {
+ this.accountName = accountName;
+ }
+
+ public final void setChannel(final int channel) {
+ this.channel = channel;
+ }
+
+ public final int getWorld() {
+ return this.world;
+ }
+
+ public final void setWorld(final int world) {
+ this.world = world;
+ }
+
+ public final int getLatency() {
+ return (int) (this.lastPong - this.lastPing);
+ }
+
+ public final long getLastPong() {
+ return this.lastPong;
+ }
+
+ public final long getLastPing() {
+ return this.lastPing;
+ }
+
+ public final void pongReceived() {
+ this.lastPong = System.currentTimeMillis();
+ }
+
+ public final void sendPing() {
+ this.lastPing = System.currentTimeMillis();
+ this.session.writeAndFlush(LoginPacket.getPing());
+ PingTimer.getInstance().schedule((Runnable) new Runnable() {
+ @Override
+ public void run() {
+ try {
+ if (MapleClient.this.getLatency() < 0) {
+ MapleClient.this.closeseesion = true;
+ MapleClient.this.setReceiving(false);
+ MapleClient.this.updateLoginState(0, MapleClient.this.getSessionIPAddress());
+ MapleClient.this.getSession().close();
+ }
+ } catch (NullPointerException e) {
+ MapleClient.this.closeseesion = true;
+ MapleClient.this.getSession().close();
+ }
+ }
+ }, 30000L);
+ }
+
+ public boolean canClickNPC() {
+ return this.lastNpcClick + 500L < System.currentTimeMillis();
+ }
+
+ public void setClickedNPC() {
+ this.lastNpcClick = System.currentTimeMillis();
+ }
+
+ public void removeClickedNPC() {
+ this.lastNpcClick = 0L;
+ }
+
+ public static final String getLogMessage(final MapleClient cfor, final String message) {
+ return getLogMessage(cfor, message, new Object[0]);
+ }
+
+ public static final String getLogMessage(final MapleCharacter cfor, final String message) {
+ return getLogMessage((cfor == null) ? null : cfor.getClient(), message);
+ }
+
+ public static final String getLogMessage(final MapleCharacter cfor, final String message, final Object... parms) {
+ return getLogMessage((cfor == null) ? null : cfor.getClient(), message, parms);
+ }
+
+ public static final String getLogMessage(final MapleClient cfor, final String message, final Object... parms) {
+ final StringBuilder builder = new StringBuilder();
+ if (cfor != null) {
+ if (cfor.getPlayer() != null) {
+ builder.append("<");
+ builder.append(MapleCharacterUtil.makeMapleReadable(cfor.getPlayer().getName()));
+ builder.append(" (cid: ");
+ builder.append(cfor.getPlayer().getId());
+ builder.append(")> ");
+ }
+ if (cfor.getAccountName() != null) {
+ builder.append("(Account: ");
+ builder.append(cfor.getAccountName());
+ builder.append(") ");
+ }
+ }
+ builder.append(message);
+ for (final Object parm : parms) {
+ final int start = builder.indexOf("{}");
+ builder.replace(start, start + 2, parm.toString());
+ }
+ return builder.toString();
+ }
+
+ public static final int findAccIdForCharacterName(final String charName) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ int ret;
+ try (final PreparedStatement ps = con.prepareStatement("SELECT accountid FROM characters WHERE name = ?")) {
+ ps.setString(1, charName);
+ try (final ResultSet rs = ps.executeQuery()) {
+ ret = -1;
+ if (rs.next()) {
+ ret = rs.getInt("accountid");
+ }
+ }
+ }
+ return ret;
+ } catch (SQLException e) {
+ System.err.println("findAccIdForCharacterName SQL error");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -1;
+ }
+ }
+
+ public boolean isGm() {
+ return this.gmLevel > PlayerGMRank.普通玩家.getLevel();
+ }
+
+ public boolean isSuperGM() {
+ return this.gmLevel >= PlayerGMRank.超级管理员.getLevel();
+ }
+
+ public boolean isGod() {
+ return this.gmLevel >= PlayerGMRank.神.getLevel();
+ }
+
+ public int getGmLevel() {
+ return this.gmLevel;
+ }
+
+ public final void setGmLevel(final int gmLevel) {
+ this.gmLevel = gmLevel;
+ }
+
+ public void setVip(final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("Update Accounts set vip = ? Where id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, this.getAccID());
+ ps.execute();
+ ps.close();
+ } catch (SQLException ex) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex, "SetVip");
+ System.err.println("[vip]无法连接资料库");
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ } catch (Exception ex2) {
+ FilePrinter.printError("MapleCharacter.txt", (Throwable) ex2, "SetVip");
+ System.err.println("[setvip]" + ex2);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex2);
+ }
+ }
+
+ public int getVip() {
+ return this.vip;
+ }
+
+ public final void setScriptEngine(final String name, final ScriptEngine e) {
+ this.engines.put(name, e);
+ }
+
+ public final ScriptEngine getScriptEngine(final String name) {
+ return (ScriptEngine) this.engines.get(name);
+ }
+
+ public final void removeScriptEngine(final String name) {
+ this.engines.remove(name);
+ }
+
+ public final ScheduledFuture> getIdleTask() {
+ return this.idleTask;
+ }
+
+ public final void setIdleTask(final ScheduledFuture> idleTask) {
+ this.idleTask = idleTask;
+ }
+
+ public int getCharacterSlots() {
+ if (this.charslots != 3) {
+ return this.charslots;
+ }
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT charslots FROM character_slots WHERE accid = ? AND worldid = ?")) {
+ ps.setInt(1, this.accountId);
+ ps.setInt(2, this.world);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ this.charslots = rs.getInt("charslots");
+ } else {
+ try (final PreparedStatement psu = con.prepareStatement("INSERT INTO character_slots (accid, worldid, charslots) VALUES (?, ?, ?)")) {
+ psu.setInt(1, this.accountId);
+ psu.setInt(2, this.world);
+ psu.setInt(3, this.charslots);
+ psu.executeUpdate();
+ }
+ }
+ }
+ } catch (SQLException sqlE) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) sqlE);
+ }
+ return this.charslots;
+ }
+
+ public boolean gainCharacterSlot() {
+ if (this.getCharacterSlots() >= 15) {
+ return false;
+ }
+ ++this.charslots;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE character_slots SET charslots = ? WHERE worldid = ? AND accid = ?")) {
+ ps.setInt(1, this.charslots);
+ ps.setInt(2, this.world + 120);
+ ps.setInt(3, this.accountId);
+ ps.executeUpdate();
+ } catch (SQLException sqlE) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) sqlE);
+ return false;
+ }
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("UPDATE character_slots SET charslots = ? WHERE worldid = ? AND accid = ?")) {
+ ps.setInt(1, this.charslots);
+ ps.setInt(2, this.world);
+ ps.setInt(3, this.accountId);
+ ps.executeUpdate();
+ } catch (SQLException sqlE) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) sqlE);
+ return false;
+ }
+ return true;
+ }
+
+ public static final byte unbanIPMacs(final String charname) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("SELECT accountid from characters where name = ?");
+ ps.setString(1, charname);
+ ResultSet rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final int accid = rs.getInt(1);
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT sessionIP, macs FROM accounts WHERE id = ?");
+ ps.setInt(1, accid);
+ rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final String sessionIP = rs.getString("sessionIP");
+ final String macs = rs.getString("macs");
+ rs.close();
+ ps.close();
+ byte ret = 0;
+ if (sessionIP != null) {
+ try (final PreparedStatement psa = con.prepareStatement("DELETE FROM ipbans WHERE ip = ?")) {
+ psa.setString(1, sessionIP);
+ psa.execute();
+ psa.close();
+ }
+ ++ret;
+ }
+ if (macs != null) {
+ final String[] split;
+ final String[] macz = split = macs.split(", ");
+ for (final String mac : split) {
+ if (!mac.equals("")) {
+ try (final PreparedStatement psa2 = con.prepareStatement("DELETE FROM macbans WHERE mac = ?")) {
+ psa2.setString(1, mac);
+ psa2.execute();
+ psa2.close();
+ }
+ }
+ }
+ ++ret;
+ }
+ con.close();
+ return ret;
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ System.err.println("Error while unbanning" + e);
+ return -2;
+ }
+ }
+
+ public static final byte unbanIP(final String charname) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("SELECT accountid from characters where name = ?");
+ ps.setString(1, charname);
+ ResultSet rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final int accid = rs.getInt(1);
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT sessionIP FROM accounts WHERE id = ?");
+ ps.setInt(1, accid);
+ rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final String sessionIP = rs.getString("sessionIP");
+ rs.close();
+ ps.close();
+ byte ret = 0;
+ if (sessionIP != null) {
+ try (final PreparedStatement psa = con.prepareStatement("DELETE FROM ipbans WHERE ip = ?")) {
+ psa.setString(1, sessionIP);
+ psa.execute();
+ psa.close();
+ }
+ ++ret;
+ }
+ return ret;
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ System.err.println("Error while unbanning" + e);
+ return -2;
+ }
+ }
+
+ public static final byte unHellban(final String charname) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("SELECT accountid from characters where name = ?");
+ ps.setString(1, charname);
+ ResultSet rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final int accid = rs.getInt(1);
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("SELECT sessionIP, email FROM accounts WHERE id = ?");
+ ps.setInt(1, accid);
+ rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final String sessionIP = rs.getString("sessionIP");
+ final String email = rs.getString("email");
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("UPDATE accounts SET banned = 0, banreason = '' WHERE email = ?" + ((sessionIP == null) ? "" : " OR sessionIP = ?"));
+ ps.setString(1, email);
+ if (sessionIP != null) {
+ ps.setString(2, sessionIP);
+ }
+ ps.execute();
+ ps.close();
+ con.close();
+ return 0;
+ } catch (SQLException e) {
+ System.err.println("Error while unbanning" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -2;
+ }
+ }
+
+ public static List getLoggedIdsFromDB(final int state) {
+ final List ret = (List) new ArrayList();
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT id from accounts where loggedin = ?");
+ ps.setInt(1, state);
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ ret.add(Integer.valueOf(rs.getInt("id")));
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return ret;
+ }
+
+ public boolean isMonitored() {
+ return this.monitored;
+ }
+
+ public void setMonitored(final boolean m) {
+ this.monitored = m;
+ }
+
+ public boolean isReceiving() {
+ return this.receiving;
+ }
+
+ public void setReceiving(final boolean m) {
+ this.receiving = m;
+ }
+
+ public void sendPacket(final byte[] packet) {
+ this.getSession().writeAndFlush(packet);
+ }
+
+ public static boolean banMacs(final String macData) {
+ if (macData.equalsIgnoreCase("00-00-00-00-00-00") || macData.length() != 17) {
+ return false;
+ }
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("INSERT INTO macbans (mac) VALUES (?)")) {
+ ps.setString(1, macData);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("Error banning MACs" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return false;
+ }
+ return true;
+ }
+
+ public final Set getMacs() {
+ return Collections.unmodifiableSet(this.macs);
+ }
+
+ public boolean isBannedMac(final String mac) {
+ if (mac.equalsIgnoreCase("00-00-00-00-00-00") || mac.length() != 17) {
+ return false;
+ }
+ boolean ret = false;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM macbans WHERE mac = ?")) {
+ ps.setString(1, mac);
+ try (final ResultSet rs = ps.executeQuery()) {
+ rs.next();
+ if (rs.getInt(1) > 0) {
+ ret = true;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("Error checking mac bans" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return ret;
+ }
+
+ public boolean hasBannedMac() {
+ if (this.macs.isEmpty()) {
+ return false;
+ }
+ boolean ret = false;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final StringBuilder sql = new StringBuilder("SELECT COUNT(*) FROM macbans WHERE mac IN (");
+ for (int i = 0; i < this.macs.size(); ++i) {
+ sql.append("?");
+ if (i != this.macs.size() - 1) {
+ sql.append(", ");
+ }
+ }
+ sql.append(")");
+ try (final PreparedStatement ps = con.prepareStatement(sql.toString())) {
+ int i = 0;
+ for (final String mac : this.macs) {
+ ++i;
+ ps.setString(i, mac);
+ }
+ try (final ResultSet rs = ps.executeQuery()) {
+ rs.next();
+ if (rs.getInt(1) > 0) {
+ ret = true;
+ }
+ }
+ ps.close();
+ }
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("Error checking mac bans" + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return ret;
+ }
+
+ private void loadMacsIfNescessary() throws SQLException {
+ if (this.macs.isEmpty()) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT macs FROM accounts WHERE id = ?")) {
+ ps.setInt(1, this.accountId);
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ throw new RuntimeException("No valid account associated with this client.");
+ }
+ if (rs.getString("macs") != null) {
+ final String[] split;
+ final String[] macData = split = rs.getString("macs").split(", ");
+ for (final String mac : split) {
+ if (!mac.equals("")) {
+ this.macs.add(mac);
+ }
+ }
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ }
+ }
+
+ public void banMacs() {
+ try {
+ this.loadMacsIfNescessary();
+ if (this.macs.size() > 0) {
+ final String[] macBans = new String[this.macs.size()];
+ int z = 0;
+ for (final String mac : this.macs) {
+ macBans[z] = mac;
+ ++z;
+ }
+ banMacs(macBans);
+ }
+ } catch (SQLException ex) {
+ }
+ }
+
+ public static void banMacs(final String[] macs) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final List filtered = (List) new LinkedList();
+ PreparedStatement ps = con.prepareStatement("SELECT filter FROM macfilters");
+ final ResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ filtered.add(rs.getString("filter"));
+ }
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("INSERT INTO macbans (mac) VALUES (?)");
+ for (final String mac : macs) {
+ boolean matched = false;
+ for (final String filter : filtered) {
+ if (mac.matches(filter)) {
+ matched = true;
+ break;
+ }
+ }
+ if (!matched) {
+ ps.setString(1, mac);
+ try {
+ ps.executeUpdate();
+ } catch (SQLException ex) {
+ }
+ }
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("Error banning MACs" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public List loadCharacterNamesByCharId(final int charId) {
+ final List chars = (List) new LinkedList();
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ try (final PreparedStatement ps = con.prepareStatement("SELECT id,name FROM characters WHERE accountid= (SELECT accountid FROM characters where id=?)")) {
+ ps.setInt(1, charId);
+ try (final ResultSet rs = ps.executeQuery()) {
+ while (rs.next()) {
+ chars.add(rs.getString("name"));
+ }
+ rs.close();
+ }
+ ps.close();
+ }
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("error loading characters internal" + e);
+ FileoutputUtil.outputFileError("logs/资料库异常.txt", (Throwable) e);
+ }
+ return chars;
+ }
+
+ public int loadLogGedin(final int accountID) {
+ int login = 0;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT loggedin FROM accounts WHERE id = ?");
+ ps.setInt(1, accountID);
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ login = rs.getShort("loggedin");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ return login;
+ }
+
+ public void setLoginKey(final String key) {
+ this.loginKey = key;
+ }
+
+ public int getLoginKeya() {
+ return this.loginKeya;
+ }
+
+ public void setLoginKeya(final int keya) {
+ this.loginKeya = keya;
+ }
+
+ public String getLoginKey() {
+ return this.loginKey;
+ }
+
+ public String loadLoginKey() {
+ String loginkey = null;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT loginkey FROM accounts WHERE id = ?");
+ ps.setInt(1, this.getAccID());
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ loginkey = rs.getString("loginkey");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ return loginkey;
+ }
+
+ public void setServerKey(final String key) {
+ this.serverKey = key;
+ }
+
+ public String getServerKey() {
+ return this.serverKey;
+ }
+
+ public String loadServerKey() {
+ String serverkey = null;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT serverkey FROM accounts WHERE id = ?");
+ ps.setInt(1, this.getAccID());
+ final ResultSet rs = ps.executeQuery();
+ if (rs.next()) {
+ serverkey = rs.getString("serverkey");
+ }
+ rs.close();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ return serverkey;
+ }
+
+ public final void updateLoginKey(final String loginkey) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts SET loginkey = ? WHERE id = ?");
+ ps.setString(1, loginkey);
+ ps.setInt(2, this.getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public final void updateServerKey(final String serverkey) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts SET serverkey = ? WHERE id = ?");
+ ps.setString(1, serverkey);
+ ps.setInt(2, this.getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public final void updateClientKey(final String clientkey) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts SET clientkey = ? WHERE id = ?");
+ ps.setString(1, clientkey);
+ ps.setInt(2, this.getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public static final byte setTGJF(final String charname, final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("SELECT accountid from characters where name = ?");
+ ps.setString(1, charname);
+ final ResultSet rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final int accid = rs.getInt(1);
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("UPDATE accounts SET TGJF = ? WHERE id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, accid);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("Error while unbanning" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -2;
+ }
+ return 0;
+ }
+
+ public static final int getTGJF(final int accid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT TGJF FROM accounts WHERE id = ?");
+ ps.setInt(1, accid);
+ int ret;
+ try (final ResultSet rs = ps.executeQuery()) {
+ ret = -1;
+ if (rs.next()) {
+ ret = rs.getInt("TGJF");
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret;
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -1;
+ }
+ }
+
+ public final void updateMacs(final String macs) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("UPDATE accounts SET macs = ? WHERE id = ?");
+ ps.setString(1, macs);
+ ps.setInt(2, this.getAccID());
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ }
+ }
+
+ public static final byte setTJJF(final String charname, final int x) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ PreparedStatement ps = con.prepareStatement("SELECT accountid from characters where name = ?");
+ ps.setString(1, charname);
+ final ResultSet rs = ps.executeQuery();
+ if (!rs.next()) {
+ rs.close();
+ ps.close();
+ return -1;
+ }
+ final int accid = rs.getInt(1);
+ rs.close();
+ ps.close();
+ ps = con.prepareStatement("UPDATE accounts SET TJJF = ? WHERE id = ?");
+ ps.setInt(1, x);
+ ps.setInt(2, accid);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException e) {
+ System.err.println("Error while unbanning" + e);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -2;
+ }
+ return 0;
+ }
+
+ public static final int getTJJF(final int accid) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("SELECT TJJF FROM accounts WHERE id = ?");
+ ps.setInt(1, accid);
+ int ret;
+ try (final ResultSet rs = ps.executeQuery()) {
+ ret = -1;
+ if (rs.next()) {
+ ret = rs.getInt("TJJF");
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret;
+ } catch (SQLException e) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) e);
+ return -1;
+ }
+ }
+
+ public boolean dangerousIp(final String lip) {
+ final String ip = lip.substring(1, lip.lastIndexOf(58));
+ boolean ret = false;
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection();
+ final PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM dangerousip WHERE ? LIKE CONCAT(ip, '%')")) {
+ ps.setString(1, ip);
+ try (final ResultSet rs = ps.executeQuery()) {
+ rs.next();
+ if (rs.getInt(1) > 0) {
+ ret = true;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ } catch (SQLException ex) {
+ System.err.println("Error dangerousIp " + ex);
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) ex);
+ }
+ return ret;
+ }
+
+ public void setDangerousIp(final String lip) {
+ final String ip = lip.substring(1, lip.lastIndexOf(58));
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("INSERT INTO dangerousip (ip) VALUES (?)");
+ ps.setString(1, ip);
+ ps.executeUpdate();
+ ps.close();
+ con.close();
+ } catch (SQLException Wx) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Wx);
+ }
+ }
+
+ public int getMacsCout(final byte loggedin, final String macs) {
+ try (final Connection con = (Connection) DBConPool.getInstance().getDataSource().getConnection()) {
+ final PreparedStatement ps = con.prepareStatement("select count(*) from accounts where loggedin > ? and macs = ?");
+ ps.setByte(1, loggedin);
+ ps.setString(2, macs);
+ int ret_count;
+ try (final ResultSet rs = ps.executeQuery()) {
+ if (rs.next()) {
+ ret_count = rs.getInt(1);
+ } else {
+ ret_count = -1;
+ }
+ rs.close();
+ }
+ ps.close();
+ con.close();
+ return ret_count;
+ } catch (SQLException Ex) {
+ FileoutputUtil.outError("logs/资料库异常.txt", (Throwable) Ex);
+ return -1;
+ }
+ }
+
+ public long getLastLoginTime() {
+ return this.lastLoginTime;
+ }
+
+ public void setLastLoginTime(final long lastLoginTime) {
+ this.lastLoginTime = lastLoginTime;
+ }
+
+ public final void unLockDisconnect() {
+ this.getSession().writeAndFlush(MaplePacketCreator.serverNotice(1, "当前账号在別处登入\r\n若不是你本人操作请及时更改密码。"));
+ this.disconnect(this.serverTransition, this.getChannel() == -10);
+ this.getSession().close();
+ this.closeseesion = true;
+ final MapleClient client = this;
+ final Thread closeSession = new Thread() {
+ @Override
+ public void run() {
+ try {
+ Thread.sleep(3000L);
+ } catch (InterruptedException ex) {
+ }
+ client.getSession().close();
+ }
+ };
+ try {
+ closeSession.start();
+ } catch (Exception ex) {
+ }
+ }
+
+ public boolean getCloseSession() {
+ return this.closeseesion;
+ }
+
+ public boolean isCanloginpw() {
+ return this.canloginpw;
+ }
+
+ public void setCanloginpw(final boolean x) {
+ this.canloginpw = x;
+ }
+
+ public List loadCharacterNamesByAccId(final int accId) {
+ final List Acc = (List