📄 exitfunction.java
字号:
package com.swing.game.crystal.function;
import java.util.*;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import java.io.File;
import org.dom4j.Element;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.IOException;
import java.io.FileWriter;
import java.net.MalformedURLException;
import org.dom4j.io.OutputFormat;
import org.dom4j.DocumentException;
import com.swing.game.crystal.CrystalController;
import com.swing.game.crystal.CrystalPlayer;
import com.swing.game.crystal.utils.PKPair;
import com.swing.game.crystal.utils.UserStatus;
import com.swing.server.common.GameFunction;
public class ExitFunction extends GameFunction {
public static Logger logger = Logger.getLogger(ExitFunction.class);
static {
PropertyConfigurator.configure("./cfg/Log4j.properties");
}
public List handleRequest(String player, String message) {
PKPair p = (PKPair) CrystalController.PKList.remove(player);
if (p != null) {
if (p.sponser != null) {
p.sponser.setStatus(UserStatus.WALKING);
}
if (p.embracer != null) {
p.embracer.setStatus(UserStatus.WALKING);
}
}
// 写入游戏者的数值
try {
SAXReader reader = new SAXReader();
Document document = null;
document = reader.read(new File("./xml/User.xml"));
Element root = document.getRootElement();
Element e = (Element) root.selectSingleNode("./user[@id=\""
+ player + "\"]");
if (e != null) {
CrystalPlayer u = (CrystalPlayer) gc.playersByPlayerId
.get(player);
if (u.mapCode >= 100)
u.mapCode /= 100;
e.selectSingleNode("mapCode")
.setText(String.valueOf(u.mapCode));
e.selectSingleNode("mapXPosition").setText(
String.valueOf(u.mapXPosition));
e.selectSingleNode("mapYPosition").setText(
String.valueOf(u.mapYPosition));
e.selectSingleNode("kind").setText(String.valueOf(u.kind));
e.selectSingleNode("level").setText(String.valueOf(u.level));
e.selectSingleNode("hp").setText(String.valueOf(u.hp));
e.selectSingleNode("power").setText(String.valueOf(u.power));
e.selectSingleNode("sp").setText("0");
e.selectSingleNode("attack").setText(String.valueOf(u.attack));
e.selectSingleNode("defense")
.setText(String.valueOf(u.defense));
e.selectSingleNode("resurrection").setText(
String.valueOf(u.resurrection));
e.selectSingleNode("agility")
.setText(String.valueOf(u.agility));
e.selectSingleNode("money").setText(String.valueOf(u.money));
e.selectSingleNode("exp").setText(String.valueOf(u.exp));
e.selectSingleNode("boss").setText(String.valueOf(u.boss));
e.selectSingleNode("capacity").setText(
String.valueOf(u.capacity));
e.selectSingleNode("curSuit").setText(u.curSuit);
e.selectSingleNode("curShoe").setText(u.curShoe);
Element weapon = (Element) e.selectSingleNode("weapon");
e.remove(weapon);
weapon = e.addElement("weapon");
for (Iterator i = u.equips.keySet().iterator(); i.hasNext();) {
String key = (String) i.next();
String count = (String) u.equips.get(key);
weapon.addElement("Element").addAttribute("id", key)
.addAttribute("number", count);
}
Element friend = (Element) e.selectSingleNode("friend");
e.remove(friend);
friend = e.addElement("friend");
if (u.friends != null) {
for (Iterator i = u.friends.iterator(); i.hasNext();) {
String name = (String) i.next();
friend.addElement("Element").addAttribute("id", name);
}
}
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GB2312");
XMLWriter writer = new XMLWriter(new FileWriter(
"./xml/User.xml"), format);
writer.write(root.getDocument());
writer.close();
// 用户退出
// 通知原来地图的用户本用户已经离开
CrystalPlayer tt = null;
for (Iterator iter = gc.playersByPlayerId.values().iterator(); iter
.hasNext();) {
tt = (CrystalPlayer) iter.next();
if (tt != null) {
if (tt.mapCode == u.mapCode)
synchronized (tt) {
// 只要通知别人就行了,自己就不用知道了~~
tt.removeUsers(u);
}
}
}
gc.playersByPlayerId.remove(player);
logger.debug("user " + player + " exit");
}
} catch (MalformedURLException ex) {
logger.error(ex);
} catch (DocumentException ex) {
logger.error(ex);
} catch (IOException ex) {
logger.error(ex);
}
return new ArrayList();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -