@Override
  public PlayerAttribute getPlayerAttribute(Player player) {
    PlayerAttribute att = new PlayerAttribute();
    List<String> removeList = new ArrayList<String>();

    for (String collectId : player.getCollect().getInfos().keySet()) {
      try {
        CollectItem item = player.getCollect().getInfos().get(collectId);
        Q_collectBean collectBean =
            DataManager.getInstance().q_collectContainer.getMap().get(Integer.valueOf(collectId));

        if (CollectManager.getInstance().isActivity(item, collectBean)) {
          Q_buffBean buffBean =
              ManagerPool.dataManager.q_buffContainer.getMap().get(collectBean.getQ_buff_id());
          if (buffBean != null) att.add(PlayerAttribute.getPlayerAttribute(buffBean));
        }
      } catch (Exception e) {
        removeList.add(collectId);
      }
    }

    for (String key : removeList) {
      player.getCollect().getInfos().remove(key);
    }

    return att;
  }
Beispiel #2
0
  @Override
  public boolean wasHit(Monster monster, Fighter attacker, long damage) {
    if (ManagerPool.guildFlagManager.getFlagwarstatus() != 1) {
      return false;
    }

    if (ManagerPool.guildFlagManager.getflagmonidlist().contains(monster.getModelId())) {
      Player player = null;
      if (attacker instanceof Player) {
        player = (Player) attacker;
      } else if (attacker instanceof Pet) {
        player = ManagerPool.petInfoManager.getPetHost((Pet) attacker);
      }
      if (player != null) {
        ManagerPool.guildFlagManager.addFlagWarJF(player, 1);
        // 给玩家加攻击者BUFF
        List<Buff> buff = ManagerPool.buffManager.getBuffByModelId(player, BuffConst.FLAG_BUFF);
        if (buff.size() == 0) {
          ManagerPool.buffManager.removeByBuffId(player, BuffConst.FLAG_DEF_BUFF);
          ManagerPool.buffManager.addBuff(player, player, BuffConst.FLAG_BUFF, 0, 0, 0);
        }
        double hpdou = ((double) monster.getHp() / (double) monster.getMaxHp()) * 100;
        int hp = (int) hpdou;

        // 由于系统得不到战盟名字,,只好在这里做个缓存,所有参与的战盟名字都会被记录下来
        if (player.getGuildId() > 0
            && !GuildFlagManager.guildnamemap.containsKey(player.getGuildId())) {
          GuildFlagManager.guildnamemap.put(
              player.getGuildId(), player.getGuildInfo().getGuildName());
        }
        if (hp % 10 == 0) {
          Q_mapBean mapdb =
              ManagerPool.dataManager.q_mapContainer.getMap().get(monster.getMapModelId());
          String name = mapdb.getQ_map_name();
          GuildTerritoryFlag territory =
              ManagerPool.guildFlagManager.getTerritorymap().get(monster.getMapModelId());
          if (territory != null) {
            if (!monster.getParameters().containsKey("hp")) {
              monster.getParameters().put("hp", hp);
            }
            int oldhp = (Integer) monster.getParameters().get("hp");
            if (oldhp != hp) {
              monster.getParameters().put("hp", hp);
              if (hp > 50) {
                MessageUtil.notify_guild_all(
                    territory.getGuildid(),
                    String.format("本盟安插在【%s】地图的盟旗遭受攻击,剩余%s%血量", name, hp + ""));
              } else if (hp > 1) {
                MessageUtil.notify_guild_all(
                    territory.getGuildid(),
                    String.format("本盟安插在【%s】地图的盟旗仅剩余%s%血量,帮内弟兄赶紧前往讨伐敌人,守护盟旗!", name, hp + ""));
              }
            }
          }
        }
      }
    }
    return false;
  }
Beispiel #3
0
  /** 比武岛旗帜抢夺 开始,检查 */
  @Override
  public void defaultAction(Player player, NPC npc) {
    if (ManagerPool.biWuDaoManager.getBiwudaostate() != 1) {
      /* xuliang
      MessageUtil.notify_player(player, Notifys.MOUSEPOS, ResManager.getInstance().getString("现在不是比武岛活动时间,不能对旗帜操作."));
      */
      return;
    }
    if (player.isDie() == true) {
      /* xuliang
      MessageUtil.notify_player(player, Notifys.MOUSEPOS, ResManager.getInstance().getString("死亡状态下不能夺旗"));
      */
      return;
    }

    if (player.getGuildId() > 0) {
      if (ManagerPool.biWuDaoManager.getBiwudaoguildid() == player.getGuildId()) {
        /* xuliang
        MessageUtil.notify_player(player, Notifys.MOUSEPOS, ResManager.getInstance().getString("您的战盟已经是占领者."));
        */
        return;
      }

      long time = System.currentTimeMillis() / 1000 - ManagerPool.biWuDaoManager.getFlagcooldown();
      if (time < BiWuDaoManager.BIWUDAO_FLAGCOOLDOWNMAX) {
        MessageUtil.notify_player(
            player,
            Notifys.MOUSEPOS,
            ResManager.getInstance().getString("{1}秒后才可争夺。"),
            "" + (BiWuDaoManager.BIWUDAO_FLAGCOOLDOWNMAX - time));
        return;
      }

      ManagerPool.npcManager.playerGather(player, npc); // 开始采集
    } else {
      MessageUtil.notify_player(
          player, Notifys.MOUSEPOS, ResManager.getInstance().getString("没有加入战盟,不能夺旗"));
    }
  }
Beispiel #4
0
  /** 点击NPC触发 */
  @Override
  public void defaultAction(Player player, NPC npc) {
    try {
      if (!npc.getParameters().containsKey("marriageid")) {
        return;
      }

      long marriageid = (Long) npc.getParameters().get("marriageid");
      int num = (Integer) npc.getParameters().get("num");
      if (num <= 0) {
        MessageUtil.notify_player(
            player, Notifys.ERROR, ResManager.getInstance().getString("您的下手过慢了,该桌上的菜肴已经被吃光了"));
        return;
      }

      if (npc.getParameters().containsKey("player_" + player.getId())) {
        MessageUtil.notify_player(
            player,
            Notifys.ERROR,
            ResManager.getInstance().getString("婚宴均为流水席,您已经食用过该餐桌上的食物,无法再次食用。请转到请到下一席"));
        return;
      }

      if (marriageid == player.getMarriageid()) {
        MessageUtil.notify_player(
            player, Notifys.ERROR, ResManager.getInstance().getString("这是您自己的婚宴,请不要与宾客争夺菜肴"));
        return;
      }

      Marriage marriage = ManagerPool.marriageManager.getMarriage(marriageid);
      if (marriage == null) {
        return;
      }

      double distance = MapUtils.countDistance(player.getPosition(), npc.getPosition()); // 得到距离
      if (distance > MapUtils.GRID_BORDER * 10) {
        MessageUtil.notify_player(
            player, Notifys.ERROR, ResManager.getInstance().getString("距离过远,请靠近婚宴餐桌才能享用菜肴"));
        return;
      }

      Wedding wedding = ManagerPool.marriageManager.getWedding(marriageid);

      if (wedding != null) {
        boolean is = false; // 默认没有给红包
        for (RedEnvelope redEnvelope : wedding.getRedenvelopes()) {
          if (redEnvelope.getPlayerid() == player.getId()) {
            is = true; // 检测到已经给过红包
            break;
          }
        }

        if (is) { // 给过红包,弹出食用婚宴界面消息
          ResEdibleInfoToClientMessage cmsg = new ResEdibleInfoToClientMessage();
          cmsg.setFoodnum(num);
          cmsg.setMarriageid(marriageid);
          cmsg.setNpcid(npc.getId());
          long exp = ManagerPool.countManager.getCount(player, CountTypes.WEDDING_EXP, null);
          long zhenqi = ManagerPool.countManager.getCount(player, CountTypes.WEDDING_ZHENQI, null);
          cmsg.setTotalexp((int) exp);
          cmsg.setTotalzhenqi((int) zhenqi);
          cmsg.setType(wedding.getType());
          cmsg.setBride(marriage.getSpouseslist().get(1).getName());
          cmsg.setBridegroom(marriage.getSpouseslist().get(0).getName());
          MessageUtil.tell_player_message(player, cmsg);

        } else { // 如果没给过红包,发下面2个消息
          ResWeddingbanquetToClientMessage cmsg = new ResWeddingbanquetToClientMessage();
          cmsg.setBride(marriage.getSpouseslist().get(1).getName());
          cmsg.setBridegroom(marriage.getSpouseslist().get(0).getName());
          cmsg.setFoodnum(num);
          cmsg.setNpcid(npc.getId());
          cmsg.setMarriageid(marriageid);
          long leiji = ManagerPool.countManager.getCount(player, CountTypes.RED_ENVELOPE, null);
          cmsg.setTotalredenvelope((int) leiji);
          cmsg.setType(wedding.getType());
          MessageUtil.tell_player_message(player, cmsg);

          ResEdibleInfoToClientMessage cmsg2 = new ResEdibleInfoToClientMessage();
          cmsg2.setBride(marriage.getSpouseslist().get(1).getName());
          cmsg2.setBridegroom(marriage.getSpouseslist().get(0).getName());
          cmsg2.setFoodnum(num);
          cmsg2.setMarriageid(marriageid);
          cmsg2.setNpcid(npc.getId());
          long exp = ManagerPool.countManager.getCount(player, CountTypes.WEDDING_EXP, null);
          long zhenqi = ManagerPool.countManager.getCount(player, CountTypes.WEDDING_ZHENQI, null);
          cmsg2.setTotalexp((int) exp);
          cmsg2.setTotalzhenqi((int) zhenqi);
          cmsg2.setType(wedding.getType());
          MessageUtil.tell_player_message(player, cmsg2);
        }
      }
    } catch (Exception e) {
      log.error(e, e);
    }
  }
  @Override
  public void gather(Player player, NPC npc) {
    // 根据npc判断采集物品
    Q_npcBean bean = ManagerPool.dataManager.q_npcContainer.getMap().get(npc.getModelId());
    if (bean == null) {
      return;
    }
    String itemModelIds = bean.getQ_acquisition_item();
    if (StringUtil.isBlank(itemModelIds)) {
      // player停止采集
      ManagerPool.npcManager.playerStopGather(player);
      return;
    }
    Map<Integer, Integer> gatherMap = new HashMap<Integer, Integer>();
    String[] split = itemModelIds.split(Symbol.FENHAO_REG);
    for (String str : split) {
      String[] split2 = str.split(Symbol.XIAHUAXIAN_REG);
      int id = Integer.parseInt(split2[0]);
      int num = 1;
      if (split2.length > 1) num = Integer.parseInt(split2[1]);
      String jobLimit = null;
      if (split2.length > 2) jobLimit = split2[2];
      if (PlayerManager.checkJob(player.getJob(), jobLimit)) gatherMap.put(id, num);
    }
    if (gatherMap.size() == 0) {
      log.error("没有物品可以采集了:" + bean.getQ_id());
      ManagerPool.npcManager.playerStopGather(player);
      return;
    }
    // 判断包裹是否能够放下此物品
    int num = ManagerPool.backpackManager.getEmptyGridNum(player);
    if (num < gatherMap.size()) {
      // 提示包裹空间不足
      MessageUtil.notify_player(
          player, Notifys.ERROR, ResManager.getInstance().getString("背包空间不足"));
      // player停止采集
      ManagerPool.npcManager.playerStopGather(player);
      return;
    }

    // 根据npc判断采集物品
    String taskModelId = bean.getQ_acquisition_task();
    if (StringUtil.isNotBlank(taskModelId)) {
      MainTask mainTask = null;
      for (MainTask task : player.getCurrentMainTasks()) {
        if (taskModelId.contains(String.valueOf(task.getModelid()))) {
          mainTask = task;
          break;
        }
      }
      if (mainTask == null) {
        return;
      }
      Q_task_mainBean taskModel =
          DataManager.getInstance().q_task_mainContainer.getMap().get(mainTask.getModelid());
      if (player.getLevel() < taskModel.getQ_accept_needmingrade()) {
        // 等级不足
        MessageUtil.notify_player(
            player, Notifys.ERROR, ResManager.getInstance().getString("采集需要的等级不足"));
        return;
      }
      // 增加player物品
      List<Item> item = new ArrayList<Item>();
      Iterator<Entry<Integer, Integer>> iterator = gatherMap.entrySet().iterator();
      while (iterator.hasNext()) {
        Entry<Integer, Integer> next = iterator.next();
        List<Item> item2 = Item.createItems(next.getKey(), next.getValue(), true, 0);
        if (CollectionUtil.isNotBlank(item2)) item.addAll(item2);
      }

      if (BackpackManager.getInstance().hasAddSpace(player, item)) {
        log.error("玩家(" + player.getId() + ")完成任务(" + mainTask.getModelid() + ")检查物品有地儿放!");
      } else {
        log.error("玩家(" + player.getId() + ")完成任务(" + mainTask.getModelid() + ")检查物品没地儿放!");
      }
      if (ManagerPool.backpackManager.addItems(player, item, Reasons.TAKEUP, Config.getId())) {
        log.error("玩家(" + player.getId() + ")完成任务(" + mainTask.getModelid() + ")获得物品成功!");
        ;
      } else {
        log.error("玩家(" + player.getId() + ")完成任务(" + mainTask.getModelid() + ")获得物品失败!");
        ;
      }
      log.error("玩家(" + player.getId() + ")采集成功准备完成任务(" + mainTask.getModelid() + ")!");
      // 触发完成任务
      //			mainTask.changeTask();
      if (mainTask.checkFinsh(false, player)) {
        mainTask.finshTask(player);
        log.error("玩家(" + player.getId() + ")采集成功完成任务(" + taskModelId + ")了!");
      } else {

        log.error("玩家(" + player.getId() + ")采集成功未完成任务(" + taskModelId + ")了!");
      }
      //			ManagerPool.taskManager.finishMainTask(player, taskModelId);
    }

    // player停止采集
    ManagerPool.npcManager.playerStopGather(player);
  }
 @Override
 public PlayerAttribute getPlayerAttribute(Player player) {
   PlayerAttribute patt = new PlayerAttribute();
   Iterator<Q_arrowBean> iterator =
       DataManager.getInstance().q_arrowContainer.getMap().values().iterator();
   while (iterator.hasNext()) {
     Q_arrowBean q_arrowBean = iterator.next();
     if (q_arrowBean != null
         && q_arrowBean.getQ_arrow_id() <= player.getArrowData().getArrowlv()) {
       patt.setAttack(patt.getAttack() + q_arrowBean.getQ_attack());
       patt.setDefense(patt.getDefense() + q_arrowBean.getQ_defence());
       patt.setCrit(patt.getCrit() + q_arrowBean.getQ_crit());
       patt.setDodge(patt.getDodge() + q_arrowBean.getQ_dodge());
       patt.setMaxHp(patt.getMaxHp() + q_arrowBean.getQ_maxhp());
       patt.setMaxMp(patt.getMaxMp() + q_arrowBean.getQ_maxmp());
       patt.setMaxSp(patt.getMaxSp() + q_arrowBean.getQ_maxsp());
       patt.setAttackSpeed(patt.getAttackSpeed() + q_arrowBean.getQ_attackspeed());
       patt.setSpeed(patt.getSpeed() + q_arrowBean.getQ_speed());
     }
   }
   Iterator<Q_arrow_starBean> iterator1 =
       DataManager.getInstance().q_arrow_starContainer.getMap().values().iterator();
   while (iterator1.hasNext()) {
     Q_arrow_starBean q_arrow_starBean = iterator1.next();
     if (q_arrow_starBean != null
         && ((q_arrow_starBean.getQ_mainlv() < player.getArrowData().getStarData().getStarmainlv())
             || (q_arrow_starBean.getQ_mainlv()
                     == player.getArrowData().getStarData().getStarmainlv()
                 && q_arrow_starBean.getQ_sublv()
                     <= player.getArrowData().getStarData().getStarsublv()))) {
       patt.setAttack(patt.getAttack() + q_arrow_starBean.getQ_attack());
       patt.setDefense(patt.getDefense() + q_arrow_starBean.getQ_defence());
       patt.setCrit(patt.getCrit() + q_arrow_starBean.getQ_crit());
       patt.setDodge(patt.getDodge() + q_arrow_starBean.getQ_dodge());
       patt.setMaxHp(patt.getMaxHp() + q_arrow_starBean.getQ_maxhp());
       patt.setMaxMp(patt.getMaxMp() + q_arrow_starBean.getQ_maxmp());
       patt.setMaxSp(patt.getMaxSp() + q_arrow_starBean.getQ_maxsp());
       patt.setAttackSpeed(patt.getAttackSpeed() + q_arrow_starBean.getQ_attackspeed());
       patt.setSpeed(patt.getSpeed() + q_arrow_starBean.getQ_speed());
     }
   }
   Iterator<Q_arrow_bowBean> iterator2 =
       DataManager.getInstance().q_arrow_bowContainer.getMap().values().iterator();
   while (iterator2.hasNext()) {
     Q_arrow_bowBean q_arrow_bowBean = iterator2.next();
     if (q_arrow_bowBean != null
         && ((q_arrow_bowBean.getQ_mainlv() < player.getArrowData().getBowData().getBowmainlv())
             || (q_arrow_bowBean.getQ_mainlv() == player.getArrowData().getBowData().getBowmainlv()
                 && q_arrow_bowBean.getQ_sublv()
                     <= player.getArrowData().getBowData().getBowsublv()))) {
       patt.setAttack(patt.getAttack() + q_arrow_bowBean.getQ_attack());
       patt.setDefense(patt.getDefense() + q_arrow_bowBean.getQ_defence());
       patt.setCrit(patt.getCrit() + q_arrow_bowBean.getQ_crit());
       patt.setDodge(patt.getDodge() + q_arrow_bowBean.getQ_dodge());
       patt.setMaxHp(patt.getMaxHp() + q_arrow_bowBean.getQ_maxhp());
       patt.setMaxMp(patt.getMaxMp() + q_arrow_bowBean.getQ_maxmp());
       patt.setMaxSp(patt.getMaxSp() + q_arrow_bowBean.getQ_maxsp());
       patt.setAttackSpeed(patt.getAttackSpeed() + q_arrow_bowBean.getQ_attackspeed());
       patt.setSpeed(patt.getSpeed() + q_arrow_bowBean.getQ_speed());
     }
   }
   return patt;
 }
Beispiel #7
0
  /** 比武岛旗帜抢夺 结束 */
  @Override
  public void gather(Player player, NPC npc) {

    if (ManagerPool.biWuDaoManager.getBiwudaostate() != 1) {
      /* xuliang
      MessageUtil.notify_player(player, Notifys.ERROR, ResManager.getInstance().getString("现在不是比武岛活动时间,不能对旗帜操作."));
      */
      return;
    }

    if (player.getGuildId() > 0) {
      String gname = ResManager.getInstance().getString("未知战盟");
      Map map = ManagerPool.mapManager.getMap(player);

      // npc消失
      ManagerPool.npcManager.hideNpc(npc);

      // 夺旗剩余冷却时间地图广播
      ResBiWuDaoFlagCoolDownToClientMessage cmsg = new ResBiWuDaoFlagCoolDownToClientMessage();
      cmsg.setFlagcooldown(BiWuDaoManager.BIWUDAO_FLAGCOOLDOWNMAX);
      MessageUtil.tell_map_message(map, cmsg);

      GuildTmpInfo guildTmpInfo =
          ManagerPool.guildServerManager.getGuildTmpInfo(player.getGuildId());
      if (guildTmpInfo != null) {
        gname = guildTmpInfo.getGuildname();
        npc.setName(gname);
      }

      // 设定当前占领者和冷却开始时间
      ManagerPool.biWuDaoManager.setBiwudaoguildid(player.getGuildId());
      ManagerPool.biWuDaoManager.setBiwudaoguildname(gname);
      ManagerPool.biWuDaoManager.setFlagcooldown(System.currentTimeMillis() / 1000);

      // 比武岛旗帜占领者战盟名字地图广播
      ResBiWuDaoGuildnameToClientMessage gmsg = new ResBiWuDaoGuildnameToClientMessage();
      gmsg.setGuildid(player.getGuildId());
      gmsg.setGuildname(gname);
      MessageUtil.tell_map_message(map, gmsg);

      ManagerPool.npcManager.showNpc(npc);
      // 夺旗者加军功
      int num = 10;
      if (player.getBiwudaototalrank() < BiWuDaoManager.BIWUDAO_RAMKMAX) {
        if (BiWuDaoManager.BIWUDAO_RAMKMAX - player.getBiwudaototalrank() < num) {
          num = BiWuDaoManager.BIWUDAO_RAMKMAX - player.getBiwudaototalrank();
        }
        ManagerPool.rankManager.addranknum(player, num, RankType.BIWUDAO);
        player.setBiwudaototalrank(player.getBiwudaototalrank() + num);
      } else {
        MessageUtil.notify_player(
            player, Notifys.CHAT_SYSTEM, ResManager.getInstance().getString("已到达活动可获得军功300点上限"));
      }

      ParseUtil parseUtil = new ParseUtil();
      parseUtil.setValue(
          String.format(
              ResManager.getInstance().getString("【%s】的【%s】在比武岛占领战旗获得10点军功奖励,该战盟成员获得真气、经验收益翻倍!{@}"),
              gname,
              player.getName()),
          new ParseUtil.VipParm(
              VipManager.getInstance().getVIPLevel(player), GuideType.BIWUDAO_MOVE.getValue()));
      MessageUtil.notify_All_player(
          Notifys.CHAT_BULL,
          parseUtil.toString(),
          new ArrayList<GoodsInfoRes>(),
          GuideType.BIWUDAO_MOVE.getValue());
      // player停止采集
      ManagerPool.npcManager.playerStopGather(player, true);
      ScriptsUtils.call(ScriptEnum.BIWUDAO, "setmapbuff"); // 地图所有玩家加减BUFF
      return;

    } else {
      MessageUtil.notify_player(
          player, Notifys.ERROR, ResManager.getInstance().getString("只有战盟成员才能夺旗"));
    }
    // player停止采集
    ManagerPool.npcManager.playerStopGather(player, true);
  }
Beispiel #8
0
 public void addItems(
     Player player, List<Item> items, String title, String notice, Reasons reasons, long action) {
   List<Item> tmp = new ArrayList<Item>();
   List<Item> special = new ArrayList<Item>();
   tmp.addAll(items);
   while (tmp.iterator().hasNext()) {
     Item item = (Item) tmp.iterator().next();
     if (item.getItemModelId() < 0) {
       tmp.iterator().remove();
       special.add(item);
     }
   }
   boolean tag = true;
   for (Item item : special) {
     // -1金币,-2钻石,-3经验,-4真气  -5绑定钻石
     switch (item.getItemModelId()) {
       case -1:
         if (player.getMoney() + item.getNum() > Global.BAG_MAX_COPPER) tag = false;
         break;
         //			case -2:
         //				if(player.getGold()!=null&&player.getGold().getGold()+item.getNum() >
         // Global.BAG_MAX_GOLD)tag=false;
         //				break;
       case -3:
         if (PlayerManager.getInstance().isTopLevel(player)) tag = false;
         break;
       case -4:
         if (PlayerManager.getInstance().isFullZq(player)) tag = false;
         break;
       case -5:
         if (player.getBindGold() + item.getNum() > Global.BAG_MAX_GOLD) tag = false;
         break;
     }
   }
   if (!BackpackManager.getInstance().hasAddSpace(player, tmp)) {
     tag = false;
   }
   if (tag) {
     for (Item item : special) {
       // -1金币,-2钻石,-3经验,-4真气  -5绑定钻石
       switch (item.getItemModelId()) {
         case -1:
           BackpackManager.getInstance().changeMoney(player, item.getNum(), reasons, action);
           break;
           //				case -2:
           //					BackpackManager.getInstance().addGold(player, item.getNum(), reasons, action);
           //					break;
         case -3:
           PlayerManager.getInstance().addExp(player, item.getNum(), AttributeChangeReason.MAIL);
           break;
         case -4:
           PlayerManager.getInstance()
               .addZhenqi(player, item.getNum(), AttributeChangeReason.MAIL);
           break;
         case -5:
           BackpackManager.getInstance().changeBindGold(player, item.getNum(), reasons, action);
           break;
       }
     }
   } else {
     MailServerManager.getInstance()
         .sendSystemMail(player.getId(), player.getName(), title, notice, (byte) 0, 0, items);
   }
 }