⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exitfunction.java

📁 一套MMORPG手机网络游戏的服务端
💻 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 + -