📄 pkfunction.java
字号:
package com.swing.game.crystal.function;
import java.util.List;
import java.util.ArrayList;
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.PKPair;
import com.swing.game.crystal.utils.PKStatus;
import com.swing.game.crystal.utils.UserStatus;
import com.swing.server.common.GameFunction;
public class PKFunction
extends GameFunction {
public static Logger logger = Logger.getLogger(PKFunction.class);
static {
PropertyConfigurator.configure("./cfg/Log4j.properties");
}
public List handleRequest(String player, String message) {
// pk request : 4_mapCode_sponserID_embracerID
StringBuffer sb = new StringBuffer();
PKPair pair = null;
String[] command = message.split(CrystalController.SPLITTER_2);
try {
pair = (PKPair) CrystalController.PKList.get(player);
switch (command[0].charAt(0)) {
case '4':
if (pair == null) {
CrystalPlayer embracer = (CrystalPlayer) gc.playersByPlayerId.get(command[1]);
// check if the two users are in the same map
if (embracer == null)
sb.append("K*");
else {
CrystalPlayer sponser = (CrystalPlayer) gc.playersByPlayerId.get(player);
// check if this pk process can start
if (!ifCanPK(sponser, embracer))
sb.append("K*");
// create pk relationship
else {
pair = new PKPair(sponser, embracer);
System.out.println("New PKPair-User:" + player +
" to User:" + command[1]);
CrystalController.PKList.put(sponser.id, embracer.id, pair);
sponser.setStatus(UserStatus.USER_PKING);
sponser.setStatus(UserStatus.USER_PKING);
synchronized (pair) {
pair.process(player, command);
}
}
}
}
break;
// 结束与NPC的PK
case 'N': {
String[] params = command[1].split(" ");
CrystalPlayer u = (CrystalPlayer) gc.playersByPlayerId.
get(
player);
u.setStatus(UserStatus.MENUING);
u.hp = Integer.parseInt(params[0]);
u.power = Integer.parseInt(params[1]);
// 检查是否需要升级
// 传上来的到底是
u.exp = Integer.parseInt(params[2]);
sb.append( ( (GameFunction) gc.function.get("X")).handleRequest( player, "X"));
// 如果有使用的武器和得到的物品
// 61 95 11 8*
if (params.length >= 4) {
String[] equip = params[3].split("#");
// 如果有使用的武器
if (equip.length == 2) {
String[] used = equip[0].split("%");
for (int i = 0; i < used.length; i++) {
u.useEquip(used[i], 1);
}
u.addEquip(equip[1], "1");
}
else if (equip[0].indexOf("%") > -1) {
String[] used = equip[0].split("%");
for (int i = 0; i < used.length; i++) {
u.useEquip(used[i], 1);
}
}
else
u.addEquip(equip[0], "1");
}
break;
}
default:
// if one of the user in a pk relationship is dead, the PKPair should be set null and
// remove from the pklist, and the second person who come to get the data should not be
// process!!! so you should dodge that the pair is null
if (pair != null) {
pair.process(player, command);
if (pair.status == PKStatus.OVER) {
CrystalController.PKList.remove(pair.sponser.id);
System.out.println("Delete PKPair-User:" + pair.sponser.id +
" to User:" + pair.embracer.id);
pair = null;
}
}
break;
}
}
catch (Exception e) {
e.printStackTrace();
}
List r = new ArrayList();
r.add(sb.toString());
return r;
}
private boolean ifCanPK(CrystalPlayer sponser, CrystalPlayer embracer) {
// 玩家必须在行进中才可以PK
if (embracer.getStatus() == UserStatus.WALKING)
// check if the embracer's pk status is on
if (embracer.pkSwitch)
// check if the embracer's position is in the nearby 9 panes
if ( (sponser.mapXPosition >= embracer.mapXPosition - 2 &&
sponser.mapXPosition <= embracer.mapXPosition + 2) &&
(sponser.mapYPosition >= embracer.mapYPosition - 2 &&
sponser.mapYPosition <= embracer.mapYPosition + 2))
return true;
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -