Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2014
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.45 KB | None | 0 0
  1. /*
  2. This file is part of the OdinMS Maple Story Server
  3. Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
  4. Matthias Butz <matze@odinms.de>
  5. Jan Christian Meyer <vimes@odinms.de>
  6.  
  7. This program is free software: you can redistribute it and/or modify
  8. it under the terms of the GNU Affero General Public License as
  9. published by the Free Software Foundation version 3 as published by
  10. the Free Software Foundation. You may not use, modify or distribute
  11. this program under any other version of the GNU Affero General Public
  12. License.
  13.  
  14. This program is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. GNU Affero General Public License for more details.
  18.  
  19. You should have received a copy of the GNU Affero General Public License
  20. along with this program. If not, see <http://www.gnu.org/licenses/>.
  21. */
  22. package net.channel.handler;
  23.  
  24. import java.rmi.RemoteException;
  25. import java.sql.Connection;
  26. import java.sql.PreparedStatement;
  27. import java.sql.ResultSet;
  28. import client.BuddylistEntry;
  29. import client.CharacterNameAndId;
  30. import client.ISkill;
  31. import client.MapleCharacter;
  32. import client.MapleClient;
  33. import client.MapleOccupations;
  34. import client.MapleQuestStatus;
  35. import client.SkillFactory;
  36. import constants.skills.SuperGM;
  37. import java.sql.SQLException;
  38. import java.util.List;
  39. import tools.DatabaseConnection;
  40. import net.AbstractMaplePacketHandler;
  41. import net.channel.ChannelServer;
  42. import net.world.CharacterIdChannelPair;
  43. import net.world.MaplePartyCharacter;
  44. import net.world.PartyOperation;
  45. import net.world.PlayerBuffValueHolder;
  46. import net.world.guild.MapleAlliance;
  47. import net.world.guild.MapleGuild;
  48. import net.world.remote.WorldChannelInterface;
  49. import scripting.npc.NPCScriptManager;
  50. import server.TimerManager;
  51. import tools.MaplePacketCreator;
  52. import tools.data.input.SeekableLittleEndianAccessor;
  53.  
  54. public final class PlayerLoggedinHandler extends AbstractMaplePacketHandler {
  55.  
  56. @Override
  57. public final boolean validateState(MapleClient c) {
  58. return !c.isLoggedIn();
  59. }
  60.  
  61. public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
  62. int cid = slea.readInt();
  63. MapleCharacter player = null;
  64. try {
  65. player = MapleCharacter.loadCharFromDB(cid, c, true);
  66. /* boolean passed = false;
  67. List<MapleCharacter> charlist = c.loadCharacters(c.getWorld());
  68. for(MapleCharacter ch : charlist)
  69. {
  70. if(ch.getId() == cid)
  71. {
  72. passed = true;
  73. break;
  74. }
  75. }
  76. if (!passed) {
  77. c.disconnect();
  78. return;
  79. }*/
  80. c.setPlayer(player);
  81. } catch (SQLException e) {
  82. }
  83. c.setAccID(player.getAccountID());
  84. int state = c.getLoginState();
  85. boolean allowLogin = true;
  86. ChannelServer cserv = c.getChannelServer();
  87. synchronized (this) {
  88. try {
  89. WorldChannelInterface worldInterface = cserv.getWorldInterface();
  90. if (state == MapleClient.LOGIN_SERVER_TRANSITION) {
  91. for (String charName : c.loadCharacterNames(c.getWorld())) {
  92. if (worldInterface.isConnected(charName)) {
  93. int chanNum = c.getChannelServer().getWorldInterface().getLocation(charName).channel;
  94. System.err.print(charName + " on channel " + chanNum + " has been unstuck, for bug-testing purposes.");
  95. MapleCharacter player_to_dc = ChannelServer.getInstance(chanNum).getPlayerStorage().getCharacterByName(charName);
  96. if (player_to_dc.getEventInstance() != null) {
  97. player_to_dc.getEventInstance().removePlayer(player_to_dc);
  98. }
  99. player_to_dc.getMap().removePlayer(player_to_dc);
  100. ChannelServer.getInstance(chanNum).removePlayer(player_to_dc);
  101. player_to_dc.getClient().disconnect();
  102. player_to_dc.getClient().getSession().close();
  103. c.disconnect();
  104. allowLogin = false;
  105. break;
  106. }
  107. }
  108. }
  109. } catch (RemoteException e) {
  110. cserv.reconnectWorld();
  111. allowLogin = false;
  112. } catch (Exception e) {
  113. System.out.println("Error unsticking char:");
  114. e.printStackTrace();
  115. }
  116. if (state != MapleClient.LOGIN_SERVER_TRANSITION || !allowLogin) {
  117. c.setPlayer(null);
  118. c.getSession().close(true);
  119. return;
  120. }
  121. c.updateLoginState(MapleClient.LOGIN_LOGGEDIN);
  122. }
  123. cserv.addPlayer(player);
  124. try {
  125. List<PlayerBuffValueHolder> buffs = cserv.getWorldInterface().getBuffsFromStorage(cid);
  126. if (buffs != null) {
  127. c.getPlayer().silentGiveBuffs(buffs);
  128. }
  129. } catch (RemoteException e) {
  130. cserv.reconnectWorld();
  131. }
  132. Connection con = DatabaseConnection.getConnection();
  133. try {
  134. PreparedStatement ps = con.prepareStatement("SELECT SkillID,StartTime,length FROM cooldowns WHERE charid = ?");
  135. ps.setInt(1, c.getPlayer().getId());
  136. ResultSet rs = ps.executeQuery();
  137. while (rs.next()) {
  138. final long length = rs.getLong("length"), startTime = rs.getLong("StartTime");
  139. if (length + startTime > System.currentTimeMillis()) {
  140. c.getPlayer().giveCoolDowns(rs.getInt("SkillID"), startTime, length);
  141. }
  142. }
  143. rs.close();
  144. ps.close();
  145. ps = con.prepareStatement("DELETE FROM cooldowns WHERE charid = ?");
  146. ps.setInt(1, c.getPlayer().getId());
  147. ps.executeUpdate();
  148. ps.close();
  149. ps = con.prepareStatement("SELECT Mesos FROM dueypackages WHERE RecieverId = ? and Checked = 1");
  150. ps.setInt(1, c.getPlayer().getId());
  151. rs = ps.executeQuery();
  152. if (rs.next()) {
  153. try {
  154. PreparedStatement pss = DatabaseConnection.getConnection().prepareStatement("UPDATE dueypackages SET Checked = 0 where RecieverId = ?");
  155. pss.setInt(1, c.getPlayer().getId());
  156. pss.executeUpdate();
  157. pss.close();
  158. } catch (SQLException e) {
  159. }
  160. c.getSession().write(MaplePacketCreator.sendDueyMSG((byte) 0x1B));
  161. }
  162. rs.close();
  163. ps.close();
  164. rs = null;
  165. ps = null;
  166. } catch (SQLException e) {
  167. e.printStackTrace();
  168. }
  169. c.getSession().write(MaplePacketCreator.getCharInfo(player));
  170. c.getPlayer().InitiateSaveEvent();
  171. if (player.isSGM() && c.getPlayer().gmLevel() > 2) { // CHANGE LOGIN HIDE LEVEL HERE
  172. SkillFactory.getSkill(SuperGM.HIDE).getEffect(1).applyTo(player);
  173. }
  174. player.sendKeymap();
  175. c.getPlayer().sendMacros();
  176. player.getMap().addPlayer(player);
  177. try {
  178. int buddyIds[] = player.getBuddylist().getBuddyIds();
  179. cserv.getWorldInterface().loggedOn(player.getName(), player.getId(), c.getChannel(), buddyIds);
  180. for (CharacterIdChannelPair onlineBuddy : cserv.getWorldInterface().multiBuddyFind(player.getId(), buddyIds)) {
  181. BuddylistEntry ble = player.getBuddylist().get(onlineBuddy.getCharacterId());
  182. ble.setChannel(onlineBuddy.getChannel());
  183. player.getBuddylist().put(ble);
  184. }
  185. c.getSession().write(MaplePacketCreator.updateBuddylist(player.getBuddylist().getBuddies()));
  186. } catch (RemoteException e) {
  187. cserv.reconnectWorld();
  188. }
  189. c.getSession().write(MaplePacketCreator.loadFamily(player));
  190. if (player.getFamilyId() > 0) {
  191. c.getSession().write(MaplePacketCreator.getFamilyInfo(player));
  192. }
  193. if (player.getGuildId() > 0) {
  194. try {
  195. MapleGuild playerGuild = cserv.getWorldInterface().getGuild(player.getGuildId(), player.getMGC());
  196. if (playerGuild == null) {
  197. player.deleteGuild(player.getGuildId());
  198. player.resetMGC();
  199. player.setGuildId(0);
  200. } else {
  201. cserv.getWorldInterface().setGuildMemberOnline(player.getMGC(), true, c.getChannel());
  202. c.getSession().write(MaplePacketCreator.showGuildInfo(player));
  203. int allianceId = player.getGuild().getAllianceId();
  204. if (allianceId > 0) {
  205. MapleAlliance newAlliance = cserv.getWorldInterface().getAlliance(allianceId);
  206. if (newAlliance == null) {
  207. newAlliance = MapleAlliance.loadAlliance(allianceId);
  208. if (newAlliance != null) {
  209. cserv.getWorldInterface().addAlliance(allianceId, newAlliance);
  210. } else {
  211. player.getGuild().setAllianceId(0);
  212. }
  213. }
  214. if (newAlliance != null) {
  215. c.getSession().write(MaplePacketCreator.getAllianceInfo(newAlliance));
  216. c.getSession().write(MaplePacketCreator.getGuildAlliances(newAlliance, c));
  217. cserv.getWorldInterface().allianceMessage(allianceId, MaplePacketCreator.allianceMemberOnline(player, true), player.getId(), -1);
  218. }
  219. }
  220. }
  221. } catch (RemoteException e) {
  222. cserv.reconnectWorld();
  223. }
  224. }
  225. try {
  226. // c.getPlayer().showNote();
  227. if (player.getParty() != null) {
  228. cserv.getWorldInterface().updateParty(player.getParty().getId(), PartyOperation.LOG_ONOFF, new MaplePartyCharacter(player));
  229. }
  230. player.updatePartyMemberHP();
  231. } catch (RemoteException e) {
  232. cserv.reconnectWorld();
  233. }
  234. for (MapleQuestStatus status : player.getStartedQuests()) {
  235. if (status.hasMobKills()) {
  236. c.getSession().write(MaplePacketCreator.updateQuestMobKills(status));
  237. }
  238. }
  239. CharacterNameAndId pendingBuddyRequest = player.getBuddylist().pollPendingRequest();
  240. if (pendingBuddyRequest != null) {
  241. player.getBuddylist().put(new BuddylistEntry(pendingBuddyRequest.getName(), "Default Group", pendingBuddyRequest.getId(), -1, false));
  242. c.getSession().write(MaplePacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName()));
  243. }
  244. c.getSession().write(MaplePacketCreator.updateBuddylist(player.getBuddylist().getBuddies()));
  245. c.getSession().write(MaplePacketCreator.updateGender(player));
  246. player.checkMessenger();
  247. c.getSession().write(MaplePacketCreator.enableReport());
  248. /* if (!player.isGM() && !player.hasWatchedCygnusIntro() && player.getLevel() > 19 && !player.isCygnus() && player.getCygnusLinkId() == 0) {
  249. player.startCygnusIntro();
  250. player.setWatchedCygnusIntro(true);
  251. }*/ //unneeded in 83+ as cygnus is created at char select
  252.  
  253. ISkill bof = SkillFactory.getSkill(10000000 * player.getJobType() + 12);
  254. player.changeSkillLevel(bof, player.getLinkedLevel() / 10, bof.getMaxLevel());
  255. player.checkBerserk();
  256. player.expirationTask();
  257. player.setRates(false);
  258. player.getClient().getSession().write(MaplePacketCreator.setNPCScriptable(2082006, "Crying Girl"));
  259. player.getClient().getSession().write(MaplePacketCreator.setNPCScriptable(9250052, "News Stand"));
  260. player.getClient().getSession().write(MaplePacketCreator.setNPCScriptable(2082005, "Brainy Boy"));
  261.  
  262. long lastVoteTime = 0L;
  263. try {
  264. PreparedStatement timePS = DatabaseConnection.getConnection().prepareStatement("SELECT account, date FROM mbit_votingrecords WHERE account = ?");
  265. timePS.setString(1, player.getClient().getAccountName());
  266. ResultSet timeRS = timePS.executeQuery();
  267. if (timeRS.next()) {
  268. lastVoteTime = timeRS.getLong("date");
  269. timePS.close();
  270. timeRS.close();
  271. }
  272. } catch (SQLException e) {
  273. e.printStackTrace();
  274. }
  275. long unixTime = System.currentTimeMillis() / 1000L;
  276. long diff = unixTime - lastVoteTime;
  277. if (diff > 43200L) { // 6 hours
  278. c.getSession().write(MaplePacketCreator.sendHint("Welcome to #rAzaleaMS!#k\r\n#bYou can #rvote#k again!#k", 150, 5));
  279. player.dropMessage("You haven't voted yet! Please don't forget to vote.");
  280. } else {
  281. c.getSession().write(MaplePacketCreator.sendHint("#bYou can vote again in#k #r" + TimerManager.buildTimeString(((43200L - diff) * 1000), false) + "#k.", 200, 5));
  282. }
  283. c.getSession().write(MaplePacketCreator.enableActions());
  284. player.dropMessage("Welcome to AzaleaMS! Type @help for a list of commands.");
  285. player.dropMessage("Type @staff for a list of the staff team, and use @callgm if you need help!.");
  286.  
  287. if (player.getAutorb(player.getName()) == false && player.autoreborn == true || player.getAutorb(player.getName()) == false && player.getReborns() > 100 && player.autoreborn == true ){
  288. player.autoreborn = false;
  289. } else if (player.getAutorb(player.getName()) == false && player.autorebornC == true || player.getAutorb(player.getName()) == false && player.getReborns() > 100 && player.autorebornC == true ){
  290. player.autorebornC = false;
  291. } else if (player.getAutorb(player.getName()) == false && player.autorebornA == true || player.getAutorb(player.getName()) == false && player.getReborns() > 100 && player.autorebornA == true ){
  292. player.autorebornA = false;
  293. }
  294.  
  295. }
  296. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement