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

📄 pkfunction.java

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