📄 loginfunction.java
字号:
package com.swing.game.crystal.function;
import org.dom4j.Element;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.net.MalformedURLException;
import java.util.*;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import com.swing.game.crystal.CrystalController;
import com.swing.game.crystal.CrystalPlayer;
import com.swing.game.crystal.utils.Person;
import com.swing.game.crystal.utils.StringComparator;
import com.swing.server.common.GameFunction;
public class LoginFunction
extends GameFunction {
public static Logger logger = Logger.getLogger(LoginFunction.class);
static {
PropertyConfigurator.configure("./cfg/Log4j.properties");
}
public List handleRequest(String player, String message) {
String[] data = message.split(CrystalController.SPLITTER_2);
List r = new ArrayList();
if (data.length == 3) {
StringBuffer sb = new StringBuffer();
sb.append("L ");
if (Integer.parseInt(data[2]) == CrystalController.VERSION)
{
try {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("./xml/User.xml"));
Element root = document.getRootElement();
Element temp = (Element) root.selectSingleNode("./user[@id=\"" +
player + "\"]");
if (temp != null) {
String id = temp.attributeValue("id");
String password = temp.selectSingleNode("password").getText();
if (password.equals(data[1])) {
String mapCode = temp.selectSingleNode("mapCode").getText().
toString();
String mapXPosition = temp.selectSingleNode("mapXPosition").
getText().toString();
String mapYPosition = temp.selectSingleNode("mapYPosition").
getText().toString();
// 玩家的种类
// 1:智者
// 2:战士
// 3:雷神
byte kind = Byte.parseByte(temp.selectSingleNode("kind").getText());
// 玩家的级别
byte level = Byte.parseByte(temp.selectSingleNode("level").
getText());
// 玩家当前的HP
// 血的上限为 基础值 + (level - 1) * 7
int hp = Integer.parseInt(temp.selectSingleNode("hp").getText());
int hpLimit = ( (Person) CrystalController.PersonMapping.get(String.
valueOf(kind))).hp + (level - 1) * 7;
// 玩家的当前能源
// power上限为 基础值 + (level - 1) * 7
int power = Integer.parseInt(temp.selectSingleNode("power").
getText());
int powerLimit = ( (Person) CrystalController.PersonMapping.get(String.
valueOf(kind))).power + (level - 1) * 7;
// 智者和战士的特殊精神力
int sp = Integer.parseInt(temp.selectSingleNode("sp").getText());
// 玩家的基本攻击力AT
int attack = Integer.parseInt(temp.selectSingleNode("attack").
getText());
// 玩家的基本防御力DF
int defense = Integer.parseInt(temp.selectSingleNode("defense").
getText());
// 玩家的恢复力
int resurrection = Integer.parseInt(temp.selectSingleNode(
"resurrection").getText());
// 玩家的敏捷度
int agility = Integer.parseInt(temp.selectSingleNode("agility").
getText());
// 玩家的金钱
int money = Integer.parseInt(temp.selectSingleNode("money").
getText());
// 玩家当前经验
// 升级经验计算公式(level + 2) * (level + 1)
int exp = Integer.parseInt(temp.selectSingleNode("exp").getText());
int boss = Integer.parseInt(temp.selectSingleNode("boss").getText());
int expLimit = (level + 2) * (level + 1);
// 玩家的职业
int career = Integer.parseInt(temp.selectSingleNode("carreer").
getText());
//玩家背包的当前容量
int capacity = Integer.parseInt(temp.selectSingleNode("capacity").
getText());
String curSuit = temp.selectSingleNode("curSuit").getText();
String curShoe = temp.selectSingleNode("curShoe").getText();
CrystalPlayer u = (CrystalPlayer) gc.playersByPlayerId.get(player);
List weapon = temp.selectSingleNode("weapon").selectNodes(
"Element");
String key = null;
String number = null;
Element sub = null;
if (weapon != null) {
for (Iterator iter = weapon.iterator(); iter.hasNext(); ) {
sub = (Element) iter.next();
key = sub.attributeValue("id");
number = sub.attributeValue("number");
u.equips.put(key, number);
}
}
List friends = temp.selectSingleNode("friends").selectNodes(
"Element");
if (friends != null) {
for (Iterator iter = friends.iterator(); iter.hasNext(); ) {
key = ( (Element) iter.next()).attributeValue("id");
u.addFriend(key);
}
}
u.id = id;
u.mapCode = Integer.parseInt(mapCode);
u.mapXPosition = Integer.parseInt(mapXPosition);
u.mapYPosition = Integer.parseInt(mapYPosition);
u.kind = kind;
u.level = level;
u.hp = hp;
u.hpLimit = hpLimit;
u.power = power;
u.powerLimit = powerLimit;
u.sp = sp;
u.attack = attack;
u.defense = defense;
u.resurrection = resurrection;
u.agility = agility;
u.money = money;
u.exp = exp;
u.boss = boss;
u.expLimit = expLimit;
u.career = career;
u.capacity = capacity;
u.curShoe = curShoe;
u.curSuit = curSuit;
u.time = System.currentTimeMillis();
sb.append(u.mapCode);
sb.append(" ");
sb.append(u.mapXPosition);
sb.append(" ");
sb.append(u.mapYPosition);
sb.append(" ");
sb.append(CrystalController.BASIC_URL);
sb.append(" ");
sb.append(u.kind);
sb.append(" ");
sb.append(u.level);
sb.append(" ");
sb.append(u.hp);
sb.append(" ");
sb.append(u.power);
sb.append(" ");
sb.append(u.sp);
sb.append(" ");
sb.append(u.attack);
sb.append(" ");
sb.append(u.defense);
sb.append(" ");
sb.append(u.resurrection);
sb.append(" ");
sb.append(u.agility);
sb.append(" ");
sb.append(u.money);
sb.append(" ");
sb.append(u.exp);
sb.append(" ");
sb.append(u.capacity);
sb.append(" ");
sb.append(u.curSuit);
sb.append(" ");
sb.append(u.curShoe);
sb.append(" ");
sb.append(u.boss);
sb.append(" ");
Object[] tt = u.getEquips().toArray();
Arrays.sort(tt, new StringComparator());
for (int ii = 0; ii < tt.length; ii++) {
sb.append(tt[ii] + "|" + u.getCountOfEquip( (String) tt[ii]) +
"*");
}
sb.delete(sb.length() - 1, sb.length());
if (u.friends != null) {
sb.append(" ");
for (Iterator iter = u.friends.iterator(); iter.hasNext(); ) {
sb.append( (String) iter.next() + "#");
}
sb.delete(sb.length() - 1, sb.length());
}
} // end if
else {
sb.append("W"); // w means wrong password
} // end else
} //end if
} // end try
catch (DocumentException e) {
logger.error(e);
}
catch (MalformedURLException e1) {
logger.error(e1);
}
}
else
sb.append("V");
r.add(sb.toString());
return r;
}
else
{
r.add("n");
return r;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -