Advertisement
Guest User

Untitled

a guest
Jul 19th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.77 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.Calendar;
  3. import java.util.GregorianCalendar;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import java.util.Queue;
  7. import java.util.concurrent.ConcurrentLinkedQueue;
  8.  
  9.  
  10.  
  11.  
  12. public class PlayerHandler {
  13.  
  14. public static final int maxPlayers = 5;
  15. static Player players[] = new Player[maxPlayers];
  16.  
  17. public void destruct() {
  18. for (int i = 0; i < maxPlayers; i++) {
  19. if (players[i] == null) {
  20. continue;
  21. }
  22. players[i].destruct();
  23. players[i] = null;
  24. }
  25. }
  26.  
  27. public static int getPlayerCount() {
  28. return playerCount;
  29. }
  30.  
  31. public void updatePlayerNames() {
  32. playerCount = 0;
  33. for (int i = 0; i < maxPlayers; i++) {
  34. if (players[i] != null) {
  35. playersCurrentlyOn[i] = players[i].playerName;
  36. playerCount++;
  37. } else {
  38. playersCurrentlyOn[i] = "";
  39. }
  40. }
  41. }
  42.  
  43. public static boolean isPlayerOn(String playerName) {
  44. for (int i = 0; i < maxPlayers; i++) {
  45. if (playersCurrentlyOn[i] != null) {
  46. if (playersCurrentlyOn[i].equalsIgnoreCase(playerName)) {
  47. return true;
  48. }
  49. }
  50. }
  51. return false;
  52. }
  53.  
  54. public static int getPlayerID(String playerName) {
  55. for (int i = 0; i < maxPlayers; i++) {
  56. if (playersCurrentlyOn[i] != null) {
  57. if (playersCurrentlyOn[i].equalsIgnoreCase(playerName)) {
  58. return i;
  59. }
  60. }
  61. }
  62. return -1;
  63. }
  64.  
  65. public void process() {
  66. if (messageToAll.length() > 0) {
  67. int msgTo = 1;
  68.  
  69. do {
  70. if (players[msgTo] != null) {
  71. players[msgTo].globalMessage = messageToAll;
  72. }
  73. msgTo++;
  74. } while (msgTo < maxPlayers);
  75. messageToAll = "";
  76. }
  77. if(pcWaitTimer > 0){
  78. pcWaitTimer -= 1;
  79. }
  80. if(pcWaitTimer == 0){
  81. pcWaitTimer = 300;
  82. }
  83. if (kickAllPlayers == true) {
  84. int kickID = 1;
  85.  
  86. do {
  87. if (players[kickID] != null) {
  88. players[kickID].isKicked = true;
  89. }
  90. kickID++;
  91. } while (kickID < maxPlayers);
  92. kickAllPlayers = false;
  93. }
  94.  
  95. // at first, parse all the incoming data
  96. // this has to be seperated from the outgoing part because we have to keep all the player data
  97. // static, so each client gets exactly the same and not the one clients are ahead in time
  98. // than the other ones.
  99. for (int i = 0; i < maxPlayers; i++) {
  100. if (players[i] == null || !players[i].isActive) {
  101. continue;
  102. }
  103.  
  104. players[i].actionAmount--;
  105.  
  106. players[i].preProcessing();
  107. players[i].process();
  108. while (players[i].packetSending()) {
  109. ;
  110. }
  111. players[i].postProcessing();
  112.  
  113. players[i].getNextPlayerMovement();
  114.  
  115. if (players[i].playerName.equalsIgnoreCase(kickNick)) {
  116. players[i].kick();
  117. kickNick = "";
  118. }
  119.  
  120. if (players[i].disconnected) {
  121. for (int i2 = 0; i2 < server.npcHandler.maxNPCs; i2++) {
  122. if (server.npcHandler.npcs[i2] != null && players[i] != null) {
  123. if (server.npcHandler.npcs[i2].followPlayer
  124. == players[i].playerId
  125. && server.npcHandler.npcs[i2] != null) {
  126. server.npcHandler.npcs[i2].IsDead = true;
  127. }
  128. }
  129. }
  130. if (players[i].savefile == true) {
  131. if (saveGame(players[i])) {
  132. playerCount--;
  133. savechar(players[i]);
  134. System.out.println(
  135. "Game saved for player " + players[i].playerName);
  136. } else {
  137. System.out.println(
  138. "Could not save for " + players[i].playerName);
  139. }
  140. ;
  141. } else {
  142. System.out.println(
  143. "Did not save for " + players[i].playerName);
  144. }
  145. removePlayer(players[i]);
  146. players[i] = null;
  147. }
  148. }
  149.  
  150. // loop through all players and do the updating stuff
  151. for (int i = 0; i < maxPlayers; i++) {
  152. if (players[i] == null || !players[i].isActive) {
  153. continue;
  154. }
  155.  
  156. Calendar cal = new GregorianCalendar();
  157. int day = cal.get(Calendar.DAY_OF_MONTH);
  158. int month = cal.get(Calendar.MONTH);
  159. int year = cal.get(Calendar.YEAR);
  160. int calc = ((year * 10000) + (month * 100) + day);
  161.  
  162. players[i].playerLastLogin = calc;
  163. if (players[i].disconnected) {
  164. for (int i3 = 0; i3 < server.npcHandler.maxNPCs; i3++) {
  165. if (server.npcHandler.npcs[i3] != null && players[i] != null) {
  166. if (server.npcHandler.npcs[i3].followPlayer
  167. == players[i].playerId) {
  168. server.npcHandler.npcs[i3].IsDead = true;
  169. }
  170. }
  171. }
  172. if (players[i].savefile == true) {
  173. if (saveGame(players[i])) {
  174. playerCount--;
  175. savechar(players[i]);
  176. System.out.println(
  177. "Game saved for player " + players[i].playerName);
  178. } else {
  179. System.out.println(
  180. "Could not save for " + players[i].playerName);
  181. }
  182. ;
  183. } else {
  184. System.out.println(
  185. "Did not save for " + players[i].playerName);
  186. }
  187. removePlayer(players[i]);
  188. players[i] = null;
  189. } else {
  190. if (!players[i].initialized) {
  191. players[i].initialize();
  192. players[i].initialized = true;
  193. } else {
  194. players[i].update();
  195. }
  196. }
  197. }
  198.  
  199. if (updateRunning && !updateAnnounced) {
  200. updateAnnounced = true;
  201. }
  202.  
  203. if (updateRunning
  204. && System.currentTimeMillis() - updateStartTime
  205. > (updateSeconds * 1000)) {
  206. kickAllPlayers = true;
  207. server.ShutDown = true;
  208. }
  209.  
  210. // post processing
  211. for (int i = 0; i < maxPlayers; i++) {
  212. if (players[i] == null || !players[i].isActive) {
  213. continue;
  214. }
  215.  
  216. players[i].clearUpdateFlags();
  217. }
  218. }
  219.  
  220. public void updateNPC(Player plr, stream str) {
  221. updateBlock.currentOffset = 0;
  222.  
  223. str.createFrameVarSizeWord(65);
  224. str.initBitAccess();
  225.  
  226. str.writeBits(8, plr.npcListSize);
  227. int size = plr.npcListSize;
  228.  
  229. plr.npcListSize = 0;
  230. for (int i = 0; i < size; i++) {
  231. if (plr.RebuildNPCList == false
  232. && plr.withinDistance(plr.npcList[i]) == true) {
  233. plr.npcList[i].updateNPCMovement(str);
  234. plr.npcList[i].appendNPCUpdateBlock(updateBlock);
  235. plr.npcList[plr.npcListSize++] = plr.npcList[i];
  236. } else {
  237. int id = plr.npcList[i].npcId;
  238.  
  239. plr.npcInListBitmap[id >> 3] &= ~(1 << (id & 7)); // clear the flag
  240. str.writeBits(1, 1);
  241. str.writeBits(2, 3); // tells client to remove this npc from list
  242. }
  243. }
  244.  
  245. // iterate through all npcs to check whether there's new npcs to add
  246. for (int i = 0; i < NPCHandler.maxNPCs; i++) {
  247. if (server.npcHandler.npcs[i] != null) {
  248. int id = server.npcHandler.npcs[i].npcId;
  249.  
  250. if (plr.RebuildNPCList == false
  251. && (plr.npcInListBitmap[id >> 3] & (1 << (id & 7))) != 0) {// npc already in npcList
  252. } else if (plr.withinDistance(server.npcHandler.npcs[i])
  253. == false) {// out of sight
  254. } else {
  255. plr.addNewNPC(server.npcHandler.npcs[i], str, updateBlock);
  256. }
  257. }
  258. }
  259.  
  260. plr.RebuildNPCList = false;
  261.  
  262. if (updateBlock.currentOffset > 0) {
  263. str.writeBits(14, 16383); // magic EOF - needed only when npc updateblock follows
  264. str.finishBitAccess();
  265.  
  266. // append update block
  267. str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0);
  268. } else {
  269. str.finishBitAccess();
  270. }
  271. str.endFrameVarSizeWord();
  272. }
  273.  
  274. private stream updateBlock = new stream(new byte[10000]);
  275. // should actually be moved to client.java because it's very client specific
  276. public void updatePlayer(Player plr, stream str) {
  277. updateBlock.currentOffset = 0;
  278.  
  279. if (updateRunning && !updateAnnounced) {
  280. str.createFrame(114);
  281. str.writeWordBigEndian(updateSeconds * 50 / 30);
  282. }
  283.  
  284. // update thisPlayer
  285. plr.updateThisPlayerMovement(str); // handles walking/running and teleporting
  286. // do NOT send chat text back to thisPlayer!
  287. boolean saveChatTextUpdate = plr.chatTextUpdateRequired;
  288.  
  289. plr.chatTextUpdateRequired = false;
  290. plr.appendPlayerUpdateBlock(updateBlock);
  291. plr.chatTextUpdateRequired = saveChatTextUpdate;
  292.  
  293. str.writeBits(8, plr.playerListSize);
  294. int size = plr.playerListSize;
  295.  
  296. // update/remove players that are already in the playerList
  297. plr.playerListSize = 0; // we're going to rebuild the list right away
  298. for (int i = 0; i < size; i++) {
  299. // this update packet does not support teleporting of other players directly
  300. // instead we're going to remove this player here and readd it right away below
  301. if (plr.didTeleport == false
  302. && plr.withinDistance(plr.playerList[i]) == true) {
  303. plr.playerList[i].updatePlayerMovement(str);
  304. plr.playerList[i].appendPlayerUpdateBlock(updateBlock);
  305. plr.playerList[plr.playerListSize++] = plr.playerList[i];
  306. } else {
  307. int id = plr.playerList[i].playerId;
  308.  
  309. plr.playerInListBitmap[id >> 3] &= ~(1 << (id & 7)); // clear the flag
  310. str.writeBits(1, 1);
  311. str.writeBits(2, 3); // tells client to remove this char from list
  312. }
  313. }
  314.  
  315. // iterate through all players to check whether there's new players to add
  316. for (int i = 0; i < maxPlayers; i++) {
  317. if (players[i] == null || players[i].isActive == false
  318. || players[i] == plr) {// not existing, not active or you are that player
  319. } else {
  320. int id = players[i].playerId;
  321.  
  322. if (plr.didTeleport == false
  323. && (plr.playerInListBitmap[id >> 3] & (1 << (id & 7)))
  324. != 0) {// player already in playerList
  325. } else if (plr.withinDistance(players[i]) == false) {// out of sight
  326. } else {
  327. plr.addNewPlayer(players[i], str, updateBlock);
  328. }
  329. }
  330. }
  331.  
  332. if (updateBlock.currentOffset > 0) {
  333. str.writeBits(11, 2047); // magic EOF - needed only when player updateblock follows
  334. str.finishBitAccess();
  335.  
  336. // append update block
  337. str.writeBytes(updateBlock.buffer, updateBlock.currentOffset, 0);
  338. } else {
  339. str.finishBitAccess();
  340. }
  341. str.endFrameVarSizeWord();
  342. }
  343.  
  344. public int lastchatid = 1; // PM System
  345.  
  346. private void removePlayer(Player plr) {
  347. if (plr.Privatechat != 2) { // PM System
  348. for (int i = 1; i < maxPlayers; i++) {
  349. if (players[i] == null || players[i].isActive == false) {
  350. continue;
  351. }
  352. players[i].pmupdate(plr.playerId, 0);
  353. }
  354. }
  355. // anything can be done here like unlinking this player structure from any of the other existing structures
  356. plr.destruct();
  357. }
  358.  
  359. public boolean savechar(Player plr) {
  360. BufferedWriter characterfile = null;
  361.  
  362. try {
  363. characterfile = new BufferedWriter(
  364. new FileWriter("./characters/" + plr.playerName + ".txt"));
  365.  
  366. /* ACCOUNT*/
  367. characterfile.write("[ACCOUNT]", 0, 9);
  368. characterfile.newLine();
  369. characterfile.write("character-username = ", 0, 21);
  370. characterfile.write(plr.playerName, 0, plr.playerName.length());
  371. characterfile.newLine();
  372. characterfile.write("character-password = ", 0, 21);
  373. characterfile.write(plr.playerPass, 0, plr.playerPass.length());
  374. characterfile.newLine();
  375. characterfile.newLine();
  376.  
  377. /* CHARACTER*/
  378. characterfile.write("[CHARACTER]", 0, 11);
  379. characterfile.newLine();
  380. characterfile.write("character-height = ", 0, 19);
  381. characterfile.write(Integer.toString(plr.heightLevel), 0,
  382. Integer.toString(plr.heightLevel).length());
  383. characterfile.newLine();
  384. characterfile.write("character-posx = ", 0, 17);
  385. characterfile.write(Integer.toString(plr.absX), 0,
  386. Integer.toString(plr.absX).length());
  387. characterfile.newLine();
  388. characterfile.write("character-posy = ", 0, 17);
  389. characterfile.write(Integer.toString(plr.absY), 0,
  390. Integer.toString(plr.absY).length());
  391. characterfile.newLine();
  392. characterfile.write("character-rights = ", 0, 19);
  393. characterfile.write(Integer.toString(plr.playerRights), 0,
  394. Integer.toString(plr.playerRights).length());
  395. characterfile.newLine();
  396. characterfile.write("character-ismember = ", 0, 21);
  397. characterfile.write(Integer.toString(plr.playerIsMember), 0,
  398. Integer.toString(plr.playerIsMember).length());
  399. characterfile.newLine();
  400. characterfile.write("character-messages = ", 0, 21);
  401. characterfile.write(Integer.toString(plr.playerMessages), 0,
  402. Integer.toString(plr.playerMessages).length());
  403. characterfile.newLine();
  404. characterfile.write("character-lastconnection = ", 0, 27);
  405. characterfile.write(plr.playerLastConnect, 0,
  406. plr.playerLastConnect.length());
  407. characterfile.newLine();
  408. characterfile.write("character-lastlogin = ", 0, 22);
  409. characterfile.write(Integer.toString(plr.playerLastLogin), 0,
  410. Integer.toString(plr.playerLastLogin).length());
  411. characterfile.newLine();
  412. characterfile.write("character-energy = ", 0, 19);
  413. characterfile.write(Integer.toString(plr.playerEnergy), 0,
  414. Integer.toString(plr.playerEnergy).length());
  415. characterfile.newLine();
  416. characterfile.write("character-gametime = ", 0, 21);
  417. characterfile.write(Integer.toString(plr.playerGameTime), 0,
  418. Integer.toString(plr.playerGameTime).length());
  419. characterfile.newLine();
  420. characterfile.write("character-gamecount = ", 0, 22);
  421. characterfile.write(Integer.toString(plr.playerGameCount), 0,
  422.  
  423. /* EQUIPMENT*/
  424. characterfile.write("[EQUIPMENT]", 0, 11);
  425. characterfile.newLine();
  426. for (int i = 0; i < plr.playerEquipment.length; i++) {
  427. characterfile.write("character-equip = ", 0, 18);
  428. characterfile.write(Integer.toString(i), 0,
  429. Integer.toString(i).length());
  430. characterfile.write(" ", 0, 1);
  431. characterfile.write(Integer.toString(plr.playerEquipment[i]), 0,
  432. Integer.toString(plr.playerEquipment[i]).length());
  433. characterfile.write(" ", 0, 1);
  434. characterfile.write(Integer.toString(plr.playerEquipmentN[i]), 0,
  435. Integer.toString(plr.playerEquipmentN[i]).length());
  436. characterfile.write(" ", 0, 1);
  437. characterfile.newLine();
  438. }
  439. characterfile.newLine();
  440.  
  441. /* LOOK*/
  442. characterfile.write("[LOOK]", 0, 6);
  443. characterfile.newLine();
  444. for (int i = 0; i < plr.playerLook.length; i++) {
  445. characterfile.write("character-look = ", 0, 17);
  446. characterfile.write(Integer.toString(i), 0,
  447. Integer.toString(i).length());
  448. characterfile.write(" ", 0, 1);
  449. characterfile.write(Integer.toString(plr.playerLook[i]), 0,
  450. Integer.toString(plr.playerLook[i]).length());
  451. characterfile.newLine();
  452. }
  453. characterfile.newLine();
  454.  
  455. /* SKILLS*/
  456. characterfile.write("[SKILLS]", 0, 8);
  457. characterfile.newLine();
  458. for (int i = 0; i < plr.playerLevel.length; i++) {
  459. characterfile.write("character-skill = ", 0, 18);
  460. characterfile.write(Integer.toString(i), 0,
  461. Integer.toString(i).length());
  462. characterfile.write(" ", 0, 1);
  463. characterfile.write(Integer.toString(plr.playerLevel[i]), 0,
  464. Integer.toString(plr.playerLevel[i]).length());
  465. characterfile.write(" ", 0, 1);
  466. characterfile.write(Integer.toString(plr.playerXP[i]), 0,
  467. Integer.toString(plr.playerXP[i]).length());
  468. characterfile.newLine();
  469. }
  470. characterfile.newLine();
  471.  
  472. /* ITEMS*/
  473. characterfile.write("[ITEMS]", 0, 7);
  474. characterfile.newLine();
  475. for (int i = 0; i < plr.playerItems.length; i++) {
  476. if (plr.playerItems[i] > 0) {
  477. characterfile.write("character-item = ", 0, 17);
  478. characterfile.write(Integer.toString(i), 0,
  479. Integer.toString(i).length());
  480. characterfile.write(" ", 0, 1);
  481. characterfile.write(Integer.toString(plr.playerItems[i]), 0,
  482. Integer.toString(plr.playerItems[i]).length());
  483. characterfile.write(" ", 0, 1);
  484. characterfile.write(Integer.toString(plr.playerItemsN[i]), 0,
  485. Integer.toString(plr.playerItemsN[i]).length());
  486. characterfile.newLine();
  487. }
  488. }
  489. characterfile.newLine();
  490.  
  491. /* BANK*/
  492. characterfile.write("[BANK]", 0, 6);
  493. characterfile.newLine();
  494. for (int i = 0; i < plr.bankItems.length; i++) {
  495. if (plr.bankItems[i] > 0) {
  496. characterfile.write("character-bank = ", 0, 17);
  497. characterfile.write(Integer.toString(i), 0,
  498. Integer.toString(i).length());
  499. characterfile.write(" ", 0, 1);
  500. characterfile.write(Integer.toString(plr.bankItems[i]), 0,
  501. Integer.toString(plr.bankItems[i]).length());
  502. characterfile.write(" ", 0, 1);
  503. characterfile.write(Integer.toString(plr.bankItemsN[i]), 0,
  504. Integer.toString(plr.bankItemsN[i]).length());
  505. characterfile.newLine();
  506. }
  507. }
  508. characterfile.newLine();
  509.  
  510. /* FRIENDS*/
  511. characterfile.write("[FRIENDS]", 0, 9);
  512. characterfile.newLine();
  513. for (int i = 0; i < plr.friends.length; i++) {
  514. if (plr.friends[i] > 0) {
  515. characterfile.write("character-friend = ", 0, 19);
  516. characterfile.write(Integer.toString(i), 0,
  517. Integer.toString(i).length());
  518. characterfile.write(" ", 0, 1);
  519. characterfile.write(Long.toString(plr.friends[i]), 0,
  520. Long.toString(plr.friends[i]).length());
  521. characterfile.newLine();
  522. }
  523. }
  524. characterfile.newLine();
  525.  
  526. /* IGNORES*/
  527. characterfile.write("[IGNORES]", 0, 9);
  528. characterfile.newLine();
  529. for (int i = 0; i < plr.ignores.length; i++) {
  530. if (plr.ignores[i] > 0) {
  531. characterfile.write("character-ignore = ", 0, 19);
  532. characterfile.write(Integer.toString(i), 0,
  533. Integer.toString(i).length());
  534. characterfile.write(" ", 0, 1);
  535. characterfile.write(Long.toString(plr.ignores[i]), 0,
  536. Long.toString(plr.ignores[i]).length());
  537. characterfile.newLine();
  538. }
  539. }
  540. characterfile.newLine();
  541.  
  542. /* EOF*/
  543. characterfile.write("[EOF]", 0, 5);
  544. characterfile.newLine();
  545. characterfile.newLine();
  546. characterfile.close();
  547. } catch (IOException ioexception) {
  548. misc.println(plr.playerName + ": error writing file.");
  549. return false;
  550. }
  551. return true;
  552. }
  553.  
  554. public boolean saveGame(Player plr) {
  555. PlayerSave tempSave = new PlayerSave(plr);
  556.  
  557. try {
  558. ObjectOutputStream out = new ObjectOutputStream(
  559. new FileOutputStream(
  560. "./savedGames/" + tempSave.playerName + ".dat"));
  561.  
  562. out.writeObject((PlayerSave) tempSave);
  563. out.close();
  564. } catch (Exception e) {
  565. return false;
  566. }
  567. return true;
  568. }
  569.  
  570. public void println_debug(String str, int ID, String Name) {
  571. System.out.println("[client-" + ID + "-" + Name + "]: " + str);
  572. }
  573. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement