/* * Copyright 2014 The Skfiy Open Association. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.skfiy.typhon.spi.role; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.cache.Cache; import javax.cache.Caching; import javax.inject.Inject; import org.skfiy.typhon.Typhons; import org.skfiy.typhon.domain.Bag.Node; import org.skfiy.typhon.domain.FightGroup; import org.skfiy.typhon.domain.HeroProperty; import org.skfiy.typhon.domain.ITroop; import org.skfiy.typhon.domain.Normal; import org.skfiy.typhon.domain.Player; import org.skfiy.typhon.domain.RoleData; import org.skfiy.typhon.domain.Troop; import org.skfiy.typhon.domain.VacantData; import org.skfiy.typhon.domain.item.HeroItem; import org.skfiy.typhon.spi.RoleProvider; import com.alibaba.fastjson.JSON; /** * * @author Administrator */ public class VacantDataRoleDatable implements RoleDatable { @Inject private RoleProvider roleProvider; private final Cache<Integer, VacantData> cache; public VacantDataRoleDatable() { cache = Caching.getCacheManager().getCache("__roleVacantDataCache"); } @Override public void initialize(Player player) {} @Override public void serialize(Player player, RoleData roleData) { Normal normal = player.getNormal(); VacantData vacantData = new VacantData(); vacantData.setRid(player.getRole().getRid()); vacantData.setName(player.getRole().getName()); vacantData.setLevel(player.getRole().getLevel()); vacantData.setFriendSize(normal.getFriends().size()); vacantData.setAvatar(normal.getAvatar()); vacantData.setSocietyId(normal.getSocietyId()); vacantData.setSocietyName(normal.getSocietyName()); vacantData.setAvatarBorder(normal.getAvatarBorder()); vacantData.setCaptain(normal.getFightGroup(normal.getLastFidx()).getCaptain()); vacantData.setAidReceiveCounts(normal.getAidReceiveCounts()); vacantData.setVipLevel(normal.getVipLevel()); vacantData.setLastFidx(normal.getLastFidx()); vacantData.setLastLogoutTime(normal.getLastLogoutTime()); roleProvider.removeSuccor(normal); // ======================军营强化============================================================= List<Troop> troops = new ArrayList<>(ITroop.MAX_TROOP_SIZE); for (Troop t : normal.getTroops()) { troops.add((Troop) t.clone()); } vacantData.setTroops(troops); // ======================军营强化============================================================= // 设置武将的ID vacantData.setPvpSuccorIid(normal.getFightGroup(3).getSuccorIid()); buildVacantHeroData(normal, vacantData); cache.put(vacantData.getRid(), vacantData); roleData.setVacantData(JSON.toJSONString(vacantData)); } @Override public void deserialize(RoleData roleData, Player player) {} private void buildVacantHeroData(Normal normal, VacantData vacantData) { String[][] fightGroups = new String[Typhons.getInteger("typhon.spi.fightGroupCount")][Typhons .getInteger("typhon.spi.fightGroup.heroCount")]; int i = 0; Set<HeroItem> heroItems = new HashSet<>(); for (FightGroup fightGroup : normal.getFightGroups()) { heroItems.addAll(Arrays.asList(fightGroup.getHeroItems())); fightGroups[i++] = fightGroup.getHeroItemIds(); if (fightGroup.getSuccor() > 0 && fightGroup.getSuccorIid() != null) { Node node = normal.player().getHeroBag().findNode(fightGroup.getSuccor()); heroItems.add((HeroItem) node.getItem()); } } for (HeroItem heroItem : heroItems) { vacantData.addHeroProperty(newHeroProperty(heroItem)); } vacantData.setFightGroups(fightGroups); } private HeroProperty newHeroProperty(HeroItem heroItem) { HeroProperty heroProperty = new HeroProperty(); heroProperty.setLevel(heroItem.getLevel()); heroProperty.setLadder(heroItem.getLadder()); heroProperty.setExp(heroItem.getExp()); heroProperty.setRabbets(heroItem.getRabbets()); heroProperty.setExtraTong(heroItem.getExtraTong()); heroProperty.setExtraWu(heroItem.getExtraWu()); heroProperty.setExtraZhi(heroItem.getExtraZhi()); heroProperty.setExtraAtk(heroItem.getExtraAtk()); heroProperty.setExtraDef(heroItem.getExtraDef()); heroProperty.setExtraMatk(heroItem.getExtraMatk()); heroProperty.setExtraMdef(heroItem.getExtraMdef()); heroProperty.setExtraHp(heroItem.getExtraHp()); heroProperty.setExtraParryRate(heroItem.getExtraParryRate()); heroProperty.setExtraParryValue(heroItem.getExtraParryValue()); heroProperty.setExtraCritRate(heroItem.getExtraCritRate()); heroProperty.setExtraDecritRate(heroItem.getExtraDecritRate()); heroProperty.setExtraDeparryRate(heroItem.getExtraDeparryRate()); heroProperty.setExtraCritMagn(heroItem.getExtraCritMagn()); heroProperty.setId(heroItem.getId()); heroProperty.setPowerGuess(heroItem.getPowerGuess()); heroProperty.setRace(heroItem.getRace()); heroProperty.setStar(heroItem.getStar()); heroProperty.setWeaponsBuild(heroItem.getWeaponsBuild()); heroProperty.setWeaponsEnchant(heroItem.getWeaponsEnchant()); heroProperty.setWeaponsRabbets(heroItem.getWeaponsRabbets()); heroProperty.setWeaponsStreng(heroItem.getWeaponsStreng()); return heroProperty; } }