Guest User

Untitled

a guest
Jan 25th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.93 KB | None | 0 0
  1. package src.winterlove;
  2. import java.io.*;
  3. import java.util.Calendar;
  4. import java.util.GregorianCalendar;
  5.  
  6. public class PlayerHandler {
  7. public static final int maxPlayers = ServerCP.Maxplayers;
  8. public static Player players[] = new Player[maxPlayers];
  9. public int playerSlotSearchStart = 1;
  10. public static String kickNick = "";
  11. public static boolean kickAllPlayers = false;
  12. public static String messageToAll = "";
  13. public static int playerCount=0;
  14. public static String playersCurrentlyOn[] = new String[maxPlayers];
  15. public static boolean updateAnnounced;
  16. public static boolean updateRunning;
  17. public static int updateSeconds;
  18. public static long updateStartTime;
  19.  
  20. PlayerHandler() {
  21. for(int i = 0; i < maxPlayers; i++) {
  22. players[i] = null;
  23. }
  24. }
  25.  
  26. public void newPlayerClient(java.net.Socket s, String connectedFrom) {
  27. int slot = -1, i = 1;
  28. do {
  29. if(players[i] == null) {
  30. slot = i;
  31. break;
  32. }
  33. i++;
  34. if(i >= maxPlayers) i = 0;
  35. } while(i <= maxPlayers);
  36. client newClient = new client(s, slot);
  37. newClient.handler = this;
  38. (new Thread(newClient)).start();
  39. if(slot == -1) return; // no free slot found - world is full
  40. players[slot] = newClient;
  41. players[slot].connectedFrom = connectedFrom;
  42. updatePlayerNames();
  43. playerSlotSearchStart = slot + 1;
  44. if(playerSlotSearchStart > maxPlayers) playerSlotSearchStart = 1;
  45. }
  46.  
  47. public void destruct() {
  48. for(int i = 0; i < maxPlayers; i++) {
  49. if(players[i] == null) continue;
  50. players[i].destruct();
  51. players[i] = null;
  52. }
  53. }
  54.  
  55. public static int getPlayerCount() {
  56. return playerCount;
  57. }
  58.  
  59. public void updatePlayerNames(){
  60. playerCount=0;
  61. for(int i = 0; i < maxPlayers; i++) {
  62. if(players[i] != null) {
  63. playersCurrentlyOn[i] = players[i].playerName;
  64. playerCount++;
  65. }
  66. else {
  67. playersCurrentlyOn[i] = "";
  68. }
  69. }
  70. }
  71.  
  72. public static boolean isPlayerOn(String playerName) {
  73. for(int i = 0; i < maxPlayers; i++) {
  74. if(playersCurrentlyOn[i] != null){
  75. if(playersCurrentlyOn[i].equalsIgnoreCase(playerName)) return true;
  76. }
  77. }
  78. return false;
  79. }
  80.  
  81. public static int getPlayerID(String playerName)
  82. {
  83. for(int i = 0; i < maxPlayers; i++)
  84. {
  85. if(playersCurrentlyOn[i] != null)
  86. {
  87. if(playersCurrentlyOn[i].equalsIgnoreCase(playerName)) return i;
  88. }
  89. }
  90. return -1;
  91. }
  92.  
  93. public void process() {
  94. if (messageToAll.length() > 0) {
  95. int msgTo=1;
  96. do {
  97. if(players[msgTo] != null) {
  98. players[msgTo].globalMessage=messageToAll;
  99. }
  100. msgTo++;
  101. } while(msgTo < maxPlayers);
  102. messageToAll="";
  103. }
  104. if (kickAllPlayers == true) {
  105. int kickID = 1;
  106. do {
  107. if(players[kickID] != null) {
  108. players[kickID].isKicked = true;
  109. }
  110. kickID++;
  111. } while(kickID < maxPlayers);
  112. kickAllPlayers = false;
  113. }
  114.  
  115. for(int i = 0; i < maxPlayers; i++) {
  116. if(players[i] == null || !players[i].isActive) continue;
  117.  
  118. players[i].actionAmount--;
  119.  
  120. players[i].preProcessing();
  121. players[i].process();
  122. while(players[i].packetSending());
  123. players[i].postProcessing();
  124.  
  125. players[i].getNextPlayerMovement();
  126.  
  127. if(players[i].playerName.equalsIgnoreCase(kickNick))
  128. {
  129. players[i].kick();
  130. kickNick="";
  131. }
  132.  
  133. if(players[i].disconnected) {
  134. for(int i2 = 0; i2 < server.npcHandler.maxNPCs; i2++) {
  135. if(server.npcHandler.npcs[i2] != null && players[i] != null) {
  136. if(server.npcHandler.npcs[i2].followPlayer == players[i].playerId && server.npcHandler.npcs[i2] != null)
  137. server.npcHandler.npcs[i2].IsDead = true;
  138. }
  139. }
  140. if (players[i].savefile == true) {
  141. if(saveGame(players[i])){
  142. playerCount--;
  143. savechar(players[i]);
  144. System.out.println("Game saved for player "+players[i].playerName);
  145. } else {
  146. savechar(players[i]);
  147. System.out.println("Could not save for "+players[i].playerName);
  148. };
  149. } else {
  150. System.out.println("Did not save for "+players[i].playerName);
  151. }
  152. removePlayer(players[i]);
  153. players[i] = null;
  154. }
  155. }
  156.  
  157. for(int i = 0; i < maxPlayers; i++) {
  158. if(players[i] == null || !players[i].isActive) continue;
  159.  
  160. Calendar cal = new GregorianCalendar();
  161. int day = cal.get(Calendar.DAY_OF_MONTH);
  162. int month = cal.get(Calendar.MONTH);
  163. int year = cal.get(Calendar.YEAR);
  164. int calc = ((year * 10000) + (month * 100) + day);
  165. players[i].playerLastLogin = calc;
  166. if(players[i].disconnected) {
  167. for(int i3 = 0; i3 < server.npcHandler.maxNPCs; i3++) {
  168. if(server.npcHandler.npcs[i3] != null && players[i] != null) {
  169. if(server.npcHandler.npcs[i3].followPlayer == players[i].playerId)
  170. server.npcHandler.npcs[i3].IsDead = true;
  171. }
  172. }
  173. if (players[i].savefile == true) {
  174. if(saveGame(players[i])) {
  175. playerCount--;
  176. savechar(players[i]);
  177. System.out.println("Game saved for player "+players[i].playerName);
  178. } else {
  179. savechar(players[i]);
  180. System.out.println("Could not save for "+players[i].playerName);
  181. };
  182. } else {
  183. System.out.println("Did not save for "+players[i].playerName);
  184. }
  185. removePlayer(players[i]);
  186. players[i] = null;
  187. } else {
  188. if(!players[i].initialized) {
  189. players[i].initialize();
  190. players[i].initialized = true;
  191. } else {
  192. players[i].update();
  193. }
  194. }
  195. }
  196.  
  197. if (updateRunning && !updateAnnounced) {
  198. updateAnnounced = true;
  199. }
  200.  
  201. if (updateRunning && System.currentTimeMillis() - updateStartTime > (updateSeconds*1000)) {
  202. kickAllPlayers = true;
  203. server.ShutDown = true;
  204. }
  205.  
  206. for(int i = 0; i < maxPlayers; i++) {
  207. if(players[i] == null || !players[i].isActive) continue;
  208.  
  209. players[i].clearUpdateFlags();
  210. }
  211. }
  212.  
  213. public void updateNPC(Player plr, stream str) {
  214. updateBlock.currentOffset = 0;
  215.  
  216. str.createFrameVarSizeWord(65);
  217. str.initBitAccess();
  218.  
  219. str.writeBits(8, plr.npcListSize);
  220. int size = plr.npcListSize;
  221. plr.npcListSize = 0;
  222. for(int i = 0; i < size; i++) {
  223. if(plr.RebuildNPCList == false && plr.withinDistance(plr.npcList[i]) == true) {
  224. plr.npcList[i].updateNPCMovement(str);
  225. plr.npcList[i].appendNPCUpdateBlock(updateBlock);
  226. plr.npcList[plr.npcListSize++] = plr.npcList[i];
  227. } else {
  228. int id = plr.npcList[i].npcId;
  229. plr.npcInListBitmap[id>>3] &= ~(1 << (id&7));
  230. str.writeBits(1, 1);
  231. str.writeBits(2, 3);
  232. }
  233. }
  234.  
  235. for(int i = 0; i < NPCHandler.maxNPCs; i++) {
  236. if(server.npcHandler.npcs[i] != null) {
  237. int id = server.npcHandler.npcs[i].npcId;
  238. if (plr.RebuildNPCList == false && (plr.npcInListBitmap[id>>3]&(1 << (id&7))) != 0) {
  239. } else if (plr.withinDistance(server.npcHandler.npcs[i]) == false) {
  240. } else {
  241. plr.addNewNPC(server.npcHandler.npcs[i], str, updateBlock);
  242. }
  243. }
  244. }
  245.  
  246. plr.RebuildNPCList = false;
  247.  
  248. if(updateBlock.currentOffset > 0) {
  249. str.writeBits(14, 16383);
  250. str.finishBitAccess();
  251. str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0);
  252. } else {
  253. str.finishBitAccess();
  254. }
  255. str.endFrameVarSizeWord();
  256. }
  257.  
  258. private stream updateBlock = new stream(new byte[10000]);
  259. public void updatePlayer(Player plr, stream str) {
  260. updateBlock.currentOffset = 0;
  261.  
  262. if (updateRunning && !updateAnnounced) {
  263. str.createFrame(114);
  264. str.writeWordBigEndian(updateSeconds*50/30);
  265. }
  266.  
  267. plr.updateThisPlayerMovement(str);
  268. boolean saveChatTextUpdate = plr.chatTextUpdateRequired;
  269. plr.chatTextUpdateRequired = false;
  270. plr.appendPlayerUpdateBlock(updateBlock);
  271. plr.chatTextUpdateRequired = saveChatTextUpdate;
  272. str.writeBits(8, plr.playerListSize);
  273. int size = plr.playerListSize;
  274. plr.playerListSize = 0;
  275. for(int i = 0; i < size; i++) {
  276. if(plr.didTeleport == false && plr.withinDistance(plr.playerList[i]) == true) {
  277. plr.playerList[i].updatePlayerMovement(str);
  278. plr.playerList[i].appendPlayerUpdateBlock(updateBlock);
  279. plr.playerList[plr.playerListSize++] = plr.playerList[i];
  280. } else {
  281. int id = plr.playerList[i].playerId;
  282. plr.playerInListBitmap[id>>3] &= ~(1 << (id&7));
  283. str.writeBits(1, 1);
  284. str.writeBits(2, 3);
  285. }
  286. }
  287.  
  288. for(int i = 0; i < maxPlayers; i++) {
  289. if(players[i] == null || players[i].isActive == false || players[i] == plr) {
  290. } else {
  291. int id = players[i].playerId;
  292. if(plr.didTeleport == false && (plr.playerInListBitmap[id>>3]&(1 << (id&7))) != 0) {
  293. } else if(plr.withinDistance(players[i]) == false) {
  294. } else {
  295. plr.addNewPlayer(players[i], str, updateBlock);
  296. }
  297. }
  298. }
  299.  
  300. if(updateBlock.currentOffset > 0) {
  301. str.writeBits(11, 2047);
  302. str.finishBitAccess();
  303. str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0);
  304. } else {
  305. str.finishBitAccess();
  306. }
  307. str.endFrameVarSizeWord();
  308. }
  309.  
  310. public int lastchatid = 1;
  311. private void removePlayer(Player plr) {
  312. if(plr.Privatechat != 2) {
  313. for(int i = 1; i < maxPlayers; i++) {
  314. if (players[i] == null || players[i].isActive == false) continue;
  315. players[i].pmupdate(plr.playerId, 0);
  316. }
  317. }
  318. plr.destruct();
  319. }
  320.  
  321. public boolean savechar(Player plr) {
  322. BufferedWriter characterfile = null;
  323. try {
  324. characterfile = new BufferedWriter(new FileWriter("./characters/"+plr.playerName+".txt"));
  325. /*ACCOUNT*/
  326. characterfile.write("[ACCOUNT]", 0, 9);
  327. characterfile.newLine();
  328. characterfile.write("character-username = ", 0, 21);
  329. characterfile.write(plr.playerName, 0, plr.playerName.length());
  330. characterfile.newLine();
  331. characterfile.write("character-password = ", 0, 21);
  332. characterfile.write(plr.playerPass, 0, plr.playerPass.length());
  333. characterfile.newLine();
  334. characterfile.newLine();
  335. /*CHARACTER*/
  336. characterfile.write("[CHARACTER]", 0, 11);
  337. characterfile.newLine();
  338. characterfile.write("character-height = ", 0, 19);
  339. characterfile.write(Integer.toString(plr.heightLevel), 0, Integer.toString(plr.heightLevel).length());
  340. characterfile.newLine();
  341. characterfile.write("character-posx = ", 0, 17);
  342. characterfile.write(Integer.toString(plr.absX), 0, Integer.toString(plr.absX).length());
  343. characterfile.newLine();
  344. characterfile.write("character-posy = ", 0, 17);
  345. characterfile.write(Integer.toString(plr.absY), 0, Integer.toString(plr.absY).length());
  346. characterfile.newLine();
  347. characterfile.write("character-rights = ", 0, 19);
  348. characterfile.write(Integer.toString(plr.playerRights), 0, Integer.toString(plr.playerRights).length());
  349. characterfile.newLine();
  350. characterfile.write("character-ismember = ", 0, 21);
  351. characterfile.write(Integer.toString(plr.playerIsMember), 0, Integer.toString(plr.playerIsMember).length());
  352. characterfile.newLine();
  353. characterfile.write("character-messages = ", 0, 21);
  354. characterfile.write(Integer.toString(plr.playerMessages), 0, Integer.toString(plr.playerMessages).length());
  355. characterfile.newLine();
  356. characterfile.write("character-lastconnection = ", 0, 27);
  357. characterfile.write(plr.playerLastConnect, 0, plr.playerLastConnect.length());
  358. characterfile.newLine();
  359. characterfile.write("character-lastlogin = ", 0, 22);
  360. characterfile.write(Integer.toString(plr.playerLastLogin), 0, Integer.toString(plr.playerLastLogin).length());
  361. characterfile.newLine();
  362. characterfile.write("character-gametime = ", 0, 21);
  363. characterfile.write(Integer.toString(plr.playerGameTime), 0, Integer.toString(plr.playerGameTime).length());
  364. characterfile.newLine();
  365. characterfile.write("character-gamecount = ", 0, 22);
  366. characterfile.write(Integer.toString(plr.playerGameCount), 0, Integer.toString(plr.playerGameCount).length());
  367. characterfile.newLine();
  368. characterfile.newLine();
  369. /*EQUIPMENT*/
  370. characterfile.write("[EQUIPMENT]", 0, 11);
  371. characterfile.newLine();
  372. for (int i = 0; i < plr.playerEquipment.length; i++) {
  373. characterfile.write("character-equip = ", 0, 18);
  374. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  375. characterfile.write(" ", 0, 1);
  376. characterfile.write(Integer.toString(plr.playerEquipment[i]), 0, Integer.toString(plr.playerEquipment[i]).length());
  377. characterfile.write(" ", 0, 1);
  378. characterfile.write(Integer.toString(plr.playerEquipmentN[i]), 0, Integer.toString(plr.playerEquipmentN[i]).length());
  379. characterfile.write(" ", 0, 1);
  380. characterfile.newLine();
  381. }
  382. characterfile.newLine();
  383. /*LOOK*/
  384. characterfile.write("[LOOK]", 0, 6);
  385. characterfile.newLine();
  386. for (int i = 0; i < plr.playerLook.length; i++) {
  387. characterfile.write("character-look = ", 0, 17);
  388. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  389. characterfile.write(" ", 0, 1);
  390. characterfile.write(Integer.toString(plr.playerLook[i]), 0, Integer.toString(plr.playerLook[i]).length());
  391. characterfile.newLine();
  392. }
  393. characterfile.newLine();
  394. /*SKILLS*/
  395. characterfile.write("[SKILLS]", 0, 8);
  396. characterfile.newLine();
  397. for (int i = 0; i < plr.playerLevel.length; i++) {
  398. characterfile.write("character-skill = ", 0, 18);
  399. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  400. characterfile.write(" ", 0, 1);
  401. characterfile.write(Integer.toString(plr.playerLevel[i]), 0, Integer.toString(plr.playerLevel[i]).length());
  402. characterfile.write(" ", 0, 1);
  403. characterfile.write(Integer.toString(plr.playerXP[i]), 0, Integer.toString(plr.playerXP[i]).length());
  404. characterfile.newLine();
  405. }
  406. characterfile.newLine();
  407. /*ITEMS*/
  408. characterfile.write("[ITEMS]", 0, 7);
  409. characterfile.newLine();
  410. for (int i = 0; i < plr.playerItems.length; i++) {
  411. if (plr.playerItems[i] > 0) {
  412. characterfile.write("character-item = ", 0, 17);
  413. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  414. characterfile.write(" ", 0, 1);
  415. characterfile.write(Integer.toString(plr.playerItems[i]), 0, Integer.toString(plr.playerItems[i]).length());
  416. characterfile.write(" ", 0, 1);
  417. characterfile.write(Integer.toString(plr.playerItemsN[i]), 0, Integer.toString(plr.playerItemsN[i]).length());
  418. characterfile.newLine();
  419. }
  420. }
  421. characterfile.newLine();
  422. /*BANK*/
  423. characterfile.write("[BANK]", 0, 6);
  424. characterfile.newLine();
  425. for (int i = 0; i < plr.bankItems.length; i++) {
  426. if (plr.bankItems[i] > 0) {
  427. characterfile.write("character-bank = ", 0, 17);
  428. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  429. characterfile.write(" ", 0, 1);
  430. characterfile.write(Integer.toString(plr.bankItems[i]), 0, Integer.toString(plr.bankItems[i]).length());
  431. characterfile.write(" ", 0, 1);
  432. characterfile.write(Integer.toString(plr.bankItemsN[i]), 0, Integer.toString(plr.bankItemsN[i]).length());
  433. characterfile.newLine();
  434. }
  435. }
  436. characterfile.newLine();
  437. /*FRIENDS*/
  438. characterfile.write("[FRIENDS]", 0, 9);
  439. characterfile.newLine();
  440. for (int i = 0; i < plr.friends.length; i++) {
  441. if (plr.friends[i] > 0) {
  442. characterfile.write("character-friend = ", 0, 19);
  443. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  444. characterfile.write(" ", 0, 1);
  445. characterfile.write(Long.toString(plr.friends[i]), 0, Long.toString(plr.friends[i]).length());
  446. characterfile.newLine();
  447. }
  448. }
  449. characterfile.newLine();
  450. /*IGNORES*/
  451. characterfile.write("[IGNORES]", 0, 9);
  452. characterfile.newLine();
  453. for (int i = 0; i < plr.ignores.length; i++) {
  454. if (plr.ignores[i] > 0) {
  455. characterfile.write("character-ignore = ", 0, 19);
  456. characterfile.write(Integer.toString(i), 0, Integer.toString(i).length());
  457. characterfile.write(" ", 0, 1);
  458. characterfile.write(Long.toString(plr.ignores[i]), 0, Long.toString(plr.ignores[i]).length());
  459. characterfile.newLine();
  460. }
  461. }
  462. characterfile.newLine();
  463. /*EOF*/
  464. characterfile.write("[EOF]", 0, 5);
  465. characterfile.newLine();
  466. characterfile.newLine();
  467. characterfile.close();
  468. } catch(IOException ioexception) {
  469. misc.println(plr.playerName+": error writing file.");
  470. return false;
  471. }
  472. return true;
  473. }
  474. public boolean saveGame(Player plr)
  475. {
  476. PlayerSave tempSave = new PlayerSave(plr);
  477. try
  478. {
  479. ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("./savedGames/"+tempSave.playerName+".dat"));
  480. out.writeObject((PlayerSave)tempSave);
  481. out.close();
  482. }
  483. catch(Exception e){
  484. return false;
  485. }
  486. return true;
  487. }
  488.  
  489. public void println_debug(String str, int ID, String Name) {
  490. System.out.println("[client-"+ID+"-"+Name+"]: "+str);
  491. }
  492. }
Add Comment
Please, Sign In to add comment