Description: WRites a report for the Player into an XML file and takes a screen shot
Difficulty: 1.
Assumed Knowledge: Knowledge of XML is helpful but not needed
Tested Server: Winterloves.
Files/Classes Modified: Client.java, Misc.java
Procedure Step 1: Open misc and add inside
Code:
public static final char validCharacters[] = {
'_', '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', '0',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@', '#', '$', '%',
'^', '&', '*', '(', ')', '-', '+', '=', ':', ';', '.', '>', '<', ',',
'"', '[', ']', '|', '?', '/', '`'};
public static String longToString(long l) {
int i = 0;
char ac[] = new char[12];
while (l != 0L) {
long l1 = l;
l /= 37L;
ac[11 - i++] = validCharacters[(int) (l1 - l * 37L)];
}
return new String(ac, 12 - i, i);
}
.
Step 2: Next open Client and add
Code:
private ReportScreenShots shots = ReportScreenShots.getInstance();
/**
* Writes a log to XML file of the player been Reported
* @param player the name of the player been reported
* @param rule the rule the offending player broke
*/
public final void reportPlayer(final String player, final int rule) {
final String date = Calendar.DATE + "-" + Calendar.HOUR + "-" + Calendar.MINUTE;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.newDocument();
Element em = document.createElement("reported-player");
em.setAttribute("player", player);
em.setAttribute("date", date);
Node reportedBy = document.createTextNode("reported-by");
reportedBy.setNodeValue(playerName);
em.appendChild(reportedBy);
Node ruleBroken = document.createTextNode("rule");
ruleBroken.setNodeValue(Integer.toString(rule));
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new FileOutputStream("./report/Reported-Players.xml"));
transformer.transform(source, result);
} catch (ParserConfigurationException pce) {
System.err.println(pce);
} catch (TransformerConfigurationException tce) {
System.err.println(tce);
} catch (TransformerException te) {
System.err.println(te);
} catch (FileNotFoundException e) {
System.err.println(e);
}
}
.
Step 3: Add this with your other Packets:
Code:
case 218:
final String REPORTED_PLAYER = misc.longToString(inStream.readQWord());
final int RULE = inStream.readUnsignedByte();
final String DATE = Calendar.DATE + "-" + Calendar.HOUR + "-" + Calendar.MINUTE;
try {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Dimension screenSize = toolkit.getScreenSize();
Rectangle screenShape = new Rectangle(0, 0, screenSize.width, screenSize.height);
Robot robot = new Robot();
BufferedImage image = robot.createScreenCapture(screenShape);
File file = new File("/reports/" + REPORTED_PLAYER + " " + DATE + ".png");
reportPlayer(REPORTED_PLAYER, RULE);
shots.addImage(image, file);
} catch (AWTException awt) {
System.err.println(awt);
}
break;